mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-25 22:01:33 +00:00
632 lines
32 KiB
Text
632 lines
32 KiB
Text
NEWS for the QuakeForge project
|
|
-------------------------------
|
|
Changes from 0.6.2
|
|
o Compile fix for zlib 1.2.6.
|
|
o Use CURL compile flags correctly.
|
|
o Use the correct OpenGL library on OpenBSD.
|
|
o Fix a crash in qw gl renderers when skin data updates come in before
|
|
the player model has been loaded.
|
|
o libQFgamecode now part of libQFruamoko (first step in installed
|
|
libraries cleanup).
|
|
o None of the renderer libraries are installed now: they're all built
|
|
into the main binary.
|
|
o Build system cleanup: less empty recursion.
|
|
o Direct support for blender's environment maps as skyboxes. QF will
|
|
now load a single image with (${skyname}_map.*) using blender's
|
|
layout. That is, 3x2 with the top row being back, right, front and
|
|
the bottom row being bottom, top, left.
|
|
x Package building (deb and rpm) is broken.
|
|
|
|
Changes from 0.6.1
|
|
o New renderer using GLSL. Currently looks very much like the original
|
|
software renderer with the additions of translucency, skyboxes and fog.
|
|
Also, it's mostly GLES ready.
|
|
o Screenshots now get written to $fs_userpath/QF (ie, QF in the quake
|
|
root) instead of the current gamedir.
|
|
o Demo playback can be recorded (currently to PNG files as
|
|
QF/qfnvNNNNNN.png) by adding "rec" as a second parameter to the
|
|
playdemo command. The recording is for 30fps playback. Sound is not
|
|
recorded at this stage.
|
|
o SDL sound now works in most cases.
|
|
o The blender mdl import/export script has been updated for blender
|
|
2.61.
|
|
o Partial cross-compile support for Android using the standalone ndk.
|
|
Doesn't produce a usable app yet.
|
|
o qfcc now has a --no-default-paths option to prevent qfcc including or
|
|
linking installed headers or libraries.
|
|
o Some more functions added to the Ruamoko draw api.
|
|
o Message buffer API for Ruamoko.
|
|
|
|
Changes from 0.6.0
|
|
o qfprogs has been moved from tools to qfcc (windows packages).
|
|
o The software renderer can now cope with pics being off-screen.
|
|
o A potential issue with reading past the end of PCX files has been fixed.
|
|
o qfcc now accepts --no-default-paths. Mainly for building Ruamoko code in
|
|
the main source tree, but useful for those that want to avoid libr.
|
|
o A segfault involving old dirconfs has been fixed.
|
|
o OSS sound should be working now.
|
|
|
|
Changes from 0.5.99 Beta 4.1
|
|
o Many more keys supported in X11 (-glx, -x11) clients: most of the keys
|
|
on a Microsoft Natural Ergonomic Keyboard 4000 v1.0 are supported (not
|
|
the five user keys or the zoom knob because Linux doesn't seem to
|
|
respond to them).
|
|
|
|
Changes from 0.5.99 Beta 3
|
|
o Global fog now works for both multi and single texture rendering.
|
|
o Z_Realloc() zeros the expanded part of the memory (thanks to sezero).
|
|
|
|
Changes from 0.5.99 Beta 2
|
|
o Possibly better ktpro support (server now informs the mod about its
|
|
MVDSV features)
|
|
o Due to it being incompatible with most clients, the MVD time skip
|
|
support has been removed.
|
|
o Global fog improvements for non-mtex rendering. Still not there yet,
|
|
though (hopefully next release).
|
|
o The OpenGL error on startup has been silenced: the cause was found and
|
|
taken out back of the barn.
|
|
o A mistake in an OpenGL version check has been fixed (thanks to MH).
|
|
o Setting gl_vaelements_max to -1 no longer causes QF to segfault
|
|
(console text and particles now support fake vertex arrays).
|
|
o Entity transform setup is now controled by the client rather than the
|
|
renderers. Amongst other things, this means that static entities now
|
|
setup their transform only once.
|
|
o Ruamoko
|
|
* Now has an __INFINITY__ built-in constant. It won't work on
|
|
machines that don't support IEEE single floats, but then again,
|
|
neither will quake.
|
|
* Old cvar() and cvar_set() functions moved from system.h to cvar.h.
|
|
|
|
Changes from 0.5.99 Beta 1
|
|
o The "loading" plaque has been reenabled.
|
|
o The key for toggling the menu can now be adjusted via a cvar.
|
|
o Similar for toggling the console.
|
|
o The legacy "bind" and "unbind" commands have been reworked. They now
|
|
affect only one table (IMT_MOD) that is below the main game tables.
|
|
This protects the user's advanced bindings from mods.
|
|
o A new key binding table has been added for use during demo playback
|
|
(IMT_DEMO). This is separate to the main game tables, but above
|
|
IMT_MOD (so important keys like F10 still work).
|
|
o More OpenBSD fixes.
|
|
o An apparent hang (sometimes crash) on a failed download in
|
|
quakeworld has been fixed.
|
|
o Ruamoko
|
|
* More math functions and constants
|
|
* Existing math functions should be faster
|
|
|
|
Changes from 0.5.5
|
|
o General enhancements
|
|
* many limits removed
|
|
o unlimited nails (client side)
|
|
o unlimited visible entities
|
|
o unlimited static entities
|
|
o for BSP files, only limits dictated by the format remain
|
|
* linux joystick improvements:
|
|
o default device is /dev/input/js0
|
|
o up to 18 buttons
|
|
* developer cvar is now a bit field
|
|
o 1 everything
|
|
o 2 warnings
|
|
o 4 video
|
|
o 8 file system: not found
|
|
o 16 file system: found
|
|
o 32 file system: general
|
|
o 64 networking
|
|
o 128 ruamoko: objects
|
|
o 256 ruamoko: messages
|
|
o 512 sound
|
|
o 1024 GL textures
|
|
* ALSA sound support now works with PulseAudio by default
|
|
* NQ now works on multi-homed hosts
|
|
* OpenBSD networking fixes
|
|
* loss of contact with the jack server is now detected. no more
|
|
hanging on shutdown after jack flakes out.
|
|
* fishey rendering fixed
|
|
* crash gracefully when a map has too many entities (rather than
|
|
silently dropping them: coag3 wasn't fun with missing ents)
|
|
* players can jump off pretty much anything (controllable via
|
|
sv_jump_any)
|
|
* funny size sound buffers no longer a problem
|
|
* RLE encoding for PCX output
|
|
* plugins moved to ${libdir}/quakeforge/plugins
|
|
* IPv6 support now working
|
|
* rotating bsp model support
|
|
* alsa 0.9 support dropped
|
|
* transparent map entities
|
|
* support map specified skyboxes
|
|
* NQ's maximum velocity is now spherical rather than cubical
|
|
* truncate long level names in NQ's HUD
|
|
* protocol 666 support from fitzquake (nq)
|
|
* large map support from fitzquake
|
|
* fullscreen mode is now compliant with modern window managers
|
|
* wide screens supported. Use the vid_aspect cvar to specify the
|
|
screen's aspect ratio (eg, 4:3, 16:9, 800:480 etc).
|
|
* lighting tweaks
|
|
* don't lose sound when switching workplaces in X
|
|
* correct resampling of sound effects for 48kHz sound output (or any
|
|
other rate, for that matter).
|
|
* support up to 7.1 channel sound files. However, output is still
|
|
limited to two channels.
|
|
* "lagged dlights" in mvds fixed
|
|
* flac sound file support
|
|
* support multiple directories in fs_sharepath
|
|
* new savegame format (property list)
|
|
* map entities can use property lists
|
|
* JACK audio output
|
|
* http download support
|
|
* CPQW support
|
|
* gold-key/radiation-symbol bug in rock2 fixed
|
|
* support for very big maps (eg marcher.bsp)
|
|
* beams (lightning etc) can be any length
|
|
* unlimited beams
|
|
* unlimited loaded models
|
|
* unlimited efrags
|
|
* support for Japanese keyboards
|
|
* particle improvements
|
|
* nq can now release the CPU when it is not needed (cl_usleep 1)
|
|
o Ruamoko (QuakeC)
|
|
* installed headers/libs now in ${prefix}/lib/qfcc
|
|
* plist access
|
|
* entity parsing support
|
|
* quake script parsing support
|
|
* dynamic strings
|
|
* mutable strings
|
|
* progs can provide their own entity parsing function. A sample
|
|
implementation is available.
|
|
o qfcc
|
|
* major rewrite of parser and code generation
|
|
o C style declarations fully supported (bit fields ignored)
|
|
o dead code elimination
|
|
o better constant folding
|
|
o Objective-QC runtime data moved into far data to avoid taking
|
|
precious near data defs.
|
|
o missing return statements in non-void functions now detected
|
|
with a suitable warning
|
|
o pointers and arrays now use C syntax
|
|
o "integer" now "int"
|
|
* field aliasing: .SEL thinkMethod = think;
|
|
* diagnostic variables
|
|
__PRETTY_FUNCTION__ __FUNCTION__ __LINE__ and __FILE__
|
|
* NIL renamed to nil
|
|
* man page documentation
|
|
* function overloading
|
|
* allow entity.vector.x (etc) instead of entity.vector_x
|
|
* many ObjectiveQuakeC fixes
|
|
* optional constant-vector parameter space optimisation (slows down
|
|
the code, though): can compile the version of frogbot that has
|
|
waypoints for almost 300 maps.
|
|
* rcall support
|
|
* static local vars
|
|
* more pointer support
|
|
* better compatibility with qcc
|
|
* preprocess progs.src
|
|
* one-pass compilation of progs.src based code when using cpp
|
|
* qccx escape codes supported. As there are conflicts with qfcc's
|
|
escape codes, --qccx-escapes can be used to select qccx instead of
|
|
qfcc.
|
|
* explicit references to classes and categories via
|
|
"@reference ClassName;" or "@reference ClassName(CategoryName);"
|
|
o Tools
|
|
* filter for displaying item information from a map (itemslist.py)
|
|
* wad tool improvements
|
|
* qfbsp can extract the entities data from bsp files.
|
|
* qflmp: converts between lmp and pcx
|
|
* io_mesh_qfmdl: blender mdl import/export script
|
|
|
|
Changes from 0.5.4
|
|
o General enhancements
|
|
* bring back a bunch of fixes from 0.5.3 (including news items) that
|
|
got lost in the rushed release of 0.5.4
|
|
* more cvar renaming: scr_consize -> con_size, scr_conspeed ->
|
|
con_speed, gl_conalpha -> con_alpha, vid_conwidth -> con_width,
|
|
vid_conheight -> con_height, show_fps -> hud_fps, show_ping ->
|
|
hud_ping, show_pl -> hud_pl, show_time -> hud_time, show_scoresuid ->
|
|
hud_scoreboard_uid
|
|
* demo_speed no longer affects console scrolling or cursor blink rate
|
|
* save game loading fixed
|
|
* FPS display now updated every 0.2 seconds and displays to the tenth
|
|
of an fps
|
|
* improper placement of fullscreen window on startup in -x11 and -glx
|
|
fixed (ie, starting with +set vid_fullscreen 1)
|
|
* QNX fixes from Mike Gorchak <mike@malva.ua>
|
|
* DirectX is now the default sound driver for windows
|
|
* renderer speedups
|
|
* demo_quit cvar to cause qf to quit automaticly at the end of a
|
|
timedemo to make automation of profiling easier
|
|
* server clients work with mvds
|
|
* never allow IP ports < 1024
|
|
* prettier particles. affected by gravity in qw (protocol restrictions
|
|
in nq)
|
|
* Darwin compile fixes
|
|
* fix a segfault when using 1 component lightmaps
|
|
* don't display the connect message when +connect is given on the
|
|
command line (thanks to Qize)
|
|
* mouse acceleration support in X11 thanks to Qize
|
|
* fix alpha blending in 2d mode when 3d has never been rendered
|
|
* don't flush garbage to the screen on the first render frame
|
|
* PNG support thanks to DrSpliff
|
|
* ALSA 0.5 support dropped
|
|
* ALSA 1.x support is "alsa", 0.9 is "alsa0_9" (only one is built)
|
|
* MIDI BGM support using libWildMidi
|
|
* GIB objects
|
|
* external conchars thanks to DrSpliff
|
|
* sv_logfile gets flushed on each print
|
|
* don't parse qsg protocol bits if the server isn't qsg compliant
|
|
* GIB functions and methods support named arguments
|
|
* many server features taken from QWE/mvdsv (HighlandeR): most notably
|
|
ktpro support
|
|
* plug most (if not all) potential buffer overflows
|
|
* nq deathmatch score fix from xi
|
|
* find radius bug fixes thanks to Grievre
|
|
* Luma texture support for brush models (From Fuh, by way of Grievre)
|
|
* --disable-static now works thanks to raorn
|
|
* treat server clients like non-client entities for GIB "frag" event
|
|
* expand ~ for fs_dirconf
|
|
* don't write config.cfg until /after/ it's been read :)
|
|
* ATI's libGL needed to be loaded with global symbols in order to work
|
|
properly
|
|
* oss sound doesn't block if the sound device is busy (from Grievre)
|
|
* add snd_bits/rate/stereo cvars to win and dx sound targets
|
|
* file based cd plugin from ashridah. oggs, wavs and midis can now be
|
|
used for background music. default cd plugin for all platforms
|
|
* many menu improvements
|
|
* win32 server console now has working input
|
|
* curses server console scrollback works
|
|
* qfdefs nuked. no longer needed as "standard" progs get resolved
|
|
staticly
|
|
* Anisotropy support, controlled by gl_anisotropy
|
|
* TruForm support, controlled by gl_tessellate
|
|
* Improvements in time accounting. Accurate to +-0.5ms, instead of -1,0
|
|
like others. Based on Grievre's and zquake's code
|
|
* mangled sounds on gamedir change fixed thanks to Grievre
|
|
* mtex support for world rendering.
|
|
* alias models use GL lighting
|
|
* support for 7 mouse buttons
|
|
* all archived cvars get written to config.cfg prefixed with "seta"
|
|
(new command that sets the archive bit)
|
|
* x11/glx fullscreen toggling fixes (window placement, mouse input etc)
|
|
* add optional reason to kick and ban for qw-server
|
|
* DrSpliff's qfadmin script updated
|
|
* quaternion support in progs engine and qfcc
|
|
* optionally allow recomte commands from a specified host address
|
|
* add a -novideo option to fbdev target to allow for headless operation
|
|
* full path reporting when writing screenshots
|
|
* one level of .. allowed in file access (eg, exec ../configs/foo.cfg)
|
|
* add r_norefresh support to sw and sw32 and rename the console side of
|
|
the cvar to cooperate better with the evil in customtf
|
|
* new cvar from Grievre to control "fake" filtering and change the fake
|
|
kick default
|
|
* fix bug where certain looped sounds would cause a hang
|
|
* 64 bit compile fixes
|
|
* alias models are no longer black on maps with no lighting info
|
|
o qfcc enhancements.
|
|
* conforms better to Objective-C sematics
|
|
* "struct" support closer to that of C (ie, separate namespace)
|
|
* now supports the "unsigned" type (32 bit unsigned integer)
|
|
* correct handling of ! and &&/|| for traditional code
|
|
* linker error message improvements
|
|
* better error checking in
|
|
* can cast between pointers and integers
|
|
* --traditional operator precedence conforms to qcc but --advanced to C
|
|
* --traditional is default for progs.src and --advanced for separate
|
|
compilation
|
|
* much better qcc conformance in general for --traditional
|
|
* more informative error reporting
|
|
* if (const) now works properly (though dead code doesn't get
|
|
eliminated)
|
|
* allow constant expressions to be used for builtin numbers
|
|
* better constant folding with auto-conversion between scalar types
|
|
* warn on if (a = b)
|
|
* better detection of function calls in binary expressions
|
|
* give temp defs a name, making it easier to read disassembly output
|
|
* ensure a op= b treats b as if it was (b)
|
|
* ; at end of functions optional. C style function declarations
|
|
available
|
|
* short circuit logic for && and || (breaks --traditional when enabled)
|
|
* non-const expressions for frame in state operator valid
|
|
* computed functions for state think allowed
|
|
* change --include FILE to pre-include a file rather than add a
|
|
directory search path. Maps to -include FILE on the cpp command line.
|
|
* all warnings (except for @self and self) are now fully controllable
|
|
* --traditional now auto-inits uninitialized local vars
|
|
* fast-float code option (defaults to on). kills almost 3000 statements
|
|
from prozac
|
|
o tools enhancements
|
|
* wad utilty along the lines of pak. can't yet be used for wad creation
|
|
(that's a little more complicated), but it can be used for listing
|
|
and extracting the contents of a wad file. watch out for *foo :)
|
|
* qfbsp
|
|
- no longer zaps the bsp file when given a bsp instead of a map
|
|
when compiling a map
|
|
- watervis support
|
|
- handle multiple wad files properly
|
|
- better whilespace support for windows
|
|
- bring in many of LordHavoc's changes to qbsp: HalfLife WorldCraft
|
|
texture alighnment, partial "point of plane" autocorrection,
|
|
hipnotic entity rotation
|
|
- remove many arbitrary limits (edgs, points on windong, tokens and
|
|
keys)
|
|
- force axis aligned planes to truely be axis aligned (fixes
|
|
degenerate polygons being generated by ClipWinding)
|
|
- bsp to prt support (for watervising sourceless maps)
|
|
- can now dump a map's textures to a wad file
|
|
- various impovements from Vic via hqbsp (lordhavoc)
|
|
* qflight
|
|
- colored lighting support (from LordHavoc's hlight)
|
|
- use vis data to speed up light passes
|
|
- gzipped bsp support (reading only)
|
|
- threading works
|
|
- OpenQuartz's extentions (except -ikmap) brought in. id's light
|
|
model is default
|
|
- support properties files for setting default light settings for
|
|
different light entity types
|
|
- spotlight now works
|
|
* pak
|
|
- can specify files to extract from a pak
|
|
* qfvis
|
|
- support old-style portal files again
|
|
o Progs engine/Ruamoko enhancements
|
|
* Object root class revamped
|
|
* progs debug/disassemble improvements
|
|
* progs version update due to missing pointer in the symtab struct
|
|
|
|
* progs string revamp: temp strings (eg, result from string + string)
|
|
get freed when the creating funciton exits
|
|
* new internal printf engine for progs
|
|
* report all bad builtins rather than just the first. make the bad
|
|
builtin number a warning and provide a suitable function in case the
|
|
function is called: allows progs with bad (but unused) builtins to
|
|
run anyway
|
|
* progs dump print an address if the def name is blank
|
|
* ruamoko math functions from Grievre
|
|
* while not yet perfect, qfprogs now works with qfo files
|
|
* new opcode: state.f. same as state, but takes a 3rd float operand to
|
|
specify the step for calculating nextthink. accessed using
|
|
[frame, think, step] (state is [frame, think])
|
|
* progs handle x % 0 by giving a 0 result
|
|
|
|
Changes from 0.5.3
|
|
o CRITICAL: exploitable buffer overflow in qw-server fixed
|
|
o more gib regex and other text manipuation support
|
|
o snd_oss_rw ditched in favour of just trying both ways
|
|
|
|
Changes from 0.5.2
|
|
|
|
o General enhancements.
|
|
* MVD playback in the qw clients.
|
|
* MVD recording in the qw server.
|
|
MVD support thanks to qwex 0.165b and highlander
|
|
* sv_maxrate changes now take effect immediately rather than when
|
|
clients (re)connect or change their rate
|
|
* segfault when using "snd_output null" fixed
|
|
* qw server "status" command now gives the server's uptime
|
|
* "map" will display the amount of time the current map has been active
|
|
* nq-server will now auto-load the start map if none is specified
|
|
* streaming for large sound files
|
|
* support for two channel sound files
|
|
* partial string buffer audit
|
|
* native Windows (win) sound driver finally works and is now default
|
|
* DirectX sound support added (dx)
|
|
* highchars stripped infokeys terminated properly so they don't contain
|
|
garbage
|
|
* WGL (nq-wgl.exe and qw-client-wgl.exe) resolution selection brought
|
|
in line with all other targets giving the vid_width and vid_height
|
|
cvars. Automatic aspect ratio support dropped.
|
|
* X11 (nq-x11 and qw-client-x11) no longer hangs on 32bpp displays
|
|
* new `view' system giving easier to control hud elements, centered
|
|
menus and locatable scoreboard (hud_scoreboard_gravity)
|
|
* OSS sound driver fixes: some kernel drivers need write-only access,
|
|
others need read/write
|
|
* able to load/unload semi-arbitrary plug-ins using console commands
|
|
* streaming for large sound files (eg., full length oggs)
|
|
* stereo sample support
|
|
* map command in the rcon admin list
|
|
* configurable "quake" directory layout
|
|
* server now actually runs properly when there's no network or
|
|
console input (eg, bots continue to battle unattended)
|
|
* skydome (gl_sky_clip 0) renders correctly
|
|
* external entity file support (maps/foo.bsp will use maps/foo.ent if
|
|
available)
|
|
* map specific config files
|
|
* map specific external textures in "textures/mapname/"
|
|
* support for more tga formats
|
|
* vid_conwidth cvar
|
|
* cleaner mouse enter/leave handling for x11 and glx windows
|
|
* hexenworld master server
|
|
* software and gl (some cards) fish-eye support
|
|
* "crosshair 3" for gl clients
|
|
* remote screen shots work
|
|
* curses console no longer default
|
|
* more key-names supported
|
|
* Matthew Wong's bsp2bmp `imported' as bsp2img. only pcx output
|
|
currently.
|
|
* console operator chat messages get echoed
|
|
* BSD fseek bug fixed
|
|
* no_pogo_stick 3 mode forcing friction independent of jump being
|
|
active
|
|
* rcon password /never/ gets written as it may be legitimate for
|
|
another server (ie, confused person :)
|
|
|
|
o GIB enhancements
|
|
* events system (map change, client enter/leave etc)
|
|
* several bug fixes
|
|
* documentation
|
|
|
|
o qfcc enhancements.
|
|
* @argc and @argv deprecated in favor of @args.count and @args.list
|
|
(@args is a struct with type @va_list)
|
|
* structure copy
|
|
* -L lib search paths and -l now behaves in a more expected manner
|
|
* default search paths for includes and libs
|
|
* updated man page and command line help
|
|
* [super ...] messages work
|
|
* categories work
|
|
* nested and struct block initializers work
|
|
* can access vector elements as vec.x as well as vec_x
|
|
* void (void) func; is now valid (no params)
|
|
* initialized globals can be used any place a true constant is expected
|
|
|
|
o qfbsp/qflight/qfvis enhancements
|
|
* various crash bug fixes
|
|
* hint, skip and detail brush support
|
|
* emit clipnodes in the correct order
|
|
* groks quest's "map2" format in addition to the original format
|
|
|
|
o Progs engine enhancements.
|
|
* arbitrary size data copying
|
|
* optionally handle division by 0 gracefully
|
|
|
|
Changes from 0.3.0
|
|
|
|
o General enhancements.
|
|
* NQ (quake1, single player, NetQuake, WinQuake) is back.
|
|
* Video (driver and renderer), audio, gamecode (progs), console,
|
|
model loading and general utility code shared in common libs between
|
|
NQ and QW
|
|
* Plugin system for sound and cd drivers.
|
|
* Ogg Vorbis compression for sound effect samples (streamed ogg support
|
|
is planned).
|
|
* Menu system re-written in QuakeC/Ruamoko
|
|
* Curses console for servers in Unix.
|
|
* New key binding system.
|
|
|
|
o Progs engine enhancements.
|
|
* Fully modular. Mod/Server-independent, allowing for
|
|
stand-alone QuakeC interpreter and client-side code.
|
|
* The engine is no longer dependent on progdefs.h. This makes
|
|
QuakeForge have trouble with QuakeC compilers that strip
|
|
symbol names -- but those can be repaired using the new
|
|
"qfdefs" tool.
|
|
* New basic types, and instructions for using them, for version
|
|
0.fff.002 progs (Quake's Version 6 is still supported).
|
|
* Better dynamic string handling. Dynamic strings are
|
|
garbage-collected.
|
|
* Object-oriented runtime system, in the style of Objective-C.
|
|
* Runtime fixups of built-in functions whose builtin number is
|
|
zero. If a built-in function is available to the engine, with
|
|
the same name given in the source code (e.g.
|
|
"void (void) coredump = #0;"), the engine will set the value
|
|
to the actual number used by the engine.
|
|
* Debugging support (needs compiler support, which qfcc
|
|
provides), including line-number information. Can display the
|
|
line of text in the source on which an error occurred, if the
|
|
new Cvar "pr_source_path" is set correctly.
|
|
* Instruction-level code dumps are now formatted in an
|
|
easier-to-read "assembly-code" format.
|
|
|
|
o QuakeForge Code Compiler, qfcc -- a replacement for qcc.
|
|
* Uses libQFutil for general utility functions such as hash
|
|
tables, file access (incomplete), and pak files.
|
|
* Uses libQFgamecode for progs information, such as opcode
|
|
tables, enums, types, etc.)
|
|
* Uses a lex/yacc (actually, Flex and Bison) scanner/parser
|
|
architecture, like a "real" compiler does.
|
|
* Drastically reduces the number of global defs needed for
|
|
a given progs, by reusing temporary globals when possible.
|
|
* All functions use the same block of defs for their local
|
|
variables (compatible with all known servers), which further
|
|
reduces the number of global defs needed.
|
|
* Nested/chained function calls work properly.
|
|
* Simple expressions, such as "a = b + c", compile to a single
|
|
instruction instead of two, and do not use a temporary
|
|
variable.
|
|
* Local variables can be initialized to known values, as in
|
|
"local float foo = 0.1;".
|
|
* Uses the C preprocessor, so header files are now possible and
|
|
useful.
|
|
* The compiler checks for uninitialized and unused variables in
|
|
functions, to help in finding errors.
|
|
* The compiler can generate and use object files, for separate
|
|
compilation (you don't have to compile all of your source all
|
|
the time, only the parts that have changed). Normally, object
|
|
files have a .qfo extension.
|
|
* The compiler can link libraries, which are implemented as .qfo
|
|
files inside pak archives.
|
|
* The compiler implements stricter type checking, to assist in
|
|
finding and fixing code errors.
|
|
* The C language's "for", "do...while", and "switch" control
|
|
structures have been adopted to provide a richer set of
|
|
structures for programmers to use.
|
|
* Additional functionality is given for progs that are to be
|
|
used with QuakeForge's more advanced progs engine:
|
|
|
|
x IMPORTANT:
|
|
The order of operations is slightly different in "native"
|
|
mode. The evaluation of "!foo & bar" is no longer
|
|
"!(foo & bar)", but rather "(!foo) & bar". The new order of
|
|
operations rules is more correct, but is different from how
|
|
QCC evaluated. If you give the --traditional switch to
|
|
qfcc's command-line, the old behavior is used.
|
|
x The compiler now allows you to create your own functions
|
|
that can accept a variable number of arguments, using the
|
|
special "..." notation. The special constants "@argc" and
|
|
"@argv" help with this. @argc contains the number of
|
|
arguments, and @argv contains a list of those arguments. The
|
|
handling of this is an improvement on C's vararg function
|
|
handling, in our opinion, made possible by how the Quake
|
|
system works.
|
|
x New basic types: integer, pointer, enum, and id.
|
|
x You can create new complex types, like arrays, structures,
|
|
and unions, and allocate them at runtime.
|
|
x String operators. You can add strings together to
|
|
concatenate them, and you can compare their contents using
|
|
the <=, <, >, >= operators.
|
|
x The integer type has the full array of C operations
|
|
available to it.
|
|
x QFCC and QuakeForge now contain an object-oriented
|
|
programming system, in the style of Objective-C and
|
|
Smalltalk. It's *very* powerful, and can be used to create
|
|
lots of interesting new things with rather little effort. If
|
|
you don't wish to use the new system, you can safely ignore
|
|
it with no danger to your code. :)
|
|
x Special support for using the "self" special variable inside
|
|
OO methods as well as the entity of the same name. If you
|
|
use OO support for entities and want to assign a method as a
|
|
touch/think/etc. function, "self" always refers to the
|
|
object that "owns" the method being executed. The special
|
|
variable "@self" was created to refer to the self entity.
|
|
"@this" refers to the object.
|
|
|
|
o Enhanced console scripting - GIB (GIB Isn't Bash)
|
|
* New language derived from the quake console.
|
|
* Functions with arguments and return values.
|
|
* Looping (while, for) and branching (if) commands.
|
|
* Local and global variables as well as access to cvars.
|
|
Supports Python-like slicing of variables.
|
|
* A basic math interpreter that respects order of operations
|
|
and provides most arithmetic and logic operators.
|
|
* Non-preemptive threading and callbacks to GIB functions in
|
|
response to game events (limited but functional at the moment)
|
|
* File reading, writing, and searching.
|
|
* Integrates with console -- GIB functions can be exported as
|
|
console commands to be used at the console or in binds.
|
|
* See gib.html in doc for more information.
|
|
|
|
o Enhanced time cheat ("speed cheat") protection
|
|
* Time cheats work for only a split-second before protection
|
|
kicks in.
|
|
* Players moving with wrong timings are sped up/slowed down to
|
|
the correct speed.
|
|
* Delay before protection activates means that lag and normal
|
|
network latency won't affect protection.
|
|
* People who aren't really trying to cheat won't be kicked :)
|
|
|
|
o Rendering enhancements
|
|
* Experimental 32 bit software renderer.
|
|
* Dynamic lights don't shine through walls.
|
|
* Colored alias model lighting for GL.
|
|
* Vertex Array use for sprites, particles and text. No fallbacks yet,
|
|
so QF wont work with old or broken GL drivers.
|
|
* Switchable particle styles: r_particles_style 0 for Id. Default is 1,
|
|
for lower particle count, larger texture particle effects.
|
|
* 16 bit vertex alias model format.
|
|
* Improved software gamma that more closely resembles hardware gamma.
|
|
* Countless speed improvements.
|
|
|
|
Known problems in 0.5.2:
|
|
o Doesn't work with 3dfx cards in MS Windows due to vertex array use.
|
|
o SDL clients don't reliably support fullscreen mode in MS Windows
|
|
o MS Windows support in general is sorely under-tested.
|
|
o Starting an SDL client (-sdl, -sgl or -sdl32) in fullscreen mode
|
|
and then going windowed requires in_grab to be toggled from 0 to 1
|
|
and back to 0 before the mouse will be released.
|