]> git.xonotic.org Git - xonotic/darkplaces.git/log
xonotic/darkplaces.git
3 months agocvar: add some missing registrations
bones_was_here [Sat, 20 Jan 2024 18:14:05 +0000 (04:14 +1000)]
cvar: add some missing registrations

Closes https://gitlab.com/xonotic/darkplaces/-/issues/405

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodedicated server: ignore mod_bsp_portalize for faster map changes
bones_was_here [Sat, 20 Jan 2024 17:59:01 +0000 (03:59 +1000)]
dedicated server: ignore mod_bsp_portalize for faster map changes

These portals are only used by renderer features.
Closes https://gitlab.com/xonotic/darkplaces/-/issues/243

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoMisc data type and comment fixes
bones_was_here [Tue, 9 Jan 2024 05:57:57 +0000 (15:57 +1000)]
Misc data type and comment fixes

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: optimise printing to stdout
bones_was_here [Tue, 9 Jan 2024 05:46:37 +0000 (15:46 +1000)]
sys: optimise printing to stdout

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocom_msg: optimise string and byte sequence reading
bones_was_here [Wed, 17 Jan 2024 21:08:16 +0000 (07:08 +1000)]
com_msg: optimise string and byte sequence reading

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoPRVM: optimise tempstring creation
bones_was_here [Tue, 19 Dec 2023 13:19:21 +0000 (23:19 +1000)]
PRVM: optimise tempstring creation

No need for strlen in PRVM_SetTempString(), usually we already have that
information.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoPRVM: optimise string arguments
bones_was_here [Sun, 21 Jan 2024 06:30:06 +0000 (16:30 +1000)]
PRVM: optimise string arguments

Adds a warning for when QC tries to create a string that's too long
(previously this caused silent truncation).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoPRVM: rename VM_STRINGTEMP_LENGTH to VM_TEMPSTRING_MAXSIZE
bones_was_here [Thu, 18 Jan 2024 06:34:36 +0000 (16:34 +1000)]
PRVM: rename VM_STRINGTEMP_LENGTH to VM_TEMPSTRING_MAXSIZE

For clarity and consistency

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoPRVM: disallow changing read-only cvars
bones_was_here [Thu, 18 Jan 2024 05:43:15 +0000 (15:43 +1000)]
PRVM: disallow changing read-only cvars

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoPRVM: fix some incorrect warning messages
bones_was_here [Thu, 11 Jan 2024 23:08:05 +0000 (09:08 +1000)]
PRVM: fix some incorrect warning messages

Closes https://gitlab.com/xonotic/darkplaces/-/issues/379

See 2322e173520b68ae6ca217024a47dfb8bbc12473

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoprvm_leaktest: fix trace string truncation
bones_was_here [Wed, 20 Dec 2023 07:40:04 +0000 (17:40 +1000)]
prvm_leaktest: fix trace string truncation

This was caught by the new warnings.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoFix worldmessage string truncation
bones_was_here [Fri, 29 Dec 2023 09:35:25 +0000 (19:35 +1000)]
Fix worldmessage string truncation

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoFix uses of strlcpy on unterminated source strings
bones_was_here [Mon, 18 Dec 2023 09:24:15 +0000 (19:24 +1000)]
Fix uses of strlcpy on unterminated source strings

BSD strlcpy() keeps reading until a \0 or a segfault, even after it
stops writing. In these cases the source was part of a longer string so
it wouldn't have crashed.
These were caught by the new warning.

The +1 on the source sizes copied an extra char that would be changed to
\0 and is now redundant because the real dest and src sizes are always
passed to a purpose-written func.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocom: replace BSD strlcpy and strlcat
bones_was_here [Wed, 13 Dec 2023 07:16:24 +0000 (17:16 +1000)]
com: replace BSD strlcpy and strlcat

Compared to BSD strlcpy and strlcat, dp_strlcpy and dp_strlcat are
faster, never crash, and have a more useful return (DP didn't use the
strlcpy return at all), see included docs.

Adds dp_stpecpy() for efficient chain copying and dp_ustr2stp() for
copying measured byte sequences (unterminated strings) to strings.

Replaces the only use of the strlcat() return with dp_stpecpy().

Updates the forbidden string functions list.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocom: rename BSD strlcpy and strlcat
bones_was_here [Fri, 15 Dec 2023 10:16:15 +0000 (20:16 +1000)]
com: rename BSD strlcpy and strlcat

The C standard reserves str* and mem* for the implementation.
Checking for BSD or OS X is not a robust way to determine if libc
provides these (eg glibc may implement them).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocom: detect truncation or error in dpvsnprintf()
bones_was_here [Mon, 15 Jan 2024 00:41:06 +0000 (10:41 +1000)]
com: detect truncation or error in dpvsnprintf()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: attempt to placate Microsoft's compiler
bones_was_here [Wed, 10 Jan 2024 03:09:58 +0000 (13:09 +1000)]
sys: attempt to placate Microsoft's compiler

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: write significant engine and QC errors to stderr
bones_was_here [Thu, 4 Jan 2024 14:41:43 +0000 (00:41 +1000)]
sys: write significant engine and QC errors to stderr

A server configured with -nostdout or sys_stdout 0 will now be able to
report bugs.

Retrieves stdio stream FDs instead of assuming they're always 0,1,2.
Fixes some comment!=code discrepancies.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: make stdout/stderr configurable during runtime
bones_was_here [Wed, 3 Jan 2024 16:58:15 +0000 (02:58 +1000)]
sys: make stdout/stderr configurable during runtime

Adds cvar sys_stdout which offers the same behaviours as the -nostdout
and -stderr cmdline options and is initialised by them if they're passed.
Makes -noterminal cmdline option a synonym for -nostdout, previously it
was effectively the same but less efficient.

Platforms with the fcntl() syscall (ie non-Windows):
Changes to non-blocking stdout/stderr by default to prevent stutters and
halts in certain scenarios.
Adds cvar sys_stdout_blocks for enabling blocking stdout/stderr if
required.

Retrieves stdio stream FDs instead of assuming they're always 0,1,2.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agofont: fix missing text in r_speeds (etc)
bones_was_here [Thu, 4 Jan 2024 17:39:56 +0000 (03:39 +1000)]
font: fix missing text in r_speeds (etc)

This bug was introduced in 5468c81f47e6644d938e3cfedd21567b2936cd72

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoRemove deprecated r_font_use_alpha_textures cvar
bones_was_here [Thu, 4 Jan 2024 01:59:19 +0000 (11:59 +1000)]
Remove deprecated r_font_use_alpha_textures cvar

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoMerge PR 'Fix several long-lasting font rendering problems'
bones_was_here [Thu, 4 Jan 2024 01:47:58 +0000 (11:47 +1000)]
Merge PR 'Fix several long-lasting font rendering problems'

See https://github.com/DarkPlacesEngine/darkplaces/pull/67

Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/49
Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/65
Closes https://github.com/DarkPlacesEngine/darkplaces/issues/66

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoreload a dp_font only when its cmdline changes, to prevent unnecessary reloads; intro...
NaitLee [Sat, 30 Dec 2023 12:40:34 +0000 (20:40 +0800)]
reload a dp_font only when its cmdline changes, to prevent unnecessary reloads; introduce cvar `r_font_always_reload`

Signed-off-by: NaitLee <naitli@foxmail.com>
3 months agouncomment code that prevents memory leak in LoadFont; better English
NaitLee [Sat, 16 Sep 2023 06:17:35 +0000 (14:17 +0800)]
uncomment code that prevents memory leak in LoadFont; better English

Signed-off-by: NaitLee <naitli@foxmail.com>
3 months agofix wrong outchar given when merging incmaps;
NaitLee [Sat, 8 Jul 2023 06:43:56 +0000 (14:43 +0800)]
fix wrong outchar given when merging incmaps;
remove bad code, deprecate broken features

Signed-off-by: NaitLee <naitli@foxmail.com>
3 months agoUse `%p` for `mapstart` pointer in `dpsnprintf`,
NaitLee [Mon, 30 Jan 2023 17:00:18 +0000 (01:00 +0800)]
Use `%p` for `mapstart` pointer in `dpsnprintf`,
Leave notes to `map_identifier` format change

Signed-off-by: NaitLee <naitli@foxmail.com>
3 months agoFix several long-lasting font rendering problems:
NaitLee [Sun, 29 Jan 2023 08:51:37 +0000 (16:51 +0800)]
Fix several long-lasting font rendering problems:
Fix resources waste of fontmap usage worst-cases;
Fix memory waste of improperly designed `struct ft2_font_map_s`;
Deprecate `r_font_diskcache`

Signed-off-by: NaitLee <naitli@foxmail.com>
3 months agoHandle rsurface.texture == NULL here (not sure if it can happen).
Rudolf Polzer [Wed, 3 Jan 2024 20:06:16 +0000 (12:06 -0800)]
Handle rsurface.texture == NULL here (not sure if it can happen).

3 months agoBring back a very simple r_showsurfaces 3.
Rudolf Polzer [Wed, 3 Jan 2024 20:01:01 +0000 (12:01 -0800)]
Bring back a very simple r_showsurfaces 3.

Sadly I don't quite understand r_showsurfaces 2 enough to bring it back, so
we've got a gap now.

3 months agocmd: read only one line per frame from stdin
bones_was_here [Wed, 3 Jan 2024 03:29:39 +0000 (13:29 +1000)]
cmd: read only one line per frame from stdin

Prioritising the ordering of new commands with respect to existing
commands, over the ordering of pasted commands that include `wait`.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agor_viewfbo 0: fix restoring GL_Scissor values at the end of skybox render.
Rudolf Polzer [Wed, 3 Jan 2024 14:20:45 +0000 (06:20 -0800)]
r_viewfbo 0: fix restoring GL_Scissor values at the end of skybox render.

Fixes wrong handling of viewsize with r_viewfbo 0.

3 months agor_viewfbo 0: factor out motion blur.
Rudolf Polzer [Wed, 3 Jan 2024 13:19:42 +0000 (05:19 -0800)]
r_viewfbo 0: factor out motion blur.

Motion blur doesn't NEED the blending pass.

3 months agor_viewfbo 0: skip the postprocessing/blending pass if there is nothing to blend.
Rudolf Polzer [Tue, 2 Jan 2024 20:48:07 +0000 (12:48 -0800)]
r_viewfbo 0: skip the postprocessing/blending pass if there is nothing to blend.

May save some fps on low-end systems.

NOTE: Had to make sure that 2D rendering does not enable depth test,
as in r_skipblend mode, the main framebuffer Z values are written to as
part of regular 3D rendering. There appear to be no behavioral changes
from this, but we need to be careful here.

r_viewfbo 1 disables this logic (it differs in no other way from r_viewfbo 0)

3 months agoR_BlendView: fix motion blur with viewsize != 100.
Rudolf Polzer [Wed, 3 Jan 2024 14:53:40 +0000 (06:53 -0800)]
R_BlendView: fix motion blur with viewsize != 100.

OpenGL is only upside down if the render target isn't a FBO...

3 months agoR_BlendView: fix motion blur by using the correct FBO for it.
Rudolf Polzer [Tue, 2 Jan 2024 19:19:28 +0000 (11:19 -0800)]
R_BlendView: fix motion blur by using the correct FBO for it.

Motion blur has to be applied to the view FBO, not the (optional) screen FBO.
Especially as the code generating runs before even writing to the screen FBO.

3 months agorcon: support variable expansion in received commands
bones_was_here [Tue, 2 Jan 2024 23:35:09 +0000 (09:35 +1000)]
rcon: support variable expansion in received commands

How to send such a command without the client expanding it is currently
left as an exercise for the reader...

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agohost: log graceful shutdown (config, history)
bones_was_here [Tue, 2 Jan 2024 13:21:15 +0000 (23:21 +1000)]
host: log graceful shutdown (config, history)

Stopping demo recording should already get a message.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: implement signal handling on all platforms
bones_was_here [Mon, 1 Jan 2024 12:55:45 +0000 (22:55 +1000)]
sys: implement signal handling on all platforms

Prints a stack trace when crashing if using glibc.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocmd: fix stdin command ordering and related stuff
bones_was_here [Sun, 31 Dec 2023 20:55:03 +0000 (06:55 +1000)]
cmd: fix stdin command ordering and related stuff

Fixes bug introduced in d217d6b9ba9012bc374ac0d44d48422b7b13b755 where
multiline stdin execution order was reversed.

Retrieves FD of stdin stream rather than assuming it will always be 0.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agosys: commenting and tidying
bones_was_here [Tue, 2 Jan 2024 06:58:35 +0000 (16:58 +1000)]
sys: commenting and tidying

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodeduplicate Sys_Shutdown()
bones_was_here [Tue, 2 Jan 2024 07:12:42 +0000 (17:12 +1000)]
deduplicate Sys_Shutdown()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodeduplicate Sys_Print()
bones_was_here [Tue, 2 Jan 2024 06:41:30 +0000 (16:41 +1000)]
deduplicate Sys_Print()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodeduplicate Sys_Error()
bones_was_here [Tue, 2 Jan 2024 06:21:27 +0000 (16:21 +1000)]
deduplicate Sys_Error()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodeduplicate Sys_ConsoleInput()
bones_was_here [Tue, 2 Jan 2024 09:31:51 +0000 (19:31 +1000)]
deduplicate Sys_ConsoleInput()

Fixes multiline stdin not working in the SDL client, but working in the
dedicated server.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodeduplicate main()
bones_was_here [Mon, 1 Jan 2024 03:58:00 +0000 (13:58 +1000)]
deduplicate main()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agocon: allow alias loops involving wait to be broken, eg with unalias or quit
bones_was_here [Sat, 30 Dec 2023 20:49:08 +0000 (06:49 +1000)]
con: allow alias loops involving wait to be broken, eg with unalias or quit

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agodemos: support curl/dlcache (down)loading at start of playback
bones_was_here [Fri, 29 Dec 2023 22:14:28 +0000 (08:14 +1000)]
demos: support curl/dlcache (down)loading at start of playback

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/386

Not sure why the hacky way broke but we can do it without hacks or
netcode special cases.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoMakefile: misc cleanups and fixes
bones_was_here [Tue, 26 Dec 2023 09:53:50 +0000 (19:53 +1000)]
Makefile: misc cleanups and fixes

Mostly removing cruft, deduplicating, consolidating.

Defaults to system default compiler instead of gcc.
Fixes parallel builds which were broken in
8a9f7e9e336cede20ec7da6bebc0f81a86ab79db by insufficient RTFM.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
3 months agoMakefile: support explicit static linking of all configurable libraries
bones_was_here [Tue, 26 Dec 2023 07:45:26 +0000 (17:45 +1000)]
Makefile: support explicit static linking of all configurable libraries

Fixes a bug in df973c344562c8cadc2413d36dcaa03f8e9040c2 where
libd0_rijndael static linking only worked if
DP_LINK_CRYPTO_RIJNDAEL=static was read from the environment rather than
being passed as an override.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoMakefile: support explicit static linking of libd0
bones_was_here [Sun, 24 Dec 2023 12:04:02 +0000 (22:04 +1000)]
Makefile: support explicit static linking of libd0

Allows a kludge to be removed in Xonotic.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoMakefile: always run any clean targets before starting any build
bones_was_here [Sat, 23 Dec 2023 08:30:27 +0000 (18:30 +1000)]
Makefile: always run any clean targets before starting any build

Should fix occasional failures in Xonotic build system which specifies
multiple targets including clean and enables parallel jobs.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoMerge PR 'Apply default lightstyle to to lightmap when using q3bsp'
bones_was_here [Sat, 23 Dec 2023 08:02:54 +0000 (18:02 +1000)]
Merge PR 'Apply default lightstyle to to lightmap when using q3bsp'

See https://github.com/DarkPlacesEngine/darkplaces/pull/111

Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/100

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoREADME.md: add SDL version requirements
bones_was_here [Sat, 23 Dec 2023 07:01:06 +0000 (17:01 +1000)]
README.md: add SDL version requirements

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocbuf: improve some warns, minor cleanup
bones_was_here [Fri, 15 Dec 2023 22:36:22 +0000 (08:36 +1000)]
cbuf: improve some warns, minor cleanup

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocvar: use unsigned for flags and hashindex
bones_was_here [Thu, 21 Dec 2023 11:06:36 +0000 (21:06 +1000)]
cvar: use unsigned for flags and hashindex

Signed is too error-prone with bitwise operations.  The common pattern
of passing ~0 (all bits set) resulted in neededflags=-1 in a backtrace
on x86_64.

See also b8692b8cd73685794b59b0522e8caa4b9d9a2dac

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocvar: remove from the hash table when deleting (`unset` command)
bones_was_here [Thu, 21 Dec 2023 10:08:38 +0000 (20:08 +1000)]
cvar: remove from the hash table when deleting (`unset` command)

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/400

Refactors Cvar_FindVarLink() to return a hash link pointer pointer
instead of a cvar pointer to avoid passing extra pointer pointers.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoAdd Baker's fix for spplying default lightstyle to q3bsp
James O'Neill [Tue, 19 Dec 2023 15:48:59 +0000 (00:48 +0900)]
Add Baker's fix for spplying default lightstyle to q3bsp

4 months agocmd: Move cprint command to cl_screen
Cloudwalk [Thu, 14 Dec 2023 04:26:53 +0000 (23:26 -0500)]
cmd: Move cprint command to cl_screen

Client code doesn't belong in a common subsystem

Signed-off-by: Cloudwalk <cloudwalk@icculus.org>
4 months agonet_slist: reduce worst-case time until any given server first appears
bones_was_here [Tue, 12 Dec 2023 10:13:26 +0000 (20:13 +1000)]
net_slist: reduce worst-case time until any given server first appears

Fixes sending multiple queries to servers that happen to be early in the
list before sending any to servers late in the list, when
net_slist_maxtries > 1, which was a side-effect of making
net_slist_maxtries work as described in
fe2b222e32752c408fbe5ccf4ac3fb546f8ff41a.

Slightly reduces the total real time and CPU time to query all servers.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocvar: use better method of checking flags during registration
bones_was_here [Tue, 12 Dec 2023 06:17:54 +0000 (16:17 +1000)]
cvar: use better method of checking flags during registration

Should have done it this way in 3a58ad52e63635c93e95955f984fd6052156e56b

Also prevents callbacks for client-only cvars being registered on the
dedicated server.

Adds some debug prints.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocmd: always register server-only commands, don't register client-only commands on...
bones_was_here [Tue, 12 Dec 2023 04:33:48 +0000 (14:33 +1000)]
cmd: always register server-only commands, don't register client-only commands on dedicated server

Fixes the lack of the `heartbeat` command on dedicated and listen, and
the presence of commands like `toggleconsole` on dedicated.

Similar to 3a58ad52e63635c93e95955f984fd6052156e56b this might reveal a
few commands that aren't flagged correctly.

Changes the bitmask vars to the correct type.
Renames cmd_flags to cmd_flagsmask for consistency.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocmd: reinstate execution of aliases with the same name as a command
bones_was_here [Mon, 11 Dec 2023 12:02:55 +0000 (22:02 +1000)]
cmd: reinstate execution of aliases with the same name as a command

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/397

Based on the div0-stable version of Cmd_ExecuteString().

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocmd: misc cleanup
bones_was_here [Mon, 11 Dec 2023 15:31:04 +0000 (01:31 +1000)]
cmd: misc cleanup

Removes an unnecessary pointer stored in all the cbuf objects.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocmd: inline Cmd_Arg* helper funcs in all compilation units
bones_was_here [Mon, 11 Dec 2023 15:18:57 +0000 (01:18 +1000)]
cmd: inline Cmd_Arg* helper funcs in all compilation units

ea7ad935aa214b3a52eb7079110e992fbfe750ee should have done this.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocmd: add CON_WARN colour to various non-fatal cvar and command errors
bones_was_here [Sun, 10 Dec 2023 10:32:16 +0000 (20:32 +1000)]
cmd: add CON_WARN colour to various non-fatal cvar and command errors

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocbuf: recycle node after it executes, clear commands on Host_Error()
bones_was_here [Sat, 9 Dec 2023 07:49:56 +0000 (17:49 +1000)]
cbuf: recycle node after it executes, clear commands on Host_Error()

This reverts 626658074c8dd5c2288becd836103e2efdb9b741 which looks like a
potentially racy or non-threadsafe approach, and instead prevents
problems by clearing the command buffers if Host_Error() is called and
doesn't shut down DP.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agobuild: enable strict aliasing optimisations
bones_was_here [Fri, 8 Dec 2023 07:08:44 +0000 (17:08 +1000)]
build: enable strict aliasing optimisations

Extensive code quality improvements have been made since this was last
tried, and compilers are smarter with better warnings now.

This doesn't change the Xonotic pipeline gameplay hash so it's highly
unlikely to cause any subtle regressions.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoChange to the C99 standard method of testing for nan
bones_was_here [Fri, 8 Dec 2023 07:41:22 +0000 (17:41 +1000)]
Change to the C99 standard method of testing for nan

This fixes all remaining strict-aliasing rule warnings in GCC.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoclient: improve server connection status messages
bones_was_here [Fri, 1 Dec 2023 06:18:45 +0000 (16:18 +1000)]
client: improve server connection status messages

Always logs various errors and rejections that previously were only
visible with developer cvar(s) set.  Among other things this fixes
silent failure when trying to join a full server.
Includes IP address in more messages.

Uses CON_ERROR and CON_WARN colours for various errors and warns.

Moves status message generation to the code that sets the relevant
states.  This allows more information to be included, makes the code
easier to follow and reduces polling.

Fixes some cases where a message was always clobbered before it could be
displayed.

Merges the built-in menu and loading screen connection status generation
and buffering.

Simplifies challenge request retry counting.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoREADME.md: mention `make clean`, more specific build deps
bones_was_here [Fri, 24 Nov 2023 05:02:32 +0000 (15:02 +1000)]
README.md: mention `make clean`, more specific build deps

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoRename sv_gameplayfix_customstats to sv_qcstats, improve description
bones_was_here [Thu, 23 Nov 2023 19:45:12 +0000 (05:45 +1000)]
Rename sv_gameplayfix_customstats to sv_qcstats, improve description

It's an API change not a gameplay change.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agoSys_Sleep overhaul
bones_was_here [Sun, 26 Nov 2023 01:17:53 +0000 (11:17 +1000)]
Sys_Sleep overhaul

One function to rule them all, and in the darkplaces sleep threads.

Makes sub-millisecond accuracy available on Windows.
Increases the number of sockets we can monitor on Windows.
Improves Curl_Select() a little.
Updates flags of some timing-related cvars.

Cleans up disorganised and duplicate code.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocl_nettimesyncboundmode: use default if invalid
bones_was_here [Fri, 24 Nov 2023 05:18:57 +0000 (15:18 +1000)]
cl_nettimesyncboundmode: use default if invalid

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocl_nolerp: use normal time synchronisation
bones_was_here [Tue, 21 Nov 2023 20:47:11 +0000 (06:47 +1000)]
cl_nolerp: use normal time synchronisation

Fixes constant packet discards on LAN and impossible pings online,
when FPS > ticrate.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocl_netfps: reduce pings by synchronising when possible, related fixes
bones_was_here [Fri, 17 Nov 2023 01:30:14 +0000 (11:30 +1000)]
cl_netfps: reduce pings by synchronising when possible, related fixes

Fixes possibility of input frequency to exceed cl_netfps in certain
configurations.

Fixes possibility of rate limiting to reduce input frequency more than
it should.

Fixes timescale affecting input frequency (now consistent with client
FPS and server HZ being unaffected by timescale).

History of this code (most recent first):
1b6ea396b616e359cfe98d1e85e8e7a9ac571e91
528b92ffab3a9ab09770310e2796adbe5f0f1e20
79e332ad14e7ec9dbd2702a2d28127f7600f0678
663279ba8feeb4c114df0950bbc820f3bb32dcdc
21beb5fe4fa2e1f1b7591a4a1f6013b82186912f

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agocl_maxfps*: various adjustments
bones_was_here [Sat, 11 Nov 2023 10:47:50 +0000 (20:47 +1000)]
cl_maxfps*: various adjustments

Ensures minimum FPS of 10 even while idle to prevent weird issues
(networking assumes at least 10).
If you want to save more resources, hide the game window (disables
rendering entirely) such as by using vid_minimize_on_focus_loss 1.

Disables cl_maxfps_alwayssleep by default, on modern systems with
accurate timers and higher FPS this has a significant impact.

Allows cl_maxfps_alwayssleep to be used with cl_maxfps 0, this was
requested some time ago.

Switches from cl_maxidlefps to cl_maxfps when querying servers to give
pings representative of what can be expected when playing on them.

Cleans up the cl_maxfps* code.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agonet_slist: add PGUP PGDN HOME END key support to builtin menu
bones_was_here [Fri, 1 Dec 2023 01:16:46 +0000 (11:16 +1000)]
net_slist: add PGUP PGDN HOME END key support to builtin menu

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agonet_slist: overhaul dpmaster and server pinging
bones_was_here [Tue, 31 Oct 2023 01:24:47 +0000 (11:24 +1000)]
net_slist: overhaul dpmaster and server pinging

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/173
Fixes https://gitlab.com/xonotic/darkplaces/-/issues/211

Adds cvars net_slist_maxping, net_slist_interval, net_slist_debug.

Simplifies state tracking, ping is now either valid or not set (0) and
isn't abused to store state.

Includes a hash-verified timestamp in pings, fixes impossible pings
(happened when querytime was updated before response arrived) and the
ability to add servers to a client's list with unsolicited packets
(abusing the LAN support).

Checks that DP/QW master server list packets originate from a configured
master (cvar net_sourceaddresscheck).

Fixes unreliable LAN support.

Significantly reduces the total time to complete a full query cycle for
DP servers by improving the logic as well as turning up some cvars.

Prints warnings if DP or QW master server queries time out.

Makes net_slist_maxtries actually give better ping reports like its
description says.

Makes net_slist_pause completely pause (QC builtin resorthostcache()
used by Xonotic and Nexuiz bypassed it), clarifies description, uses a
callback instead of polling to handle changes.

Changes sv_masters[] and sv_qwmasters[] iteration to a more idiomatic
pattern pattern (numeric limit instead of a "null cvar" terminator).

Checks that sockets are open before writing to them in
NetConn_QueryQueueFrame() to avoid crashing in case we ever close a
lower numbered socket while a higher numbered one is still open.

Separates QW master list parsing into a func (like DP list parsing).

Fixes sending a DP master query string to the QW masters if the first
socket is an IPv6 one.

Fixes double-sending of QW favourite queries.

Minor cleanups/refactoring.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agonet_slist: update types, declarations
bones_was_here [Fri, 3 Nov 2023 09:15:06 +0000 (19:15 +1000)]
net_slist: update types, declarations

Mostly this changes array indices and externally-sourced data that
should never trigger signed overflow to unsigned,
and changes to lhnetaddresstype_t where applicable.

Fixes an old bug in the DP Quake server list where if there are less
servers than the most that could fit onscreen, the list jumps around
and/or duplicates entries when moving the cursor down.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agonet_slist: code style/formatting fixes
bones_was_here [Fri, 3 Nov 2023 07:55:44 +0000 (17:55 +1000)]
net_slist: code style/formatting fixes

I wouldn't normally nitpick this stuff but the random tabs mixed into
code and comment lines were too annoying and fixing it later commits
would make their diff too noisy.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
4 months agobuild: fix buildstring
bones_was_here [Mon, 6 Nov 2023 11:17:10 +0000 (21:17 +1000)]
build: fix buildstring

The revision was always "-", there was code duplication and
inconsistency, the meaning of some strings was unclear.

Frees up some space in the `status` "version:" line by moving
gamenetworkfiltername to "protocol:" which seems like a more relevant
section anyway.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agobuild: disallow use of VLAs
bones_was_here [Mon, 30 Oct 2023 00:18:48 +0000 (10:18 +1000)]
build: disallow use of VLAs

They're no longer allowed in Linux for safety and performance reasons.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoPRVM: indicate which VM triggered some common string messages
bones_was_here [Fri, 27 Oct 2023 11:06:30 +0000 (21:06 +1000)]
PRVM: indicate which VM triggered some common string messages

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoFix bug where +binds could get latched at low FPS
bones_was_here [Sun, 12 Nov 2023 12:33:10 +0000 (22:33 +1000)]
Fix bug where +binds could get latched at low FPS

This was introduced in 6b21c467a83808e3becf61afe7b67a88f870b502 which
didn't ensure the -bind would be executed after the +bind when the
keydown and keyup events are processed in the same frame.

Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/106

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid: move sound start/restart out of video start/restart
bones_was_here [Sat, 7 Oct 2023 03:40:26 +0000 (13:40 +1000)]
vid: move sound start/restart out of video start/restart

According to the comments in S_Restart_f() we must not restart sound
while running a map, but `vid_restart` did do that...

Also simplified/consolidated code paths a little.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid: add cvar vid_minimize_on_focus_loss
bones_was_here [Mon, 30 Oct 2023 01:15:36 +0000 (11:15 +1000)]
vid: add cvar vid_minimize_on_focus_loss

Default of 0 matches current SDL default behaviour.

If set, the environment variable SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS will
override the cvar.

Changes apply immediately.

Also makes changes to vid_mouse_clickthrough apply immediately.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agomacOS: update Info.plist
bones_was_here [Mon, 30 Oct 2023 13:19:45 +0000 (23:19 +1000)]
macOS: update Info.plist

Declares DP as a game to enable "Game Mode", see
https://gitlab.com/xonotic/xonotic/-/commit/7c57b3b0d8810e69094a338dd8e94ac8ca8a6f83

Includes the other changes from Xonotic.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoWindows: opt out of DPI scaling
bones_was_here [Mon, 6 Nov 2023 17:52:15 +0000 (03:52 +1000)]
Windows: opt out of DPI scaling

SDL >= 2.24.0 is required.

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/32
Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/74

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoinput: activate DP_BUTTONCHAT if the window is hidden or loses focus
bones_was_here [Fri, 6 Oct 2023 11:50:56 +0000 (21:50 +1000)]
input: activate DP_BUTTONCHAT if the window is hidden or loses focus

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoinput: stop capturing mouse movement if window is hidden without first losing focus
bones_was_here [Thu, 5 Oct 2023 18:44:37 +0000 (04:44 +1000)]
input: stop capturing mouse movement if window is hidden without first losing focus

Fixes players looking all around after they alt+tabbed.

Moves the logic for selecting the mouse mode out of screen drawing and
into SDL event handling where it's unaffected if we early-out of drawing
the frame.

Prevents mouse "grab" (raw/relative mode + cursor hiding) in a few
"loading" situations.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoGL: display a more useful error dialog if context creation fails
bones_was_here [Mon, 30 Oct 2023 11:25:11 +0000 (21:25 +1000)]
GL: display a more useful error dialog if context creation fails

There's no need to repeatedly retry if context creation fails, the
GPU and driver capabilities won't have changed.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoSDL: print version earlier, once only
bones_was_here [Mon, 30 Oct 2023 00:00:34 +0000 (10:00 +1000)]
SDL: print version earlier, once only

No need to print it again at every vid_restart, it can't change.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid: implement monitor selection with instant cvar changes
bones_was_here [Wed, 4 Oct 2023 16:43:12 +0000 (02:43 +1000)]
vid: implement monitor selection with instant cvar changes

Adds cvars: vid_display, vid_info_displaycount

Prints the monitors detected at startup and on hotplug.

Requires SDL headers >= 2.0.18 at build time.
At runtime older versions should still work but may lack some functionality.

May not work properly or at all if vid_desktopfullscreen is 0.

May require vid_restart after hotplug events.

---

Changes existing cvars vid_fullscreen, vid_desktopfullscreen, vid_resizable,
vid_borderless to apply instantly.

Also (for windowed mode) works around window managers that move the
window after SDL creates and centres it (typically when adding a
titlebar), so the crosshair is always at the centre of the monitor.

Adds some missing SDL_WINDOWEVENT enumerations.

Changes the GL viewport size retrieval from screen coordinates to
pixels, which is a prerequisite for "HIGHDPI" aka "Apple Retina"
support.

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/385

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid_vsync: fully support adaptive, remove polling, print better errors
bones_was_here [Tue, 3 Oct 2023 17:24:44 +0000 (03:24 +1000)]
vid_vsync: fully support adaptive, remove polling, print better errors

Adaptive vsync was partially supported: it worked if set before window
creation but not if toggled on afterwards, and wasn't mentioned in the
cvar description.

The immediate application of `vid_vsync` cvar changes was implented by
polling, which was ok for one cvar but I'll be making more vid_ cvars
apply immediately (no vid_restart needed), and don't want to poll for
things that rarely change every frame.

SDL is now queried for the current state of vsync instead of storing
what we believe to be the current state.

If the setting can't be applied the reason (as reported by SDL) is now
printed.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid: remove obsolete cvars
bones_was_here [Mon, 6 Nov 2023 15:14:10 +0000 (01:14 +1000)]
vid: remove obsolete cvars

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agovid: misc cleanups
bones_was_here [Sat, 14 Oct 2023 16:43:38 +0000 (02:43 +1000)]
vid: misc cleanups

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoSave cvars cl_rollangle and cl_rollspeed to config.cfg
bones_was_here [Fri, 3 Nov 2023 09:36:15 +0000 (19:36 +1000)]
Save cvars cl_rollangle and cl_rollspeed to config.cfg

Closes https://gitlab.com/xonotic/darkplaces/-/issues/393

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
5 months agoMerge MR 'off-switch cvar for dlcache unload on server/map change'
bones_was_here [Fri, 3 Nov 2023 09:35:21 +0000 (09:35 +0000)]
Merge MR 'off-switch cvar for dlcache unload on server/map change'

See https://gitlab.com/xonotic/darkplaces/-/merge_requests/141

5 months agooff-switch cvar for dlcache unload on server/map change
Dr. Jaska [Fri, 3 Nov 2023 09:35:21 +0000 (09:35 +0000)]
off-switch cvar for dlcache unload on server/map change

5 months agoFix GCC 13 warns: ‘new_velocity[0]’ may be used uninitialized
bones_was_here [Fri, 27 Oct 2023 15:47:55 +0000 (01:47 +1000)]
Fix GCC 13 warns: ‘new_velocity[0]’ may be used uninitialized

Pretty sure this was a false positive, for it to happen `numplanes`
would have to be <= 0 in the loop which sets `new_velocity` which should
be impossible.  Declaring `numplanes` as unsigned placates the compiler,
and these ints should be unsigned anyway because they index an array.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>