QMB-Based Particle Engine
FuhQuake (version 0.27 and above) contains a brand new particle engine based on the QMB engine. The particle engine controls what rocket trails, explosions, teleport splashes, blood, gunshots and so forth look like. The new particle effects are turned off by default and can be turned on by setting the gl_part_* variables to 1. Read this for more info.
Static Coloured Lighting
FuhQuake supports static coloured lighting by using .lit files.? Currently there are only .lit files for dm1-6 and the single player maps.? To use a .lit file, just put it in your maps directory and make sure gl_colorlights is turned on.? Lighting calculations of models have also been smoothened.
24/32Bit?Textures for Maps/Sprites/Model Skins/Bmodel Elements
FuhQuake (version 0.22 and above) has support for loading 24/32bit tga and png textures for brush/alias model and sprites as well as menu/hud graphics. There is currently no support for 24bit player skins.
The following explains where (in order) FuhQuake looks for textures.
Brush Models : textures/mapname/ -> textures/bmodels -> textures/
Alias Models : textures/sprites/ -> textures/
Sprites : textures/models/ -> textures/
Menu/misc graphics : textures/gfx/
Hud graphics : textures/wad/
Of course if FuhQuake can't find a tga/png file for a texture, it uses the normal 8bit one.? Also FuhQuake loads textures in the order tga->png->8bit from first to last.
Finally, fullbright colours on 24bit custom textures are disabled unless the server permits them with 'serverinfo 24bit_fbs 1'. They are however enabled automatically when playing on a local server or watching a demo.
When allowed, fullbrights on 24bit textures for brush models are loaded through luma textures. Luma textures are the same as normal textures, except the non-black pixels are made to have fullbright. See the qe1 project for examples. Fullbrights on 24bit textures for alias models on ther other hand happen automatically (when they are allowed) : if a texture for an alias model uses one of the last 32 colours in the quake palette then it is automatically made fullbright (i.e. works the same as in software quake).
'gl_detail 1' adds detail to textures. It's hard to explain but just stand right next to a wall and stare at it with 'gl_detail 1' and 'gl_detail 0'. You need 'gl_texsort 0' for this to work. I've turned gl_detail off ('gl_detail 0') by because is can be quite harmful on fps.
Incredible Underwater Effects
FuhQuake has two visually enhancing effects for when you are under water. The first is water fog (controlled by 'gl_waterfog') that adds a blue mist to water (red ,mist when in lava and green mist when in slime). There are two types of waterfog, gl_waterfog 1' and 'gl_waterfog 2'. You can control the amount of fog with 'gl_waterfogDensity'.? 'gl_waterfogDensity 1' gives you the most amount of fog, 'gl_waterfogDensity 0.25' gives you only 25% as much fog and so on.
The second underwater effect is water caustics (controlled by 'gl_caustics') which simulates light shining through the water's surface. . You need 'gl_texsort 0' for this to work.
FuhQuake supports skyboxes. As with other clients, you put the skybox files in quake/qw/env& and set the 'r_skybox' cvar to the skybox's name (example : 'r_skybox snow2'). If you don't want to use a skybox, use ' r_skybox "" '. The only catch is that any non-local server must be using 'serverinfo allow_skybox 1' for it to work. Skyboxes are automatically enabled during demo playback. Also if you change 'r_skybox' you need to restart the map (reconnect) for the changes to take effect.
When using 'gl_picmip_all 0' (default), gl_picmip and gl_max_size will not affect map or sprite textures, nor will it affect model skins (weapons, sentry guns etc ... use gl_playermip for player skins).? It also won't affect bsp elements like ammo and health packs, provided you are not using custom bsp elements.? If you use gl_max_size, you *must* set the value on the command line : 'fuhquake-gl.exe +set gl_max_size 32' for example.
Customisable Rocket Trails and Explosion/Light Colours
'r_explosiontype' controls what your explosions look like. 0 is normal explosions, 1 is sprite only, 2 is teleport effect, 3 is blood, 4 is big blood and 5 is gunshot.
There are 8 different rocket trails that you can try by using 'r_rockettrail x'. As before, x=1 gives normal trails, x=2 gives grenade trails and x=3 gives thick normal trails. You can try the others yourselves to see what they are.
r_rocketlight is used to control whether rockets have a light glow around them as they move through the air. 'r_rocketlight 0' turns them off and 'r_rocketlight 1' turns them on. You can also use in between values like 'r_rocketlight 0.5' to control the size of the light given off.
'r_explosionlight' is just like 'r_rocketlight' except it controls the light given off by explosions.
'r_rocketlightColor' determines the colour of the rocket light , The default value of 0 gives you the normal yellowish colour. 'r_rocketlightColor 1/2/3/4/5' is red/blue/purple/green/white respectively.
Simiarly 'r_explosionColor' determines the colour of explosion light. 'r_explosionColor 0/1/2/3/4/5/6' gives normal/red/blue/purple/green/white/random coloured explosion lights.
'r_flagColor' is the same as 'r_rocketlightColor' except that it affects teamfortress flag lights instead of rocket lights.
In glquake 2.33 there are two types of explosion/rocket lighting : 'gl_flashblend 0' type lighting and 'gl_flashblend 1' type lighting.? 'gl_flashblend 1' type lights appear as globes.? The same is true for zquake, except for rockets which always have the non globe type lighting, even if 'gl_flashblend' is 1.? However, now with FuhQuake, you can set 'gl_flashblend' to 2 to insist rockets have the globe type lighting.
You can also disable rocket/explosion/flag/powerup light flickering with 'r_lightflicker 0' (flickering gives me the shits)..? The default 'r_lightflicker 1' makes lights flicker just as they do in zquake.
Weapon Model Interpolation
Weapon model interpolation.? "set_interpolated_weapons all" turns it on and "set_interpolated_weapons none" turns it off.? Default is on.? Some weapons look much better than others when interpolated.? Some look damn ugly.? Hence I have made weapon interpolation *extremely* configurable.? Read on if you are interested.
When weapon interpolation is on you can chose exactly which weapons are interpolated by the "set_interpolated_weapons" command.? I have made this command quite powerful, but for now I'll just explain the basics.? The default setting is "set_interpolated_weapons all" which makes all weapon models?interpolate.??One of the two alternatives is something like?"set_interpolate_weapons only v_rock2 v_nail2" which would *only* make the rocket launcher and super nail gun interpolate.? The last alternative is something like "set_interpolate_weapons except v_rock2 v_nail2" which would make all weapons interpolate except for the rocket launcher and the super nail gun.? Of course this means you need to know the model name's of the weapons you are interested in, but this is the only way to make it work with mods like tf which introduce their own weapons to quake.? Note that it doesn't matter if you type "v_rock2" or "v_rock2.mdl" or "progs/v_rock2.mdl" or even "progs/v_rock2".? They will all work.? This command is very useful, as some models (like dox's tf model for the spy's knife) interpolate poorly and so its good to use "set_interpolate_weapons except v_knife v_knife2".
Now as I have hinted, there's much more you can do with "set_interpolate_weapons" but to be able to use it you need to understand some basic vector geometry.? Interpolation is all about vector geometry.? You take 2 frames which show (say) your rocket launcher in two different positions.? To the quake engine, the rocket launcher is just a bunch of vectors which define the location of the rocket launcher's vertices.? What interpolation does is take a weighted average of each vertices' vector coordinates in the 2 frames.? For example, the tip of the rocket launcher is a vertex.? In one quake frame it might be at coordinates (1,2,3) and in the next it might be (4,5,6).? Interpolation will average them to something in between like (2,3,4).? But here's the catch: Not all frames have the same vertices.? For example, the buckshot model I use (dox's) only draws a bright flash at the tip of the gun every now and then.? Its not there every frame.? So how can you interpolate the flash between two frames if it is there in one frame but not in the next?? A naive approach would have the muzzle flash all over the place which is quite ugly.? They way around this is *not* to interpolate vertices when the 2 different vectors for a vertex are too far apart.? Controlling exactly how much is too far apart is the powerful bit.
"gl_maxInterpolateDistance" defines the max distance between two vertices if interpolation is to occur between them.? The default value will handle basically everything.? You can change it however (anything too low or too high will be capped).? If you set it too low, interpolation won't work well because hardly anything will be close enough.? If you set it too high vertices that shouldn't be interpolated will be.? This causes the mdl muzzleflash issue you might have seen.? Nevertheless, there are times when a high "gl_maxInterpolateDistance" is actually better.? My spy's knife model is an example.? Setting "gl_maxInterpolateDistance" will apply to all weapon models.? To set different numbers for different models you use "set_interpolate_weapons" like this:
"set_interpolate_weapons only v_span 33000 v_rock2 40000 v_shot 35000 v_knife2?55000 v_knife 55000".? In fact you can leave out some numbers (like "set_interpolate_weapons only v_span v_rock2 40000 v_shot v_shot2 35000 v_span 60000") in which case the weapons without numbers will use the value?in "gl_maxInterpolateDistance".? Now none of this will be even close to necessary for 99% of people.? But for those with weird model's and those that like things to be configurable the opportunity is there.
The setting I use is?"set_interpolated_weapons only v_axe 80000 v_nail v_nail2 v_rock v_rock2 v_shot v_shot2 v_light v_asscan v_bio 80000 v_knife 80000 v_knife2 80000 v_medi 80000 v_rail v_span 80000 v_srifle" and it makes all my dm/tf models interpolate perfectly.?
Player Model Interpolation
Player model interpolation -?"gl_interpolate 1" turns it on and "gl_interpolate 0" turns it off.? Player model interpolation is on by default.
Q3?Style Rotating Models
Rotating models bob up and down like in quake3. 'cl_model_bobbing 0' turns this behaviour off.