Man Linux: Main Page and Category List

NAME

       fteqcc - FTE QuakeC compiler

SYNOPSIS

       fteqcc [options]

DESCRIPTION

       This manual page documents briefly the fteqcc command.

       fteqcc  is  a  program  that compiles QuakeC sourcecode to binaray game
       data of Quake1 or QuakeWorld based games.

OPTIONS

       --help Show summary of options.

       -Fautoproto
              enable automatic prototyping

       -Fwasm dump all assembler code to qc.asm

       -Kkeyword, -Kno-keyword
              turn language keywords on or off. Keywords available  to  toggle
              are:  asm, break, case, class, const, continue, default, entity,
              enum, enumflags, extern, float, for, goto, int, integer,  noref,
              nosave,   shared,  state,  string,  struct,  switch,  thinktime,
              typedef, union, var and vector.

       -O0, -O1, -O2, -O3,
              use optimisation level between 0 and 3. With 0, no  optimisation
              takes place, other values include more or less of the options in
              the section OPTIMISATION.

       -src directory
              Specify a directory to look for source files (progs.src) in.

       -Wall  show all warnings

FORMAT

       fteqcc supports several output formats.

       -Tstandard, -Tq1, -Tquakec
              This is the default setting and generates code  compatible  with
              original Quake1.

       -Thexen2, -Th2
              Outputs Hexen2 compatible code.

       -Tkkqwsv, -Tkk7, -Tbigprogs, -Tversion7, -Tkkqwsv
              Generates KK Version 7 compatible progs

       -Tfte  Generates code specific to FTE Quake.

OPTIMISATION

       The  following  options  may be used to fine-tune optimisation. Some of
       them are activated automatically.

       -Oassignments
              c = a*b is performed in one operation rather than two,  and  can
              cause older decompilers to fail.

       -Oshortenifs
              if  (!a)  was  traditionally  compiled  in  two statements. This
              optimisation does it in one, but can cause some  decompilers  to
              get confused.

       -Ononvec_parms
              In  the  origional  qcc, function parameters were specified as a
              vector store even for floats. This fixes that.

       -Oconstant_names
              strips out the names of constants from your progs, resulting  in
              smaller files. It makes decompilers leave out names or fabricate
              numerical ones.

       -Oconstant_name_strings
              strips out the names of string constants from your  progs.  This
              can break addons, so don’t use it in those cases.

       -Odupconstdefs
              merge  definitions  of  constants  which are the same value. Pay
              extra attention to assignment to constant warnings.

       -Onouplicatestrings
              compact the string table that is stored in the progs. It will be
              considerably smaller with this.

       -Olocals
              Strips  out  local  names  and definitions. This makes it REALLY
              hard to decompile

       -Ofunction_names
              This strips out the names of functions which are  never  called.
              Doesn’t make much of an impact though.

       -Ofilenames
              This strips out the filenames of the progs. This can confuse the
              really old decompilers, but is nothing to the more recent  ones.

       -Ounreferenced
              Removes  the  entries  of unreferenced variables. Doesn’t make a
              difference in well maintained code.

       -Ooverlaptemps
              Optimises the pr_globals count by  overlapping  temporaries.  In
              QC,  every  multiplication,  division  or  operation  in general
              produces  a  temporary  variable.  This  optimisation   prevents
              excess,  and in the case of Hexen2’s gamecode, reduces the count
              by 50k. This is the most important optimisation, ever.

       -Oconstantarithmatic
              5*6 actually emits an operation into the  progs.  This  prevents
              that happening, effectivly making the compiler see 30

       -Oprecache_file
              Strip out stuff wasted used in function calls and strings to the
              precache_file builtin (which is actually a stub in quake).

       -Oreturn_only
              Functions ending in a  return  statement  do  not  need  a  done
              statement  at  the  end  of  the function. This can confuse some
              decompilers, making functions appear larger than they were.

       -Ocompound_jumps
              This optimisation plays an effect  mostly  with  nested  if/else
              statements,   instead   of  jumping  to  an  unconditional  jump
              statement, it’ll jump to the  final  destination  instead.  This
              will bewilder decompilers.

       -Ostrip_functions
              Strips  out  the  ’defs’ of functions that were only ever called
              directly. This does not affect saved games.

       -Olocals_marshalling
              Store all locals  in  one  section  of  the  pr_globals.  Vastly
              reducing  it. This effectivly does the job of overlaptemps. It’s
              been noticed as buggy by a few, however, and  the  curcumstances
              where it causes problems are not yet known.

       -Ovectorcals
              Where  a  function is called with just a vector, this causes the
              function call to store three floats instead of one vector.  This
              can save a good number of pr_globals where those vectors contain
              many duplicate coordinates but do not match entirly.

AUTHOR

       fteqcc was written by David  Walton  <acceptthis@users.sourceforge.net>
       and J. Smith <timeserv@users.sourceforge.net>.

       This  manual  page was written by René van Bevern <rvb@debian.org>, for
       the Debian project (but may be used by others).  Most  information  was
       obtained from comments in the source codes.

                                 Juni 26, 2005