Rudolf Polzer [Mon, 23 Sep 2024 13:02:27 +0000 (15:02 +0200)]
Remove the `jumpabsolute` member from `mstatement_s`.
This reduces the struct from 20 to 16 bytes, and thus may save some
RAM. It also may improve CPU cache behavior by keeping more QC code in
L1 and L2 cache, and possibly also improve instruction processing inside
the CPU as all statements are aligned the same way.
On `srv04`, this speeds up Xonotic's `serverbench` from 58.92s real,
57.72s user to 57.72s real, 56.59s user (median of 25).
Since that cvar was implemented, unix time has grown too large to be
represented precisely by a float, causing FPS to be much lower than
configured. Should be using host.realtime (relative) here anyway.
Simplifies Curl_Select() and improves some debug messages.
So we can work around its bug (race condition) that makes start.bsp
unplayble sometimes because apparently DP is faster at connecting the
local client than some other engines, and this mod relies on it taking
longer.
host: make some startup errors non-fatal, related polishing and cleanup
It's annoying to abort DP just because of a bad menu progs or demo,
especially on Windows where accessing stdout is difficult so console
access is more important.
Shows a correct fallback message when the menu progs crashes (it's not
because of missing files).
Makes the missing files message more concise.
Performs a full cleanup after any QC crash, most importantly
progs->loaded is now false until that VM is restarted successfully.
Prevents menu failure interfering with more important VMs.
Removes the weird "early frame abort" jump point which is redundant now
because Host_Error, now the only code that ever aborts a frame, calls
Sys_Error instead of Host_AbortCurrentFrame during init.
Changes the framecount of the first frame from 0 to 1 so that when it's
>0 that means frame abort is now possible and safe.
When inactive/minimised with snd_mutewhenidle enabled, the audio capture
was unreliable and sound was sometimes output when it should have been
muted.
Closes https://gitlab.com/xonotic/darkplaces/-/issues/92
(the video issue was already fixed).
Timedemos now share the same mute implementation as snd_mutewhenidle.
Ignores refresh requests while a refresh is in progress.
This prevents live servers getting timed out, which sometimes happened
when Xonotic menu QC responded to a server list mouseover event.
Fixes incorrect types in timeout check and ping comparison.
James O'Neill [Thu, 15 Aug 2024 14:09:14 +0000 (23:09 +0900)]
Merge PR 'Only use BoxTouchingVisibleLeafs when not using r_novis'
Updates the entity visibility check in `R_View_UpdateEntityVisible` so
that with `r_novis 1` entities are rendered when the player is outside
of the level.
bones_was_here [Sun, 11 Aug 2024 13:46:50 +0000 (23:46 +1000)]
net_slist: improve warnings and debug messages
Detects out-of-order packets in dpmaster replies.
Hides IPv6 master timeouts by default.
Adds more info to some messages.
Uses consistent VM warnings for all the QC builtins.
Mario [Wed, 7 Aug 2024 17:33:15 +0000 (17:33 +0000)]
Reduce the amount of unnecessary messages shown in the game chat
Some engine messages are being printed to chat in scenarios where they may obscure regular game chat.
To help with this, I've adjusted the visibility of them:
- "unconnected changed name to BOT" and "BOT left the game" showing in chat have been disabled by only allowing such messages to show for real clients
Bots will still show that they've been dropped in the console and Xonotic still shows a (dis)connect message
- Verbose "Server lag report" messages (most commonly seen during map votes) have been moved to the console
bones_was_here [Sun, 4 Aug 2024 10:49:40 +0000 (20:49 +1000)]
edict: fix escape parsing and make exceptions configurable
In 312123ecffc7e3dd892c7df754c911b47b9cdfaa a bug was introduced where
newlines were no longer supported in string fields.
This patch supports them again, which requires exceptions be
reintroduced to fully support some buggy maps, but this time there's a
cvar for documentation and adjustment. The other notes and fixes in
https://github.com/DarkPlacesEngine/darkplaces/pull/185 still apply.
The code introduced in 42e86ab7892c3d8f5373402a714b73b2e040d81b had two
separate modes which was more complex than necessary and less robust in
high ping high jitter scenarios.
The 0ms packet check didn't work when the cause was aggressive time
synchronisation and a ping spike.
In 3d8f1ca7b142c0a9fd8c3b4a494b62dcce39ab71 a horizontal player speed
calculation was changed to include the vertical velocity and to no
longer be the speed, by use of the wrong macro.
This patch reverts those changes and adds a macro for this calculation.
bones_was_here [Thu, 1 Aug 2024 12:17:14 +0000 (22:17 +1000)]
scr: update the centreprint buffer for the empty message
Fixes a bug introduced by me in
https://github.com/DarkPlacesEngine/darkplaces/pull/159 where a
`svc_finale` message with the empty string could cause a
previously displayed engine centreprint to appear again.
PRVM: fix incorrect tempstring length in VM_tokenizebyseparator()
This caused memcpy() in PRVM_SetTempString() to copy too many bytes,
when the source string had the maximum length it could read past the end
and trigger a segfault.
Bug was introduced in 26a665ff43052862131df3c63785f91861989fc8 and looks
to be specific to that builtin.
Properly unescape escaped characters in save file when loading (#185)
Modified PRVM_ED_ParseEdict to determine whether it is loading a save or
not, and unescape variables if loading a save.
Fixes https://github.com/DarkPlacesEngine/darkplaces/issues/81
bones_was_here [Tue, 28 May 2024 20:19:11 +0000 (06:19 +1000)]
Improve robustness of Con_CenterPrintf()
This code was OK, but if someone were to change the buffer size(s) such
that line[] were smaller than msg[], or were to call Con_CenterPrintf()
with a maxLineLength > 40, then a buffer overflow would have become
possible. This patch prevents it.
See https://github.com/DarkPlacesEngine/darkplaces/pull/159
James O'Neill [Tue, 28 May 2024 10:28:16 +0000 (19:28 +0900)]
Print centerprint messages to the console (#159)
Add new function `Con_CenterPrint` which can be used to print messages
to the console, without showing onscreen, and with a "horizontal rule"
above and below. Use `Con_CenterPrint` to log centerprint messages to
the console.
bones_was_here [Wed, 8 May 2024 21:16:53 +0000 (07:16 +1000)]
Refactor game/mod cvar defaults
Adds gamegroup defaults.
This avoids the need to specify the same Quake defaults for every Quake
expansion/mod.
Fixes newly-added Quake mods (quake15, ad) having global defaults
instead of Quake defaults.
Moves comments in front of the cvars they refer to, some were unclear.
bones_was_here [Tue, 7 May 2024 16:30:09 +0000 (02:30 +1000)]
particles: fix bugs in cl_particles_quake
There was a segfault when CL_NewQuakeParticle->CL_NewParticle returned
NULL, and a missing break; in case pt_snow: in R_RenderParticles causing
fall-through to pt_explode.
Introduced in 58dc7879146968c2c07e1ffd2c521487a5e768d9, I missed them in
code review, oops.
Could have just added checks for NULL in CL_ParticleExplosion but these
kinds of exceptions can get messy if several accumulate so it seemed
better to merge them into the API which also made NULL checks redundant.
Changes the particle_t comments to doxygen comments.
Fixes indenting.
bones_was_here [Tue, 7 May 2024 01:23:16 +0000 (11:23 +1000)]
PVS: dynamically allocate all FatPVS buffers
Some were dynamic, others weren't...
Fixes invisible entities and monsters ignoring the player on big/complex
maps, and undefined behaviour (reading past the end of the buffer).
Fixes https://gitlab.com/xonotic/darkplaces/-/issues/322
Adds Mem_Size() for retrieving the size of an allocation.
Simplifies some checks (we can check the pointer now so we dont need to
store byte counts just to see if there's any data).
bones_was_here [Mon, 6 May 2024 01:15:40 +0000 (11:15 +1000)]
sprites: fix misaligned memory access while loading (v2)
This reverts commit 0d5f8f0edd073d7ff233bde3995b529c0fcb67ff, that
approach didn't solve it for the other code path (used in mod "quake15")
so we need to memcpy each struct.
bones_was_here [Sun, 5 May 2024 19:13:34 +0000 (05:13 +1000)]
net: fix UB in VM_CL_getstati() and when sending the `items` stat
Simplifies the shifting in VM_CL_getstati() to avoid signed integer
overflow when the high bits are read with the arguments 23 and 9 (as
done in "quake15" and "ad" mods).
Refactors VM_CL_getstati() slightly, returns 0 when the index is out of
range (instead of whatever happened to be in that memory).
Masks off the bits that will overflow when packing the `items` stat for
sending (otherwise corruption of the low bits could occur on x86).
Q1BSP: add a workaround cvar for the Rogue lava men, use it when playing Rogue
This doesn't fix them, it just changes the behaviour of the map bug so
that they're stuck like in the original Quake engine. Fixing them
properly requires moving them, a .ent file is convenient for that.
Fixes MVM getgamedirinfo() builtin returning stale data (wasn't updated
by fs_rescan).
Fixes `startdemos` not working when changing to a mod that uses it,
after previously having had a map loaded.
Fixes `menu_main` being unavailable to quake.rc when changing to a mod
that uses it instead of `startdemos`.
Fixes `menu_restart` not performing the full MR_Init() (updates video
modes etc).
Fixes a race where it was possible to segfault by handling keyboard
events meant for MENU QC after MR_Shutdown() but before MR_Init() (by
calling directly instead of adding `menu_restart` to the cbuf).
Fixes an inconsistent extern declaration found by ubsan.
fs: recognise mods by -game cmdline args, deduplicate gamedirs, refactoring
Players often start mods using -game even when they have their own
cmdline option, and modders often provide scripts which use -game.
This was already implemented but only for the `gamedir` command.
Refactoring was required to avoid chicken vs egg problems when doing it
with cmdline gamedirs too.
Fixes a bug: the first gamedir (in the cmdline or `gamedir` args) was
used to identify the mod but it needs to be the last one that matches
because the last gamedir is the primary (first in the search path, and
where files are saved).
Includes supported game and mod directories in the main gamedir list for
interface consistency, less special cases, and to support deduplication.
Refactoring was required in the menu modlist where there was also an
opportunity to simplify.
Fixes inability to change from a supported mod (eg rogue) back to id1.
Bugs came from 270f020888c5a03b98cc7752957243e6123c1132 trying to use
NudgeOutOfSolid on Q1BSP which currently isn't possible, combined with
a map bug on alk_caustic, and unsticking unfortunately being an
essential part of Q1BSP player physics.
Adjusts cvar defaults to match Quake behaviour.
Improves documentation.
James O'Neill [Sun, 21 Apr 2024 15:28:29 +0000 (00:28 +0900)]
Accept "ctrl" + "=" for increasing console text size (#167)
Can't use the "=+" key to increase the console text size because the
code only wants "+"; ctrl+shift+= also does not work. Keypad + works.
This patch makes it accept the = key as well as +.
Fixes #110 .
See https://github.com/DarkPlacesEngine/darkplaces/pull/167