this is an attempt to fix some of the deficiencies (as I see them) in quakespasm, while trying not to change how it feels to the user.

changes:
extra builtins -
	added lots of misc builtins, including:
	string manipulation+buffers,
	file access,
	bsp introspection,
	maths,
	tracebox,
	botclient stuff,
	clientcommands,
	etc.
	Setting pr_checkextensions 0 will a) prevent extensions from being advertised to the mod. b) display a warning when any extended builtin is used (assuming it would otherwise crash anyway).
stub builtins -
	also added stubs for builtins that either don't make sense in quakespasm or would need protocol extensions.
	these are merely present to avoid crashes and will display a warning the first time they're called.
multicast -
	supports pvs culling. still does not support phs.
precache builtins -
	these can now be used mid-map. be warned that this will result in other clients disconnecting (will still display warnings on the server).
misc stuff -
	MOVETYPE_FOLLOW and SOLID_CORPSE now work, .movement is supported.
cvar changes -
	for mods, autocvars now work. the set+seta command also now works.
	I bumped the cbuf size, because not only were well-documented mods were being punished for it, but also stuffcmded aliases were overflowing it.
clc_stringcmd -
	rewrote client->server string commands a little.
	this security fix blocks clients from being able to execute server-side aliases/cvars with names similar to 'allowed' console commands.
SV_TouchLinks -
	rewrote this to avoid potential crashes within recursive touch events (yes, this can happen in rare cases, even in the prior quakespasm version).
	may have minor behaviour differences, pr_checkextensions 0 disables this, restoring prior behaviour including instability-from-recursion.
single server socket -
	the server now only uses a single socket per protocol family.
	this makes NATs/firewalls much easier to deal with as servers no longer need to be DMZoned, only a single port needs to be forwarded..
ipv6 -
	this build can natively use ipv6, but will still assume ipv4 first.
	uses non-hybrid sockets so this should work on winxp too.
	use -noudp4 or -noudp6 to disable one and not the other. by default it'll try to use both.
	reduced mtu size to avoid connectivity issues. still higher than vanilla though, which may also cause other issues.
master servers -
	it is now possible to automatically list your server globally. hurrah...
	unfortunately the server list is still lame and provides no ping info, so have fun with that. :)
	thanks to ipv6, servers might get listed twice.
	you can turn this on with sv_public, or via the 'new game' menu.
proquake angles -
	now uses 16bit angles when connecting to proquake servers, or really most protocol15 servers including qrack+dp+etc.
	also advertises protocols, allowing fte servers to serve protocol 666+999 as needed.
bug fixes -
	spritegroups will now animate properly - this was a vanilla glquake bug.
model loader -
	alpha-tested models now supported
	spr32 sprites now supported (still using alpha testing rather than changing all sprites to use blending, so the alpha channel might as well still be 1bit)
	many limit-exceeding models will now safely fail to load rather than crashing the engine.
	note that some limits were not properly enforced before, and this might mean that a couple of models will newly fail to load (but won't crash the engine any more).
	known-but-unsupported model formats will display a more helpful message, without crashing. unknown formats will similarly no longer crash.
	bspx coloured lighting is now supported (somewhat common in the qw community). use -bspxlit argument with tyrutils-ericw's light util and discard the lit.
	added support for tyrutil-ericw's qbsp's -notex argument that omits textures, reducing file size and avoiding gpl violations. still doesn't do replacements though.
	fixed bsps that were compiled with vanilla qbsp's -noclip argument. will retain the correct view height, but will otherwise use the point-hull for everything.
binds menu -
	if provided, will parse a bindlist.lst file from the gamedir. this should take the form of lines like:
	+thecommand "some desc" "optional much longer description of it"
	lines with a command that is just a hyphen are treated as comments/separators.
	quakespasm ignores that third part, fte displays it on mouse-over.
	if any binds are provided this way, they will completely replace the built-in list.
	there is no limit to the binds that can be added, the menu will scroll, but there's no indicator that there are more/less.
particles -
	now includes fte's scriptable particle system.
	the config parser is a little different from fte (fte uses actual console commands, qs parses directly without the console).
		this means that configs are limited to just r_part+r_effect+r_trail. setting cvars from particle configs are not supported here.
		also currently missing support for models, embedded shaders (obviously), stains, viewspace particles.
		tga images are supported, png+jpg are not.
	no effects will be loaded by default, causing the engine to fall back on the existing particle system until a config is loaded.
		users can set r_particledesc if they really specific particle effects. mods should include the config name as a namespace/prefix.
	example usage (using FTE_SV_POINTPARTICLES with FTE_PART_NAMESPACES):
		float myexplosion = particleeffectnum("mypartcfg.myexplosion");
		pointparticles(myexplosion, self.origin, trace_plane_normal, 1);
	note that DP_SV_POINTPARTICLES and FTE_SV_POINTPARTICLES qc extensions are supposed to be identical, except that *certain* mods see DP_ and assume the entire particle system too, which is NOT the case, hence the need to check both extensions.
	note that if FTE_PART_NAMESPACES is supported, then particleeffectnum("mypartcfg.myexplosion") will automatically load the 'mypartcfg' particle set, however the engine deals with that.
	note that for dp compat, if FTE_PART_NAMESPACE_EFFECTINFO is supported, then "effectinfo.*" or "effectinfo_*.*" are supported namespaces that will should be compatible with DP's effects (if you ignore the prefix).
		Precaching a single particle effect like this will include this config for all particles with no namespace.
		So for dp compat, you can use the following:
		if (checkextension("FTE_SV_POINTPARTICLES") || checkextension("DP_SV_POINTPARTICLES"))
		{
			if (checkextension("FTE_PART_NAMESPACE_EFFECTINFO"))
			{
				particleeffectnum("effectinfo.dummy");	//so clients will attempt to load the effectinfo namespace, if not already available.
				particleeffectnum(strcat("effectinfo_", mapname, ".dummy"));	//map-specific effects
			}
			//else we have no idea where we're loading the config from... lets hope its either dp or the user helps us out
			//do precaches
			myexplosioneffect = particleeffectnum("myexplosioneffect");
		}
		//later
		if (myexplosioneffect)
			pointparticles(myexplosioneffect, self.origin, trace_plane_normal, 1);
		else
			te_explosion(self.origin);	//'generic' fallback
	(or you can just set 'r_particledesc effectinfo' in your mod's default.cfg and hope the user doesn't change it to something else)
	note that particleeffectnum acts as a precache. you don't need to cache the result in a spawn function, but you do need to have called it early enough to avoid warning message.
	note that any use of particleeffectnum will cause other clients to disconnect with 'illegible server message'.
	it is *ENTIRELY* the modder's/user's responsibility to keep things consistent and not garish. pay close attention to particle sizes, texture resolution, etc.
	mappers can add something like the following to their worldspawn entity:
		"_texpart_sky1" "weather.tex_rainsky"
	surfaces with the "sky1" texture will then act as emitters. this includes _texpart_*teleport or whatever. this doesn't require new gamecode.


test mods:
dpmod -
	a quick test of this seems to run fine, with the exception of a few non-generic particle effect builtins which are still stubs, mostly modified quad-damage effects.
smc -
	this does actually run, but is not exactly enjoyable due to:
		the use of pk3s means that everything needs to be extracted first.
		use of md3 format (these models will be invisible)
		smc uses viewmodelforclient for viewmodels (which makes them invisible / at origin)
		high mdl poly counts making mdls unloadable (resulting in them being .. you guessed it, invisible)
		unsupported stereo sounds (won't play, and might spam)
		no shader support (hey, at least qs won't obey the 'depthfunc equal' lines)
		smc loves late precaches (spammy).
	additionally an smc bug causes monsters to be spawned underground (monsters can't move).
	there's likely other issues. I've not tested it that extensively.
arcane dimensions -
	urm. still works?..
	gains DP_QC_GETSURFACE, so broken vanilla skies stop being broken (ad's only use for this extension).
	ad's engine particle system usage assumes dp internals, and needs a tweak in order to get it to behave more generically.


issues:
	(note that listed critisisms are not always bad things for the average qs user, but are probably bad for _someone_ and do limit potential mods)
	(some things can only be good, except for how invasive such a thing would be resulting in too many bugs, or I'm just too lazy/selfish to do them myself)
limited protocol changes -
	late precaches are in, but will still display warnings if depended upon.
	pointparticles and trailparticles are new, but there is no support for extended TE_* values (except weather is in). Use pointparticles if you need such effects.
	no ef_additive, no ef_noshadow, no traileffectnum, etc
	no viewmodelforclient etc
	visible ents are limited, demos are seriously bloated, its tempting to add fte's entity/delta protocol.
	voip would be a nice idea for all those first-playthrough map demos
limited renderer changes -
	no md3 support
	no iqm support
	harsh mdl limits
	sprites still alpha-tested
no filesystem updates -
	no pk3s
	still only numbered paks
	'game' console command is still stupid
console -
	is still annoying
	still prints non-ascii/non-unicode chars to stdout, which may include escape codes or other xterm/etc exploits.
	con_printf is still horribly slow (at least with vsync), and likely to crash on someone... and not just me. fixing this would make a few poorly designed blocking things not refresh properly.
no markup -
	all that ^1funny ^2and ^3annoying ^7text isn't handled, and remains as gibberish.
menu -
	still no mouse support
	still no way to add mod-specific cvars onto the menu
