by Spike » Sun Nov 22, 2009 4:24 pm
Simple stuff:
custom huds. models on huds. team/flag status. button counters.
extended score boards/results (accuracy stats, favoured killees, captures, defends, etc).
inventory systems (eg: prydon gate could use a proper mouse cursor for its menus).
team/class/observer menus (particuarly customtf).
Secondary views (rear view mirror for quake rally, guided rockets, etc).
client side gibs (600 of them without clogging network, etc, nail grenades, semi-persistant ents).
client side spawning of particles (think hipnotic's bridges).
enforced fov/angles (flashbangs/magic-mushroom effects), locked view points (top-down mods, etc).
potentially better network performance (csqc allows sending nail start points and times, without constantly updating nails/rockets, so its much more compact).
next map selection menus (eg: nexuiz).
'proper' access to client-side cvars, for user-specific settings (eg customtf class works on all customtf servers, not just the one with frik_file enabled).
client-specific entity sending (enemy spies can have your team's colourmap for you, and thiers ffor thier team).
More complex things:
Custom player prediction code. And, urm, prediction code in the first place. :)
Unlagged shooting animations and other client-side prediction.
Client side cursors.
torch effects (dlights that don't lag behind the view angles).
Current dp/fte extensions:
Better animations (separate upper/lower sequences, etc with md3s/tags, without always breaking network compatibility).
Particle based effects. Glowing eyes, smoke rising from recently fired guns.
specific powerup shells.
Pending extensions:
clientside ragdoll, so the network doesn't die from sending bone positions.
Basically the idea of csqc is to give the modder access to parts of the engine that were previously unavailable to them (primarily the hud/config menus). Secondly, to provide access to features available to more modern games (yes, akin to q3a's cgame).
For the QC modder, it is not required that you actually manage any entities in csqc, but you do have to direct the engine to draw what it knows about.
Using CSQC does not actually mandate SSQC changes. DP requires all clients use csqc if the server has a csprogs, but that's not really intended by the csqc spec. Its perfectly viable to connect multiple different clients, some using csqc, others not. But you can also kick players if they are not using it, of course.
The engine supports both csqc and ssqc entity sending. csqc ents get the csqc versions, and clients without csqc get the ssqc fallbacks. Its entirely possible to provide effects compatible with either sort of client, without wasting bandwidth to provide for the other, and without even checking to see if the server+client supports csqc. :)
For the engine modder, it requires seperation of renderer and client. You must be able to draw multiple scenes (some without the world, ie: overlays) in order to provide the csqc with full control over the view. This will be the biggest issue for mh, and was the hardest part I found to get it stable with winquake too.
But the major major problem is that the qcvm needs separating to support two VMs running at once. I achieved this by reusing fte's qclib. Which is not the cleanest code around, but does get the job done, so the csqc winquake port has two separate qcvms inside. One is the old that supports all the qccx hacks. And one is the new, for running csqc itself (note that the csqc qcvm should ideally block most qccx hacks anyway).
Network changes are also required, in order to provide the csqc with notifications about changes on the server, so the mega-gibbings and stuff can work. Note that the provided code uses a versioning system, so it is entirely possible that the csqc mechanisms will result in a reduction in bandwidth spikes, assuming its used to do so (just do it with nails and you'll not spam people off nq servers).
Even without csqc-specific mod changes, the patch will extend stats to 32bit, so no more 255 ammo/health caps.
Engines must provide a compatible 2d interface. This does admittedly require stretching (which I don't think my sw version provided, but nearest pixel is conformant). Blend mode arguments are a DP extension, and its not required that they are even present... Unless you're using DP as a client. :/
I don't think mh will have any real issues with 2d stuff. just code cleanliness.
CSQC support in an engine is not trivial. It will make a lot of changes, and interact with code present in 90% of modified engines in some incompatible way or another, that a straight tutorial for adding support will be near impossible, and will be looong. Any such tutorial will need to branch into choice of base engines.
My csqc winquake engine thus does not support model interpolation, but should include comments saying which fields to read from in order to pass the information along to the renderer.
.