QuakeC
======
-Article TODO
-------------
-
-- expand explanations
-
About QuakeC
------------
QuakeC is a very simplified dialect of the well-known C programming language, and is used by the Quake I engine and its derivatives. Xonotic uses the GMQCC dialect of QuakeC, so only this dialect will be described (as well as some common extensions among Quake engines).
+There are several documents describing the original version of QC as used in Quake 1:
+- an [old version](http://www.gamers.org/dEngine/quake/spec/quake-spec34/index1.htm) which is a part of unofficial [Quake Documentation](http://www.gamers.org/dEngine/quake/spec/quake-spec34/)
+- a probably slightly [newer version](http://www.cataboligne.org/extra/qcmanual.html)
+- a [newer and extended version](http://pages.cs.wisc.edu/~jeremyp/quake/quakec/quakec.pdf) in PDF
+
+Even this page is outdated and incomplete, not all GMQCC QuakeC constructs are described here and some of the bugs mentioned here have already been fixed.
+
+Other resources
+---------------
+
+- [QC Tutorial for Absolute Beginners](https://web.archive.org/web/20091118154016/http://forums.inside3d.com/viewtopic.php?t=1286)
+- [List of builtins on quakewiki.org](https://quakewiki.org/wiki/List_of_builtin_functions)
+- comments and `doc.md` in the `qcsrc/dpdefs` directory
+
Example code
------------
**Note:** *findchain* is implemented in QuakeC for demonstration purposes only so one can see how to build a linked list, as this function is already built in to the engine and can be used directly
-Other resources
----------------
-
-Here is a forum on Inside3D where you can read more about QuakeC and ask questions:
-- QuakeC Forum on Inside3D: http://forums.inside3d.com/viewforum.php?f=2
-- QC Tutorial for Absolute Beginners: http://forums.inside3d.com/viewtopic.php?t=1286
-
-For available functions in QuakeC, look in the following places:
-- The Quakery: http://quakery.quakedev.com/qwiki/index.php/List_of_builtin_functions
-- Xonotic source: [builtins.qh](http://git.xonotic.org/?p=xonotic/xonotic-data.pk3dir.git;a=blob_plain;f=qcsrc/server/builtins.qh;hb=HEAD) for Quake functions, [extensions.qh](http://git.xonotic.org/?p=xonotic/xonotic-data.pk3dir.git;a=blob_plain;f=qcsrc/server/extensions.qh;hb=HEAD) for DarkPlaces extensions
-
Variables
=========
+++ /dev/null
-List of Contents
-----------------
-
-## 1. [The Quake-C Language](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LANG)
-1. [Comments, names and types](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LBC)
-2. [Definition of Variables](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LVAR)
-3. [Operations](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LOPS)
-4. [Definition of Functions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LFUN)
-5. [Loop and conditions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-lang.htm#QC-LOOP)
-
-## 2. [The Quake-C Basic Types](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-types.htm#QC-TYPES)
-1. [The simple Types](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-types.htm#QC-TSMP)
-2. [The field types](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-types.htm#QC-TFLD)
-
-## 3. [Quake-C Model definitions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-mdl.htm#QC-MDL)
-
-## 4. [Using Quake-C](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-mdl.htm#QC-USE)
-1. [Compilation](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-mdl.htm#QC-COMP)
-2. [Running Quake-C code](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-mdl.htm#QC-CEXEC)
-
-## 5. [Built-in Constants](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#QC-DEFS)
-1. [temporary entities](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_etemporary)
-2. [Sound Channels](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_channel)
-3. [Sound Attenuation](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_attenuate)
-4. [Contents of areas](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_contents)
-5. [light effects](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_effects)
-6. [Items](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_items)
-7. [Collision detection](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_solid)
-8. [Type of movements](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_movetype)
-9. [Take damage](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_damage)
-10. [Entity dead flag](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_deadflag)
-11. [Spawn flags](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-defs.htm#d_spawnflags)
-
-## 6. [Quake-C Entity Definition](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-enty.htm#QC-ENTY)
-1. [Types of entities](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-enty.htm#QC-ETYP)
-2. [Definition of entity fields](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-enty.htm#QC-EFLD)
-
-## 7. [Quake-C Global Variables](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-glob.htm#QC-GLOB)
-1. [Console Variables](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-glob.htm#d_consolev)
-2. [Global Variables](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-glob.htm#QC-GVAR)
-3. [Mandatory functions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-glob.htm#QC-GFUN)
-
-## 8. [Quake-C Built-in functions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BUILT)
-1. [Math functions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BMATH)
-2. [Vector maths](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BVEC)
-3. [Sounds](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BSND)
-4. [Entity management](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BENTY)
-5. [Entity movements](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BMOVE)
-6. [Fighting](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BFGHT)
-7. [Collision checking](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BCOLS)
-8. [Server managment](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BSRV)
-9. [Print messages](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BPRNT)
-10. [Console](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BCNSL)
-11. [Debugging](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BDEBG)
-12. [Precaching files](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-built.htm#QC-BPREC)
-
-## 9. [Quake-C Network Protocol](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-net.htm#QC-NET)
-1. [Definitions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-net.htm#QC-NDEF)
-2. [Built-in Network functions](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-net.htm#QC-NETF)
-3. [Some message structures](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-net.htm#d_messages)
-
-## 10. [Quake-C Tips and Tricks](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-trick.htm#QC-TRICK)
-1. [The quirks of Quake and Quake-C](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-trick.htm#QC-QUIRK)
-2. [Frequently Asked Questions about Quake-C](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-trick.htm#QC-FAQ)
-3. [Writing clean Quake-C code](http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-trick.htm#QC-SUGG)
-