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