quakeforge/NEWS

270 lines
14 KiB
Plaintext

NEWS for the QuakeForge project
-------------------------------
Changes from 0.5.4
o bring back a bunch of fixes from 0.5.3 (including news items) that got
lost in the rushed release of 0.5.4
o 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
o demo_speed no longer affects console scrolling or cursor blink rate
o save game loading fixed
o FPS display now updated every 0.2 seconds and displays to the tenth of
an fps
o qfcc conforms better to Objective-C sematics
o Object root class revamped
o qfcc's "struct" support closer to that of C (ie, separate namespace)
o minor improvement s to statement printing (pr_debug >= 1)
o qfcc how supports the "unsigned" type (32 bit unsigned integer)
o improper placement of fullscreen window on startup in -x11 and -glx fixed
(ie, starting with +set vid_fullscreen 1)
o correct handling of ! and &&/|| for traditional code
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. pcx output only
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 only work for 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.