FTEQCC(1)
π FTEQCC(1) π
okay so this is the manual page for fteqcc, from the General Commands Manual section of your friendly neighbourhood man pages. it's giving "compiler girlie who knows her stuff" and honestly? iconic. let's get into it π
β¨ NAME β¨
fteqcc β the FTE QuakeC compiler, no cap π¦
β¨ SYNOPSIS β¨
fteqcc [options]
that's it. that's the whole vibe. just you, your flags, and destiny β¨
β¨ DESCRIPTION β¨
bestie. listen. this manual page is the brief rundown of the fteqcc command β the little intro, the meet-cute, if you will. π«Ά
fteqcc is a program that compiles QuakeC sourcecode into binary game data for Quake1 or QuakeWorld based games. that's the whole job. it takes your cute little QC files and turns them into the actual game data. literally the glow-up pipeline. π
β¨ OPTIONS β¨
here's the full roster, no skipping, every single one gets its moment π
--helpβ shows you a summary of the options. the "help me help you" flag. π-Fautoprotoβ turns on automatic prototyping. it just does it for you, slay.-Fwasmβ dumps all the assembler code out toqc.asm. all of it. the whole thing. go off. π₯-Kkeyword,-Kno-keywordβ flips language keywords on or off, one at a time. the keywords you're allowed 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,varandvector. yes bestie, that's the whole list, I counted. π-O0,-O1,-O2,-O3β pick an optimisation level from 0 to 3. with0, no optimisation happens at all, and the other values include more or less of the options living down in the OPTIMISATION section. choose your fighter. β¨-srcdirectory β tells it which directory to go looking in for source files (progs.src). point it at the right place, bestie. π-Wallβ shows all the warnings. all of them. every last one. it's giving "we're telling you everything" energy. π
β¨ FORMAT β¨
fteqcc supports several output formats, so you can pick the one that matches your target game's whole aesthetic. π
-Tstandard,-Tq1,-Tquakecβ this is the default setting, and it generates code compatible with original Quake1. the classic. the blueprint. π-Thexen2,-Th2β outputs Hexen2 compatible code. different game, different energy. β-Tkkqwsv,-Tkk7,-Tbigprogs,-Tversion7,-Tkkqwsvβ generates KK Version 7 compatible progs. (yes,-Tkkqwsvis listed twice in the original, and I am not the one who's gonna touch that. periodt. π)-Tfteβ generates code that's specific to FTE Quake. the FTE-exclusive drip. π
β¨ OPTIMISATION β¨
these options are how you fine-tune the optimisation, bestie. some of them get activated automatically on their own, like they have main character energy and don't need your permission. π
-Oassignmentsβc = a*bgets performed in one single operation instead of two. downside: it can make older decompilers fail. so, iconic but chaotic. π-Oshortenifsβif (!a)was traditionally compiled into two statements. this optimisation does it in one, but it can cause some decompilers to get confused. they're just not ready for her. π¦-Ononvec_parmsβ in the original qcc, function parameters were specified as a vector store even for floats. this fixes that. finally. π«Ά-Oconstant_namesβ strips out the names of constants from your progs, which results in smaller files. side effect: it makes decompilers either leave out names entirely or fabricate numerical ones. rude but effective. π-Oconstant_name_stringsβ strips out the names of string constants from your progs.
β οΈ this can break addons, so do not use it in those cases. I'm serious, bestie. don't do it. π
-Odupconstdefsβ merges definitions of constants that have the same value. pay extra attention to assignment-to-constant warnings when you use this one, okay? π-Onouplicatestringsβ compacts the string table that's stored in the progs. it'll be considerably smaller with this. skinny legend. β¨-Olocalsβ strips out local names and definitions. this makes it REALLY hard to decompile. like, genuinely. good luck to whoever tries. π-Ofunction_namesβ strips out the names of functions that are never called. doesn't make much of an impact though, so it's kind of a lowkey one. π-Ofilenamesβ strips out the filenames from the progs. this can confuse the really old decompilers, but it's nothing to the more recent ones. they ate and left no crumbs. π-Ounreferencedβ removes the entries of unreferenced variables. doesn't make a difference in well maintained code, so if you're tidy it's a no-op basically. π§-Ooverlaptempsβ optimises thepr_globalscount by overlapping temporaries. here's the tea: in QC, every multiplication, division, or operation in general produces a temporary variable. this optimisation prevents the excess, and in the case of Hexen2's gamecode it reduces the count by 50k. this is the most important optimisation, ever. no exaggeration. π₯π-Oconstantarithmaticβ5*6actually emits an operation into the progs. this prevents that from happening, effectively making the compiler see30. math? in my compiler? it's more likely than you think. β-Oprecache_fileβ strips out stuff that's wasted and used in function calls and strings to theprecache_filebuiltin (which is actually a stub in quake). bye, wasted bytes. π-Oreturn_onlyβ functions that end in a return statement don't need adonestatement at the end of the function. this can confuse some decompilers, making functions appear larger than they actually were. catfishing, basically. π-Ocompound_jumpsβ this optimisation plays its biggest effect with nestedif/elsestatements: instead of jumping to an unconditional jump statement, it'll jump straight to the final destination instead. this will bewilder decompilers. not sorry. π-Ostrip_functionsβ strips out thedefsof functions that were only ever called directly. this does not affect saved games, so you're safe. π«Ά-Olocals_marshallingβ stores all locals in one section of thepr_globals, vastly reducing it. this effectively does the job ofoverlaptemps. β¨
β οΈ it's been noticed as buggy by a few people, however, and the circumstances where it causes problems are not yet known. use with caution, bestie. π
-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 ofpr_globalswhere those vectors contain many duplicate coordinates but don't match entirely. every byte counts. π
β¨ AUTHOR β¨
fteqcc was written by David Walton <acceptthis@users.sourceforge.net> and J. Smith <timeserv@users.sourceforge.net>. legends, honestly. π
this manual page was written by RenΓ© van Bevern <rvb@debian.org>, for the Debian project (but may be used by others). most of the information was obtained from comments in the source codes. detective work, and we respect it. π΅οΈββοΈπ
and that's the whole page, bestie! π this one was dated Juni 26, 2005, and it's the FTEQCC(1) page from the General Commands Manual. old but iconic. mwah. π
ππ¦
π¦ where this page comes from
- debian bookworm: fteqcc 3343+svn3400-4 Β· GPL-2.0-or-later
- debian trixie: fteqcc 3343+svn3400-6 Β· GPL-2.0-or-later
- ubuntu jammy: fteqcc 3343+svn3400-4 Β· GPL-2.0-or-later
- ubuntu noble: fteqcc 3343+svn3400-4 Β· GPL-2.0-or-later
- ubuntu questing: fteqcc 3343+svn3400-7
- ubuntu resolute: fteqcc 3343+svn3400-7build1 Β· GPL-2.0-or-later
- ubuntu stonking: fteqcc 3343+svn3400-7build1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms