------------------------------
KMQuake2 v0.19

Readme.txt
------------------------------
Enhanced Quake2 OpenGL-only engine with integrated Lazarus support
(kmquake2.exe & kmq2gamex86.dll && kmquake2.pk3)

	By Knightmare (knightmare66@yahoo.com)

Other code by:

	Aaron Reeves
	Anthony Jacques
	Backslash
	Barnes
	Berserk
	BramBo
	CDawg
	David M. Pochron
	Discoloda
	DarkOne
	Echon
	Fuh
	Harven
	Heffo
	Idle
	Jalisko
	Jitspoe
	MrG
	NeVo
	Nexus
	Nicolas
	Odium
	Pat Aftermoon
	Pooy
	Psycospaz
	Scarface
	Serge
	[SkulleR]
	Spike
	Steve Yeager
	Tomaz
	Vic
	VoiD
	And anyone else I forgot...

Menu screen by MDK

Load screen by Christopher "Sherpa" Owen

------------------------------
Key Features
------------------------------
- Eliminates the limit of 256 each on models, sounds, and images- no more index: overflow errors!
- No more SZ_Getspace: overflow errors
- Supports up to 8000 entities per map, up to 2000 in view at once
- Supports maps compiled with large chop values, up to 1024
- Supports server-side player speed control for class-based mods, etc.
- Supports server-side control of entity transparency
- Includes default Lazarus DLL with ACE bots, CTF and 3Team CTF support
- Uses modified Quake2maX particle effects
- Improved menus and console (uses some code from Quake2maX)
- Streamlined, more memory-efficent adaptation of decal system from Quake2maX
- TGA and JPG texture, skin, and pic autoloading
- Autoscaling of hi-res replacement textures
- *.pak and pk3 support
- Ogg Vorbis soundtrack support
- RoQ support
- Trans33 and Trans66 flag combining for solid alpha textures (cut-outs)
- Supports moving and animated transparent surfaces
- Integrated support for Lazarus footstep sounds

------------------------------
How To Run
------------------------------
	Unzip into your Quake2 dir and make a shortcut with path

	x\quake2\kmquake2.exe +set game gamedir (for singleplayer, LAN games, and net client use)

	or

	x\quake2\kmquake2_netserver.exe +set game gamedir (to host a net game)

	where X is your Quake2 dir's parent dir (for example, C: or D:\games), and gamedir
	is the game subdirectory (if any) where the mod you want to run is.  NOTE: for the
	mod's code to run, it must be compiled into a kmq2gamex86.dll (see end of file for
	instructions).

	If you want to enable the playing of cinematics off the game or mission pack CD, add

	+set scanforcd 1

	to the command line.  This is disabled by default.

	An OpenGL-compatible 3D accelerator (GeForce2 GTS or better, 3Dfx cards are NOT supported),
	P6 or Athlon 400MHz+, and at least 128MB of RAM are required.

	If it crashes on startup, make sure that kmq2gamex86.dll is in the baseq2 subdir.

	If you experience lockups on an ATI video card, set entity shell type to solid or flowing
	in the advanced section of the video menu.  The envmap effect may be causing the lockups.

	If performance is too slow, or there are no visible or all black textures, type
	"exec lowend.cfg; vid_restart" in the console.  If you still get all-black
	textures, remove all config files from the game directory you are running in and restart.
	This will make KMQ2 fall back on the internal cvar defaults.

	It is recommened that you copy the idlog.cin file to your baseq2/video folder.
	This will allow you to always open the menu before any demos start playing.

------------------------------
Added features as of v0.19:
------------------------------
- Integrated renderer into exe.  Ref_kmgl.dll is no longer needed.

- Added support for custom resolutions.  Uses cvars r_customwidth and r_customheight when gl_mode
	is set to -1.

- Added projection entity shadows.  This is selectable from the advanced section of the video menu.

- Added light blooms.  This is selectable from the advanced section of the video menu.

- Added support for Ogg Vorbis music.  To hear tracks ingame, rip the Q2 CD's audio tracks (2-11)
	to track02-track11.ogg and put them in baseq2/music.  For the mission pack audio tracks,
	rip the Ground Zero CD's audio tracks (2-11) to track12-track21.ogg.

- Added support for Quake3's RoQ format cinematics.

- Added support for 1024x1024 skyboxes.

- Anisotropic filtering now works properly and video menu allows selection from modes supported
	by the video card.

- Changed texture quality filter.  Low caps texture resolution at 128x128, medium at 256x256,
	high at 512x512, and highest has no cap.

- Reset defaults option in the menus now loads cvar defaults for all settings in that menu.

- Added support for custom door, plat, and button sounds.  See kmquake2_lazarus.txt.

- Fixed looped sound sourcing bug with bmodel entities (func_door, func_plat, etc).

- Added Jitspoe's Fix for sliding bug where steep sloped surfaces meet floors.

- Added cvar cl_rail_length to control length of rail trails for performance purposes.
	Defaults to 2048.  Rail trails are now drawn starting from the point closest to the player.

- Added changegame command to change game dirs while preserving key binds in cfg files.  Usage:

	changegame <gamedir>

	Use this instead of game <gamedir>.

- Scanning for the game CD (for cinematics) is now disabled by default.  This scan can take too long
	on some systems with network drives mapped.  To enable it, add

	+set scanforcd 1

	to the command line.

- Fixed crash on exiting biggun map.

------------------------------
Added features as of v0.18:
------------------------------
- Added pk3 support from Quake2Evolved.

- Added improved version of decal system from Quake2Max.

- Added new default font based on one from Jitspoe's Digital Paint Paintball 2.0.

- Added enhanced player setup display from Quake2Max.

- Made crosshair display in ingame menu clickable.

- Added levelshots to start server menu.

- Load game menu now shows levelshots for autosaves.

- Added option for hi-res saveshots to advanced video menu.

- Added option for model shading (off, low, high) to advanced video menu.
	Also, dynamic lights now light models by the vertices.

- Added option for flowing shell effect to advanced video menu.

- Now opens menu when disconnected.

- Revamped load screens.

- Blaster puffs now bounce off walls and brush models.

- Added support for JPG skies and 512x512 rotating skies.

- Added support for JPG and TGA endscreens.  Requires the presence of a PCX file with the same
	filename.  E.g. pics/victory.jpg and pics/victory.pcx
	The PCX file should be in the Q2 palette and no larger than 256x256.
	The 24-bit image can be very high res- up to 1024x1024.

- Fixed command buffer overflow vulnerability.

- Fixed crash with ACE bot print commands.

- Now includes the Lazarus essential data in the pak file.

- Renamed Lazarus "id" command to "entid" to fix conflict with ctf "id" command.

- Added new surface flag for trans and warp surfaces- 0x01000000, specifies no
	lightmap or glass envmap for that surface.  Useful for volumetric light effects.

------------------------------
Added features as of v0.16a:
------------------------------
- Fixed network error handling.

- Added server ping to join server menu.

- Fixed minor bug with sliders being affected by opening options submenus with mouse.

------------------------------
Added features as of v0.16:
------------------------------
- Added Harven's support for .md3 models.  Tested with alias scripted model_spawns, and works great.
	Will also replace .md2 models with identically named .md3s.  Tags are not yet supported.

- Added ACE bots to the included Lazarus DLL.  See kmquake2_lazarus.txt for more info.

- Added 3Team CTF support to the integrated Lazarus DLL.  CTF and 3Team CTF modes are now
	selectable from the start server menu.  See kmquake2_lazarus.txt for more info.

- Removed obsolete 8-bit texture paletting and point paramenter code.

- Fixed surface-specific footstep sounds for other players.

- Added Pooy and DarkOne's CPU usage fix.

- Added Backslash's support for mouse buttons 4 and 5 on newer MS mice.

- Added icon and close button in windowed mode.

- Added new HUD icons for both official mission packs, CTF, and Lazarus.

- Now supports maps with large chop sizes (up to 1024), for lower r_speeds in large outdoor areas.

- Added overbright bits on models.

- Added screenshots to load game menu.

- Added support for up to 100 crosshairs, selectable from ingame section of options menu.
	Now includes some additional crosshairs from Quake2Evolved, in addition to the ones
	by me and Psychospaz.

- Added new blood effect types, selectable from ingame section of options menu.

- Added option to scale complexity of particle effects to ingame section of options menu.

- Fixed dynamic light effects on bmodels and bmodel alpha surfaces.

- Added mouse sensitivity scaling for reduced FOV.

- Fixed missing textures on TNT/TNT2 cards.

- Texture filter now defaults to bilinear.  This should fix some compatibility problems.

- Integrated the Lazarus "texture" and "surf" commands into the client.  They are available
	in singleplayer mode when the cvar "developer" is set to 1.

- Added light glows to blaster puffs and bullet impacts.

- Fixed crash when starting up without kmquake2.pak.

- Fixed crash on fact2 when running with the included Lazarus DLL.


------------------------------
Added features as of v0.15:
------------------------------
- Now prevents demos from changing the current game dir.  To change the game dir, type disconnect,
	hit enter, then type game <gamename> (without brackets) and hit enter.  If you changed the
	game cvar first, disconnect and then hit ESCAPE.

- Added support for transparent HUD.

- Now uses a compatible build of the Lazarus mod (www.planetquake.com/lazarus).  See the included
	kmquake2_lazarus.txt for more info.  This DLL supplants the vanilla Q2 and CTF ones, as
	it does everyting they do and then some.  The source code of these old DLLs is included in the
	source archive.  Compiled binaries are available upon request (email me).

- Will now load footstep surface defintions from a file called texsurfs.txt.  Can be disabled
	in the ingame section of the options menu.

- Now inlcudes the footstep sounds and barrel gib models from Lazarus.

- Added server-side speed control.  Very useful for class-based and other mods.  See the new player
	state members in q_shared.h.

- Added ListPak, LoadFile, and FreeFile game import functions, allowing mods to easily load files,
	even from inside pak files.

- Added engine support for a +attack2 key, bindable with +use through the customize
	controls menu.

- Added Psychospaz's map loading screen with mapshots by me, and a default background pic
	by Christopher "Sherpa" Owen.

- Added splash screen on startup.  Uses code from TomazQuake.

- Added support for scaled console text and HUD.  Includes odium's new icons from Quake2Evolved.

- Added Pooy's pak0-pak99 support.

- Added CDawg's support for stereo sound samples.

- Added Psychospaz's fix for trans surface rendering, trans bmodels can now move and rotate.

- Added support for animated textures on trans surfaces.

- Increased max .cfg file size to 32KB, was 8KB.

- Now loads kmq2gamex86.dll instead of gamex86.dll.  This allows for better cohabitation,
	since it will no longer try to load a standard DLL (and then crash).

- Changed screenshot filenames to kmquake2_###.*, supporting up to 1000 screenshots.

- Added command auto-completion (hit TAB to auto-complete).

- Added cvar defaults.

- (New discovery) Will load credits from a file named "credits" (no extension) in the current
	game dir or in the root of a pak file. You can use text formatting codes in this file.

- Added the colored text support from Quake2Max.  The color of secondary text can be changed
	from the interface section of the options menu.  In addition, warnings are displayed
	in yellow and errors in red.  Here are the formatting codes ripped directly from the
	Quake2Max readme:

--------------------------------
Text Formatting -- Instructions
--------------------------------
Sort of like Quake3, if you type out ^ with a character following
you can set up colors and stuff for the rest of the string. Here
are the codes (colors are Q3 format colors):

^1: color red
^2: color green
^3: color yellow
^4: color blue
^5: color teal
^6: color purple
^7: color white
^8: color black
^9: color orange
^0: color grey
^a: specified by alt_text_color cvar

^s: toggle shadow
^i: toggle italic
^b: toggle bold
^r: set to default (normally: white, no shadow, no italic, no bold)

^^: just a plain ^ character

example: ^1p^7sychospaz^r
(this would be psychospaz with a red "p", followed by a white "ychospaz",
and finally a reset so following text would be normal)

*note: Quake2 has a 16 character limit on names per mod. You'll have to
	make a new mod to extend the limit.
--------------------------------

- Added scaled menus from Quake2Max.  This can be disabled from the interface section of the
	options menu.

- Added the mouse support in menus from Quake2Max.  Uses cursor graphics from Quake2Max 0.30.

- Fixed bug where the plasma beam and grapple were drawn from the viewpoint instead of from player
	model in chasecam mode.

- Added red blaster particle effects- TE_REDBLASTER temp event, EF_BLASTER|EF_IONRIPPER overload for
	red blaster, EF_HYPERBLASTER|EF_IONRIPPER overload for red hyperblaster.  Also changed
	hyperblaster bolt effect, the bolts are now all particles and look much better.

- The current player weapon model is now shown in the player config menu.  If there is none,
	it defaults to that PPM's default weapon model.

- Fixed bug where the player config menu couldn't find any valid player models when there was a patched
	player model in the current mod dir (used by Lazarus to add skin references for misc_actor).

- Removed MP3 support to comply with the GPL now that Frauenhofer is charging royalties for commercial
	MP3 decoders.

- Added advanced video options menu, using code from Quake2Max.  You can now adjust or disable most
	of the newer graphical features from this menu.

- Added Vic's overbright rendering, which greatly improves the display of 24-bit textures.
	Set gl_modulate and intensity to 1 for best results.

- Lightmaps are now drawn on trans and warp surfaces.  Set gl_trans_lightmaps to 0 to disable
	this if some surfaces seem too dark.

- Added Psychospaz's spheremapping on non-warp trans surfces and color shells.
	Set gl_spheremaps and gl_window_spheremaps to 0 to disable.

- The player options menu will now automatically find .tga and .jpg skins that don't have .pcx
	counterparts, and will also now show the default weapon model for each player model that
	has one.

- Added Psychospaz's chasecam.  Use the cl_3dcam cvar or the controls section
	of the options menu to enable.  You can enable the cl_3dcam_alpha cvar to make the
	player model transparent when the camera viewpoint moves in close (when backed up
	against	a wall, etc).  Includes Vic's fix for male/grunt flicker after map load.

- Added Psychospaz's fading centerprints and HUD notify.

- Now saves config data to a separate file named kmq2config.cfg to better cohabitate
	with other engine mods.  If this config file does not exist, it will read the
	config data from config.cfg.  Previously, the vid_ref cvar being forced to "kmgl"
	would crash other engines when they attempted to execute a config.cfg used by 
	this engine.

- Added 1280x1024, 1400x1050, and 1024x480 video modes.

- Changed r_speeds so that it no longer floods the console.  Instead, it
	outputs to the lower right of the screen.

- Added Psychospaz's dynamic shadows.  Set gl_shadows to 2 to enable.

- Added proportioned shadows for trans ents: the opacity of the shadow is proportional
	to the opacity of the entity casting it.

- Beams no longer cast shadows.

- The GeForce3 water warp effect can now be disabled by setting gl_pixel_shader_warp to 0.

- Added r_waterwave cvar, which when set to a nonzero value sets the amplitude of Half-Life
	style choppy water.

- Added Psychospaz's variable sized crosshair to the options menu, and support for up to 8
	different crosshairs.  Included are 3 of mine and 5 of Psychospaz's.

- Changed a few cvar defaults.  Gl_texsize now defaults to 1024, and is decreased as necessary
	on startup for compatibility.  R_skydistance defaults to 4600, and gl_lightcutoff
	defaults to 0.  Also, shadows are now always rendered with stencil-buffering if the
	vid card supports that.

- Changed cvarlist so that it now works with wildcards and shows flags and the latched value.
	Also, typing the name of the cvar shows both the current value and the latched value.

- Added support for the s.alpha entity state member.  This allows mod makers to specify
	an entity's transparency server-side, with any float value between 0 and 1.
	To make entities fade, set their alpha to 1 and then decrement it by small amounts.

- Added gunskin, gunindex2, gunframe2, and gunskin2 player state fields and support
	for a second weapon model, as well as changing the weapon model skin in the game dll.
	Be sure to update your mod(s) with the new q_shared.h to support this change.

- Is now compatible with all version 34 demos.  Previously, stray bits set in the flags
	for entity deltas could foul things up, but those bits are now ignored when a
	version 34 demo is playing.

- Added client protocol compatibility option to the join server menu, which can be set to
	make the client lie about its version number to the server (34 instead of 35), thus
	allowing pinging and joining version 34 servers (most existing Quake2 servers
	using the stock engine) from the join server menu.

- Added option to download options menu to auto-download 24-bit textures (JPG and TGA).

- Non-dedicated server no longer bombs out with WSAECONNRESET error when a client crashes
	or quits without disconnecting first.

- Fixed bug where player footsteps would crash a non-local client.  This was caused by using
	a server-side trace to get the flags of the surface the player is walking on.  This
	has been replaced by a modified client-side trace.

- Fixed exploitable bug in TGA and JPEG loading code where setting the player skin to the
	name of a reserved system device woud bomb out the client.  Malicious players whose
	clients don't have the TGA and JPEG loading code were exploiting this to kick other
	players off servers.

- Added the hardware gamma control from Vic's l33t engine, which I believe was taken from
	MrG's BeefQuake.

- The gl_modulate cvar now has a dynamic effect, you no longer need to do vid_restart.

- The temp event TE_BLUEHYPEBLASTER now works properly, generating a blue splash, while
	TE_FLECHETTE now generates a lighter blue splash.

- Added gl_drawbbox cvar, which when set to 1 draws a bounding box around all models.

- Added Nicolas' fix for odd-colored lines at the top and bottom of cinematics.

- Added NET_SERVER_BUILD preprocessor option in game/q_shared.h.  Enable this to compile an
	executable suitable for hosting games over the internet.

- Increased MAX_STATS to 256.  Be sure to update your mod(s) with the new q_shared.h
	to support this change.

------------------------------
Added features as of v0.04:
------------------------------
- Decreased MAX_EDICTS to 8192, and MAX_PARTICLES to 8192, saving lots of memory.
	Be sure to update your mod(s) to support this change-MAX_EDICTS in q_shared.h
	and maxentities in g_save.c should both be changed to 8192

- Changed login and logout sounds to same as player teleport (makes more sense).

- Fixed security issue with rcon_password.

- Added David M. Pochron's gl_lightcutoff cvar- set to 0 for smoother light falloff, default 64.

- Added Psychospaz's con_alpha cvar to control console alpha, also in options.
	(default 0.5)

- Added Psychospaz's gl_shellstencil cvar for stencil buffering color shells.

- Added Psychospaz's enhanced particle system, making this now an OpenGL-only engine;
	It will automatically load ref_kmgl.dll on startup
	(to disable, comment out #define ENHANCED_PARTICLES line in q_shared.h, and 
	recompile both the exe and ref_kmgl.dll)

------------------------------
Added features as of v0.03:
------------------------------
- Added GuyP's gl_showtris fix (now works without having to disable mulitexturing)

- Added JPEG (.jpg) image support, also JPEG screenshots (use cvar gl_screenshot_jpeg)
	Use gl_screenshot_jpeg_quality to control quality (1-100, worst-best)
	Uses libjpeg library, source for which is available from http://www.ijg.org

- Added Nexus's improved high-res texture replacement support (replace old .wal textures
	with higher-res .tga or .jpg images, scales them down to fit in proper alignment
	(use gl_texsize cvar to set max tex size, default 256)

- Added NEW_ENTITY_STATE_MEMBERS define in q_shared.h that allows compiling of exe's
	that are compatible with modified Eraser bot builds.  Comment it out to enable
	comaptibility.

------------------------------
Added features as of v0.02:
------------------------------
- Added support for modelindex5, 6, 7, and 8 (see game/q_shared.h)

- Implemented client-side Lazarus footstep sounds (see client/cl_fx.c and game/p_view.c)

- Added Nexus's and Serge's support for hi-res (up to 1024x1024) console pics

- Added David M. Pochron's 44 and 48 KHz sound support

- Added Heffo's rudimentary MP3 playback (22KHz mono only)

------------------------------
Added features as of v0.01:
------------------------------
- Removed limits that caused *Index: overflow:

	* Increased Max_models and Max_sounds to 8192 each

	* Increased Max_images to 2048

- Increased entity limit:

	* Increased Max_edicts to 16384

- Effectively removed probability of SZ_Getspace: overflow errors:

	* Increased max net message size to 44800 bytes

- Increased ammout of things that can be displayed on screen:

	* Increased Max_particles to 65536

	* Increased max visible entities to 2048

- Kept compatibility with existing demos

- Added MZ_BLUEBLASTER and MZ_GREENHYPERBLASTER muzzle flashes.

- Added EF_BLUEBLASTER effect: generated by using both EF_BLASTER and
	EF_BLUEHYPERBLASTER effects flags.

- Added EF_FLAG3 effect: generated by setting both EF_FLAG1 and EF_FLAG2;
	this is useful for 3-Team CTF.

- Doesn't overwrite existing quake2.exe or ref_gl.dll
	(select KMQuake2 OpenGL from video menu)

- MrG's enhanced shadows (gl_shadows 2), 32-bit texture, skin and HUD pic support,
	default to trilinear filtering, and GeForce3 water warp.

- BramBo's FPS counter (set cl_drawfps to 1 to enable).

- David M. Pochron's variable sized skybox (get rid of world disappearing into sky)-
	use "r_skydistance" cvar to set maximum visable distance

- Aaron Reeves's shadowless explosions

- VoiD's *.pak support


=====================================================================================

			MOD SUPPORT INSTRUCTIONS

=====================================================================================
To compile your mod for this modified engine, use the included game/q_shared.h
and game/game.h from the source release (Or you can just search for all my changes,
which are marked with my name, if you don't want to use GPLed headers.  Just don't
forget to include the #ifdef compiler directives around my changes).

Next, in g_save.c, change the assignment of the "maxentities" cvar from this:

maxentities = gi.cvar ("maxentities", "1024", CVAR_LATCH);

to this:

maxentities = gi.cvar ("maxentities", va("%i",MAX_EDICTS), CVAR_LATCH);

Then, change all references to modelindex 255 to MAX_MODELS-1 (for most mods,
p_client.c, p_view.c, and p_weapon.c are the only files that need changes).

Before compiling, make sure that this line in q_shared.h is uncommented:

#define	KMQUAKE2_ENGINE_MOD

You can revert your mod to compatibility with other engines by commenting out this line.

Finally, after compiling, rename the resulting gamex86.dll to kmq2gamex86.dll so
that the new engine will load it (don't overwrite your existing game DLL!).

=====================================================================================

If you downloaded this engine mod without source code, the complete source is
available at www.geocities.com/knightmare66.

=====================================================================================

Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.