Complete Quake-c ver 1.06 package:
Compiled by Rob Albin (albinatr@apci.net)

I basically made this since Id never got around to making a complete
Quake-c ZIP including the QC source and compiler for ver 1.06.
Also added two files that IMO are really usefull with the package.


Includes:
  Original Quake-c utilities
    (compiler and source code for compiler)
  
  ver 1.06 of the QC PROGS.DAT source files
    (includeing updated client.qc and weapons.qc)

  qccwin32.exe, a faster QC compiler
    (author unknown, from ftp://cdrom.com/pub/quake/utils/quakec/)
  
  qcman10.txt, a comprehensive QC reference manual
    (by Ferrara Francesco, from ftp://cdrom.com/pub/quake/docs/editing/)

(PROGS.DAT deleted from archive, for space.)


--------------------
 ORIGINAL README.TXT
--------------------

This is the last major component of the quake utilities to be released.
To be honest, I have been a little reticent to release this because
most of the actual qc code is basically rather embarassing crap.
The time never became available to even give it a good top to bottom
going over.  I never spent any quality engineering time on my parts,
American wrote a lot of qc code, and even Romero has a bit of work in
there.  It is a mess.  If you look through the code and occasionally
think "This is stupid!", you are probably right...

The compiler itself can be drastically sped up by just replacing the
symbol searches with binary trees or hashing.  We remotely compile on
our alpha, so it hasn't been a big enough issue for me to do it, but
as the code size grows and grows it will be done sooner or later.


The resulting code is horribly nieve and space ineficient (twleve
bytes / instruction).  If common subexpression removal was added,
the instruction count could probably be cut nearly in half.  I would
have liked to have done a better job at this, but this was my first
compiler front end, and I had a ton of other things fighting for my
time.  The next one will turn out better. (wow, I'm making a lot of
excuses here, aren't I?)


Qcc also performs some other maintenence functions for us, like
rebuildinng all the brush models and making pak files, but those
functions are only usefull if you have created all new data for
everything.  models.qc and sprites.qc don't actually generate any
code, they are just parsed by modelgen and spritegen and included for
completeness.



To modify the quake program code, set up a new game directory parallel
with id1, and containing a "progs" subdirectory.  Copy all the .qc
files and progs.src into that, and just run qcc from that directory.
That will compile all of the files listed in progs.src and (if there
aren't any errors) generate a new progs.dat file in the parent
directory.


As a simple test, open the client.qc file, go to the ClientObituary
function at the end, and change some of the messages.

The directory structure will look something like:

/quake/quake.exe
/quake/id1/
/quake/mygame/progs.dat
/quake/mygame/progs/progs.src
/quake/mygame/progs/world.qc
/quake/mygame/progs/client.qc
/quake/mygame/progs/... etc ...

Run quake with "-game mygame", which will cause quake to look for data
in the mygame directory before falling back to id1.  In this example,
it will find the new progs.dat from mygame, and take everything else
from id1.  You can type "path" at the quake console to verify the
current search order of directories and pak files.  THIS WILL ONLY
WORK WITH A REGISTERED VERSION OF QUAKE.


The header qcc.h has the language spec and some documentation, but
I'm not positive if it is all current.


The only documentation for the various builtin functions I can offer
is the source code used by quake.  See builtin.c.  Some of them are
required to do things outside the scope of the qc world, and some are
just there for speed reasons.


PLEASE don't ask me questions about all this!


John Carmack

