]> git.rm.cloudns.org Git - xonotic/darkplaces.git/log
xonotic/darkplaces.git
8 months agoMVM: fix endless loop when a command causes an error
bones_was_here [Sun, 25 Feb 2024 22:34:08 +0000 (08:34 +1000)]
MVM: fix endless loop when a command causes an error

7e1f7d12f57c064a6855d9850d28387ca6092c45 should have included this.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoFix changing of player name during a game
bones_was_here [Fri, 9 Feb 2024 08:12:34 +0000 (18:12 +1000)]
Fix changing of player name during a game

Name changes applied when connecting or when the map changed, but not
during the game.
I broke it in 74b49d6e5412af206448119963e0a4b3617e8ca4 by not
noticing the user-visible name of the cvar is used to determine which
command (if any) is sent.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoFix two memory allocation issues
bones_was_here [Fri, 9 Feb 2024 09:14:59 +0000 (19:14 +1000)]
Fix two memory allocation issues

In fa06dd40f48b20d738b6bd604758c81defd76cfd I misunderstood the
subdivision code, causing sentinel2 to be written past the end of the
buffer... somehow many maps and games worked fine despite this. This
commit reverts the bad line from that commit.

A very old (div0-stable) bug when loading Q1BSP meant we didn't allocate
enough texture memory when a "sky" texture name wasn't all lowercase,
causing a crash when loading custom map e2m9.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoCLVM: set mapname global correctly (matching SVVM)
bones_was_here [Fri, 9 Feb 2024 07:09:14 +0000 (17:09 +1000)]
CLVM: set mapname global correctly (matching SVVM)

This is an old bug but the code Nexuiz and Xonotic used to work around
it still gives correct results when the prefix and suffix are already
stripped.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agochangelevel: start a map even if none is running
bones_was_here [Fri, 9 Feb 2024 06:53:14 +0000 (16:53 +1000)]
changelevel: start a map even if none is running

Implements https://gitlab.com/xonotic/darkplaces/-/issues/408

Although the original implementation of this convenience
688396cea66f09e7ce20d3e3b077261dd1d3db7e labeled it as a hack, it was
robust, simple and worked fine in div0-stable, so removing it in
cb11bdeed238603b11d8dac4908cfdbabe298079 was a regression.

Also removes some redundant string copying.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoserver: always use correct case for map names
bones_was_here [Thu, 8 Feb 2024 20:21:05 +0000 (06:21 +1000)]
server: always use correct case for map names

Previously whatever was typed in as the map/changelevel argument was
used even if it didn't match the case of the filename in the pak, which
meant QC could see multiple instances of the same map that differed only
by case, causing problems for gameplay stats.

Now DP will always use the same case as the real .bsp filename for the
`mapname` globals, and the sv_world* and cl_world* cvars, and the server
status and getinfo/getstatus responses.  This matches the behaviour of
QC code which retrieved the name from the VFS, such as the `gotomap` and
voting code in Nexuiz and Xonotic.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agorcon: rewrite variable expansion support, related fixes
bones_was_here [Wed, 7 Feb 2024 16:21:51 +0000 (02:21 +1000)]
rcon: rewrite variable expansion support, related fixes

Fixes https://gitlab.com/xonotic/darkplaces/-/issues/407
In 48d83538ef13596d4569d46ae66467b63b945546 I broke the return of the
rcon command output to the client.

Fixes unterminated string warnings on the server when the
rcon_password feature of multiple space-delimited passwords is used.
Fixes possibility of the cbuf to use more memory than its intended
maximum.

In the client you can send the variable such that the server will
expand it (not the client) like this: rcon echo $$sv_worldmessage

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agosnd: fix a hard-to-repro segfault when joining a server
bones_was_here [Wed, 7 Feb 2024 15:11:27 +0000 (01:11 +1000)]
snd: fix a hard-to-repro segfault when joining a server

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

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoSVVM: Fix segfault during shutdown, improve previous commit
bones_was_here [Wed, 7 Feb 2024 14:19:05 +0000 (00:19 +1000)]
SVVM: Fix segfault during shutdown, improve previous commit

In 30c47b1aff3ac28359c469a40c44ee700c80e814 a bug in SVVM_reset_cmd was
revealed because that code never ran before that commit:
sometimes the server segfaulted at end of match because SVVM_reset_cmd
called QC code even though SVVM_reset_cmd would only be called by
PRVM_Prog_Reset after it had freed the tempstring memory... so if QC
created a tempstring, crash.

This commit refactors the SV VM shutdown to be consistent with the CL
and MENU shutdown by moving the QC SV_Shutdown() call into a separate
func that (optionally) resets the VM afterwards.  As per
30c47b1aff3ac28359c469a40c44ee700c80e814 we MUST reset when stopping a
server to avoid crashes later, but we can still skip it when changing
map (like in previous versions).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoRemove a bit of cruft left in Cvar_RestoreInitState()
bones_was_here [Tue, 6 Feb 2024 16:16:07 +0000 (02:16 +1000)]
Remove a bit of cruft left in Cvar_RestoreInitState()

A leftover from debugging 32c99c7b0a58545b273fa713d81d6bbfb3b8ebe6

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoXonotic: don't hide config problems during startup
bones_was_here [Tue, 6 Feb 2024 14:37:31 +0000 (00:37 +1000)]
Xonotic: don't hide config problems during startup

Hiding problems is only desirable for games that will never be patched.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoElvis has left the building
bones_was_here [Tue, 6 Feb 2024 13:25:08 +0000 (23:25 +1000)]
Elvis has left the building

Apparently MICROS~1 still doesn't support this (clang and gcc do).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoPRVM: clarify tempstring messages
bones_was_here [Tue, 6 Feb 2024 11:55:10 +0000 (21:55 +1000)]
PRVM: clarify tempstring messages

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoSVVM: fully shut down when stopping a server to avoid segfaulting later
bones_was_here [Tue, 6 Feb 2024 11:22:06 +0000 (21:22 +1000)]
SVVM: fully shut down when stopping a server to avoid segfaulting later

Fixes segfaults when functions that check if the progs is loaded (to
avoid crashing) are called after stopping a server.
Example repro: load a map, disconnect, `set sv_cheats 0`.

Fixes wrong SV_Shutdown order: SV_DropClient must be done before
shutting down SVQC because it calls SVQC functions.

Deduplicates SVQC shutdown.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agofs: fix Quake expansions getting unloaded when adding a gamedir
bones_was_here [Tue, 6 Feb 2024 09:31:45 +0000 (19:31 +1000)]
fs: fix Quake expansions getting unloaded when adding a gamedir

It would switch back to Quake (from eg Rogue) even when the gamedir
being added didn't match any from a supported Quake expansion/mod.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agofs: save files in the correct place when gamedir(s) are in use
bones_was_here [Mon, 5 Feb 2024 22:59:24 +0000 (08:59 +1000)]
fs: save files in the correct place when gamedir(s) are in use

As per the description of the `gamedir` command, it's expected that a
gamedir can be added without needing to re-add the primary
(gamedirname1) or secondary/mod (gamedirname2) as the last gamedir just
to ensure that files still get saved there as usual.

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

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agosv_cheats: fix two segfaults when setting it to 0
bones_was_here [Mon, 5 Feb 2024 20:38:45 +0000 (06:38 +1000)]
sv_cheats: fix two segfaults when setting it to 0

Assuming the SVQC program is always running crashes when it's not.

Testing if the edict pointer is NULL isn't a valid way to stop at the
end of the client slots, which caused this to crash when Xonotic SVQC
was running.

See 1814b2df58302baa47df6718b09465265dfc7e5c

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agocvar: fix many bugs in gamedir, loadconfig, unset, cvar_resettodefaults* commands
bones_was_here [Sun, 4 Feb 2024 16:18:03 +0000 (02:18 +1000)]
cvar: fix many bugs in gamedir, loadconfig, unset, cvar_resettodefaults* commands

Fixes a segfault when Cvar_RestoreInitState() deleted cvars (null ptr deref).

Fixes an infinite loop in Host_LoadConfig_f() due to calling Cbuf_Execute()
from inside Cbuf_Execute() via Host_AddConfigText().

Fixes `unset` being able to delete autocvars while they're in use by QC.
Fixes Cvar_RestoreInitState() not updating autocvars when necessary.

Fixes Cvar_RestoreInitState() not calling cvar callbacks.

Fixes Cvar_RestoreInitState() sometimes restoring such that .string
doesn't match .value, or such that .defstring is wrong.  This was caused
by Cvar_SaveInitState() saving only string pointers and not strings.

Fixes CF_READONLY cvars like gl_info_* getting restored/reset. It
doesn't make sense for any of these to be changed by code outside their
own subsystems.

Fixes Xonotic menu QC errors caused by Host_LoadConfig_f deleting cvars
before calling QC's m_shutdown().

Deduplicates and simplifies cvar deletion code, see also
05a5ed884366d3a1c8e211168efc19b61867cfca

Saves a little memory by storing only minimal init state data for
Cvar_RestoreInitState(), and by relaxing alignment requirements in
_Mem_strdup().

Improves some warns and docs and tidies up a little.

Removes `vid_restart` from `gamedir`, it usually isn't needed because
current DP applies many vid_ cvar changes without it, and because of
the ubiquity of flat panel displays.

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

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agorender: merge R_View_UpdateWithScissor() and R_View_Update()
bones_was_here [Thu, 1 Feb 2024 10:05:07 +0000 (20:05 +1000)]
render: merge R_View_UpdateWithScissor() and R_View_Update()

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoFix some mingw warnings
bones_was_here [Tue, 30 Jan 2024 12:07:39 +0000 (22:07 +1000)]
Fix some mingw warnings

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoWork around Microsoft's broken vsnprintf implementation
bones_was_here [Tue, 30 Jan 2024 11:38:52 +0000 (21:38 +1000)]
Work around Microsoft's broken vsnprintf implementation

Microsoft's documentation says it has supported %zu (C99 standard format
for size_t) for some years but trying to use it causes crashes at least
on older versions of Windows.

Makes dpsnprintf and dpvsnprintf documentation more accessible (these
funcs have different return behaviour than the C standard ones).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agomeshentities: don't pass a NULL ptr to memset
bones_was_here [Fri, 26 Jan 2024 08:29:54 +0000 (18:29 +1000)]
meshentities: don't pass a NULL ptr to memset

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoZYM: fix misaligned memory access
bones_was_here [Mon, 29 Jan 2024 13:54:05 +0000 (23:54 +1000)]
ZYM: fix misaligned memory access

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoPSK/PSA: fix misaligned memory access
bones_was_here [Mon, 29 Jan 2024 13:23:43 +0000 (23:23 +1000)]
PSK/PSA: fix misaligned memory access

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoQ2BSP: fix misaligned memory access
bones_was_here [Fri, 26 Jan 2024 10:10:14 +0000 (20:10 +1000)]
Q2BSP: fix misaligned memory access

Fixes a small overallocation (sizeof(int *) instead of int).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoQ1BSP: fix misaligned memory access
bones_was_here [Fri, 26 Jan 2024 09:36:24 +0000 (19:36 +1000)]
Q1BSP: fix misaligned memory access

Fixes a small overallocation (sizeof(int *) instead of int).

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agosprite: fix misaligned memory access while loading
bones_was_here [Mon, 29 Jan 2024 08:27:48 +0000 (18:27 +1000)]
sprite: fix misaligned memory access while loading

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoDPM: fix misaligned memory access
bones_was_here [Fri, 26 Jan 2024 07:20:53 +0000 (17:20 +1000)]
DPM: fix misaligned memory access

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoMD3: fix misaligned memory access
bones_was_here [Fri, 26 Jan 2024 06:58:50 +0000 (16:58 +1000)]
MD3: fix misaligned memory access

The memory subdivision was ordered such that this format likely had no
issues on a 32-bit machine but on 64-bit the alignment requirement of
texture_t increases to 8 bytes, invoking undefined behaviour.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoIQM: fix misaligned memory access while loading
bones_was_here [Fri, 26 Jan 2024 04:38:36 +0000 (14:38 +1000)]
IQM: fix misaligned memory access while loading

Parsing uses the memcpy approach (already used for the header), slower
than direct reads via hard-coded offsets but more readable and robust.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoIQM: fix misaligned memory access
bones_was_here [Mon, 29 Jan 2024 06:40:48 +0000 (16:40 +1000)]
IQM: fix misaligned memory access

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoUpdate and micro-optimise memory allocation
bones_was_here [Thu, 25 Jan 2024 06:25:48 +0000 (16:25 +1000)]
Update and micro-optimise memory allocation

The max alignment requirement no longer needs to be hard-coded.
We were allocating slightly more than necessary for alignment padding.
Makes a (currently unused) macro more useful and robust.
Fixes bitfield data type.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoPRVM: Fix a hack in LNO file loading
bones_was_here [Fri, 26 Jan 2024 08:16:48 +0000 (18:16 +1000)]
PRVM: Fix a hack in LNO file loading

This caused misaligned memory access.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoFix signed int overflows and tidy nearby documentation
bones_was_here [Tue, 23 Jan 2024 22:10:40 +0000 (08:10 +1000)]
Fix signed int overflows and tidy nearby documentation

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agor_shadow: work around a realtime world light crash
bones_was_here [Tue, 23 Jan 2024 01:00:01 +0000 (11:00 +1000)]
r_shadow: work around a realtime world light crash

Fudges a bit more memory to support edge cases, prints a warn instead of
crashing if it's not enough.

see https://github.com/DarkPlacesEngine/darkplaces/issues/119
and 46964b3848eb7471d2f0e2284ae389b4b53337c1

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoMakefile: optimise debug builds somewhat
bones_was_here [Tue, 23 Jan 2024 05:43:48 +0000 (15:43 +1000)]
Makefile: optimise debug builds somewhat

Also fixes warning spam in debug builds.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agosys: refactor the clean shutdown process
bones_was_here [Mon, 22 Jan 2024 21:58:45 +0000 (07:58 +1000)]
sys: refactor the clean shutdown process

After all the other refactors finally we can clean this up.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agosys: improve error and crash handling
bones_was_here [Sun, 21 Jan 2024 21:52:26 +0000 (07:52 +1000)]
sys: improve error and crash handling

Renames Sys_Error to Sys_Abort (now using the Engine Abort message) for
clarity (as distinct from the non-fatal Host_Error).

Includes the engine version in the Crash and Abort SDL dialogs.

Linux: includes the glibc backtrace in the Engine Crash SDL dialog.
Fixes CTRL+C not working while the SDL dialog is open.

Fixes a double Sys_Error/Sys_Abort when memory corruption was detected.

Windows: omits colours when printing a Crash to stderr (not supported).

Makes signal handling (mostly) POSIX async-signal-safe.

Fixes a slight bug in PRVM_ShortStackTrace().

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoPRVM: fix a use of strlcpy on an unterminated source
bones_was_here [Sun, 21 Jan 2024 18:03:51 +0000 (04:03 +1000)]
PRVM: fix a use of strlcpy on an unterminated source

This code is used when starting a QC program in a non-English language.
See also 3727057b879ccfeaa434537f41a302f047e8cfae

Also renames the dp_ustr2stp() parameter ssize to slen for clarity.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 months agoRefactor InfoString_GetValue() calling
bones_was_here [Sun, 21 Jan 2024 10:30:23 +0000 (20:30 +1000)]
Refactor InfoString_GetValue() calling

Returning the number of bytes written is more useful.

Signed-off-by: bones_was_here <bones_was_here@xonotic.au>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
9 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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).

10 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.

10 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>
10 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.

10 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.

10 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)

10 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...

10 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.

10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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>
10 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

10 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>
10 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>
10 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>