- add MAX_NET_EDICTS and MAX_NET_EDICTS_MASK defines, which are 512
and 511 respectively
- change baselines to access the array directly, rather than through
the entity's "data" field
- cleanup SV_ReliableSVC_Emit
- add entity remapping. the entity number used internally in the
server no longer matches the number sent to the client, and it
releases the mapping after 10 seconds of inuse, so there's no
"512 entity limit" anymore. Still the MAX_EDICTS limit though,
which is currently 768, but it can probably be defined to something
much higher without any trouble.
- move clc_t into net_clc.h from net_protocol.h
- split packet processing stuff from net.h into net_packet.h
- add a is_server arg to Log_{Incoming,Outgoing}_Packet, so libs/net is
oblivious to if we're running a server or not (except with the arg,
obviously)
- remove the long obsolete (even in original quake) svc_spawnbinary
stuff
- make nq use QF/net_svc.h
- make nq link to libQFnet too
- make qw's cl_parse.c use net_svc_qw_any_t instead of net_svc_any_t
errors can be handled
- add a MSG_ReadBlock and MSG_WriteBlock, which write arbitrary
- add a MSG_PeekByte, although I never actually used it..
- canonicalize the svc's, so that if qw and nq have a svc with the
same name but different contents, they get different names
- add all the nq stuff to svc_t, so it has both nq and qw. fun enum
that :)
- fix all the sizebuf_t usages so they init all the fields properly
- move qw's net_svc.c, net_clc.c, net_packetlog.c, and msg_ucmd.c
(renamed to net_ucmd.c) into libs/net
- move headers for the above in include/QF
- convert remaining clc bits to NET_CLC (I think I got them all)
- I split net_svc into net_svc_common and net_svc_qw too, in
preperation for adding nq
- moved movevars_t into "QF/net_svc_qw.h", from pmove.h
- made the CL_Parse* functions in qw get the net_svc_*_t as a param,
instead of parsing themselves
- use a jumptable for CL_Parse*
- probably other machinates I've forgotten
- and of course, probably added numerous bugs :)
like normal, f_skins reports the average percent fullbright for all loaded
skins, and f_skins skinname reports the fullbright percent for a signle
skin. cl_freply controls the time in seconds before another query can be
made. Set it to 0 to disable them. More queries will be added later.
The table for accessing special characters from the console has been
tweaked a bit. Expect it to get tweaked more in the future.
This required changes to the api (info_t instead of char *) but should be
a net gain in speed (not a lot, admittedly: it was pretty fast to begin
with, but this paves the way for some other changes I have in mind).
- new opcodes for pointers
progs.h:
- prototype PR_Check_Opcodes
pr_edict.c:
- move the static bounds checking to PR_Check_Opcodes in pr_opcode.c
pr_exec.c:
- vector instruction cleanup
- temporarily nuke bounds checking from storep.*
- move base of address results from pr->edicts to pr->pr_globals
- implement new pointer related instructions
- nuke proposed global pointer instructions (not flexible enough)
pr_opcode.c:
- add new pointer instuctions
- re-implement static bounds/invalid opcode checking. no more multiple
case statements to keep track of.
give mst_t a buffer to hold unterminated message strings
kill MSG_ReadStaticString and MSG_ReadStringLine
msg.c:
kill MSG_ReadStaticString and MSG_ReadStringLine
MSG_ReadString: implement the buffer for unterminated message strings
and update readcount on badread
cl_main.c:
go back to MSG_ReadString and fix up the resulting const char * issues
cl_parse.c:
rewrite the cl_mofake code all because of an uninitialized variable :)
sv_main.c:
use MSG_ReadString instead of MSG_ReadStringLine because
Cmd_TokenizeString really doesn't care about a terminating \n
directly into the packet data.
- change a bunch of char *'s to const char *'s for the above. Only
thing that had trouble was the cl_nofake handler, which I changed to
use a local buffer.
- add MSG_ReadStaticString which acts like the old MSG_ReadString,
specifically that it uses a static buffer and tollerates
unterminated strings.
- add a Q_strnlen function, and make strnlen use it if strnlen is
undefined.
- Add a net_svc.h and net_svc.c which will preparse svc messages into
structs, for easier handling. Currently only soundlist and
modellist are done.
segfault if your first call was with "". Probably could cause
crashes too
- add a string.c file to libQFutil, with a Q_strcasestr function,
which strcasestr is defined to if it's not already defined. (we'd
get that with glibc if we defined __USE_GNU, but we don't)
- make client_t and SV_ExtractFromUserinfo both use NAME_MAX for
their name arrays, instead of 32 for one and 80 for the other
- rewrite almost all of SV_ExtractFromUserinfo's name handling.
- \r, \n, and \t are all converted to spaces
- leading/trailing spaces are stripped
- consecutive spaces are reduced to a single space
- empty names are considered bad
- user-* nicks are considered bad (unless forced to them)
- a name containing console or admin is considered bad
- a name that already exists is considered bad
- if they have a bad name it gets forced to user-%d, where %d is
their userid
- netname in the progs is now updated properly
- name changes are always reported unless it's the initial setting,
rather than only if they're full connected and not a spectator
- finally, if the name change fails (info string exceeded), give
them the boot. (before this was only done for duplicate names)
That's about it :)