<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Xonotic Forums - Xonotic - Development]]></title>
		<link>https://forums.xonotic.org/</link>
		<description><![CDATA[Xonotic Forums - https://forums.xonotic.org]]></description>
		<pubDate>Mon, 18 May 2026 06:52:44 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Update to Autobuild seems to stuck?]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9939</link>
			<pubDate>Tue, 12 Nov 2024 12:14:50 +0000</pubDate>
			<dc:creator><![CDATA[Aguaumreal]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9939</guid>
			<description><![CDATA[I currently try to update my game however wenn running the script it is stuck at:<br />
<br />
"targetting the normal autobuild version"<br />
<br />
Any clue what's the problem? I'm using Arch, and it used to work before.<br />
<br />
<br />
**Edit**<br />
NVM i just waited and finally it started updating. Though it took super long till finally something happend.]]></description>
			<content:encoded><![CDATA[I currently try to update my game however wenn running the script it is stuck at:<br />
<br />
"targetting the normal autobuild version"<br />
<br />
Any clue what's the problem? I'm using Arch, and it used to work before.<br />
<br />
<br />
**Edit**<br />
NVM i just waited and finally it started updating. Though it took super long till finally something happend.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How can I analyze demo file or CLIENT TO SERVER packets?]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9878</link>
			<pubDate>Thu, 20 Jun 2024 02:48:07 +0000</pubDate>
			<dc:creator><![CDATA[vighill9]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9878</guid>
			<description><![CDATA[Sorry, apologies in advance. I'm newbie for inspecting Xonotic codes (quakeC, darkplaces) and I'm struggling with code analysis because I want  to make detection tools like aim hacks and suspicious user perfermances. it will be very absurd question but can I make the demo files to csvfiles that can be easily statistically analyzed? I have seen the perl script to cut or edit demofiles in xonotic open source, but it only works for those purpose. I made a script based on the script but saw the only part of the readable data and failed to make csv file. And in other options, I also found that there is a "stooge bot" for packet hijacking(?) proxy server. <br />
<br />
But, I might be wrong, because analying the client to server packets and demo files is obsolete for detecting aim hacks and it's really complicate in the sense that a lot of variants like dedicated server sending back clients data after applying physics. <br />
 <br />
In my search, triggered by command the clients recording data is allowed to sent to server. And filtering the packets and writing the data to demo files. The recorded demo files can be read at playback process in client. And the demo files parsed into client readable message. I think I will get clues more for the parsing functions.<br />
<br />
It's really tough things to read C codes and QuakeC codes but interesting and if I understood the whole structures about data transfering processs through the all paths between client and server, between server and server progs.dat, I would acheive my goal. Before I die to time pass to do that, I want some tricks or opinions about the question from this forum users of full experiences in this game development.]]></description>
			<content:encoded><![CDATA[Sorry, apologies in advance. I'm newbie for inspecting Xonotic codes (quakeC, darkplaces) and I'm struggling with code analysis because I want  to make detection tools like aim hacks and suspicious user perfermances. it will be very absurd question but can I make the demo files to csvfiles that can be easily statistically analyzed? I have seen the perl script to cut or edit demofiles in xonotic open source, but it only works for those purpose. I made a script based on the script but saw the only part of the readable data and failed to make csv file. And in other options, I also found that there is a "stooge bot" for packet hijacking(?) proxy server. <br />
<br />
But, I might be wrong, because analying the client to server packets and demo files is obsolete for detecting aim hacks and it's really complicate in the sense that a lot of variants like dedicated server sending back clients data after applying physics. <br />
 <br />
In my search, triggered by command the clients recording data is allowed to sent to server. And filtering the packets and writing the data to demo files. The recorded demo files can be read at playback process in client. And the demo files parsed into client readable message. I think I will get clues more for the parsing functions.<br />
<br />
It's really tough things to read C codes and QuakeC codes but interesting and if I understood the whole structures about data transfering processs through the all paths between client and server, between server and server progs.dat, I would acheive my goal. Before I die to time pass to do that, I want some tricks or opinions about the question from this forum users of full experiences in this game development.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[0.8.6 and git - Stutter points / Profiling / Code Optimization]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9874</link>
			<pubDate>Sat, 08 Jun 2024 16:32:03 +0000</pubDate>
			<dc:creator><![CDATA[dagelf]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9874</guid>
			<description><![CDATA[Hi All<br />
<br />
Has anyone built ops around benchmarking the darkplaces or Xonotic codebase? <br />
<br />
I stumbled on <a href="https://www.youtube.com/watch?v=oG-H-IfXUqI" target="_blank" rel="noopener" class="mycode_url">Optimizing my game so it runs on a potato</a> where a Godot game dev details things he did to get his fps up from 15 to over 100 fps... <br />
<br />
Was thinking that I should just plain profile the code, and maybe take a bash at it, maybe one of those tips (like randomizing the times at which bots do their path calculation - if its not done already) - maybe there's still some scope for improvement?<br />
<br />
Does anyone have any tips / are there any existing profiling scripts or documentation, specifically aimed at programming?<br />
<br />
I noticed that darkplaces has a "make profile" option, but that's as much as I could find, without diving into doing it myself... (nothing on any related issue trackers)<br />
<br />
(I'm not talking compilation flags like here <a href="https://forums.xonotic.org/showthread.php?tid=3178" target="_blank" rel="noopener" class="mycode_url">https://forums.xonotic.org/showthread.php?tid=3178</a>)]]></description>
			<content:encoded><![CDATA[Hi All<br />
<br />
Has anyone built ops around benchmarking the darkplaces or Xonotic codebase? <br />
<br />
I stumbled on <a href="https://www.youtube.com/watch?v=oG-H-IfXUqI" target="_blank" rel="noopener" class="mycode_url">Optimizing my game so it runs on a potato</a> where a Godot game dev details things he did to get his fps up from 15 to over 100 fps... <br />
<br />
Was thinking that I should just plain profile the code, and maybe take a bash at it, maybe one of those tips (like randomizing the times at which bots do their path calculation - if its not done already) - maybe there's still some scope for improvement?<br />
<br />
Does anyone have any tips / are there any existing profiling scripts or documentation, specifically aimed at programming?<br />
<br />
I noticed that darkplaces has a "make profile" option, but that's as much as I could find, without diving into doing it myself... (nothing on any related issue trackers)<br />
<br />
(I'm not talking compilation flags like here <a href="https://forums.xonotic.org/showthread.php?tid=3178" target="_blank" rel="noopener" class="mycode_url">https://forums.xonotic.org/showthread.php?tid=3178</a>)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hello guys! I need Xonotic Debian repository, not snap]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9803</link>
			<pubDate>Thu, 02 Nov 2023 18:02:41 +0000</pubDate>
			<dc:creator><![CDATA[SerW]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9803</guid>
			<description><![CDATA[And not Flathub.<br />
Could you, devs, please add a repository for Xonotic? :-))]]></description>
			<content:encoded><![CDATA[And not Flathub.<br />
Could you, devs, please add a repository for Xonotic? :-))]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[I (sort of) converted the QC bytecode to native exec, but unfort w/o perf improv]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9801</link>
			<pubDate>Fri, 20 Oct 2023 23:12:51 +0000</pubDate>
			<dc:creator><![CDATA[oblector]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9801</guid>
			<description><![CDATA[The game code is implemented in QuakeC (not the same language as C, which is used to implement the Darkplaces engine), and clients interpret a "bytecode" derived from it, so that players are able to play modified versions chosen by server owners, without having the install a separate Xonotic for each server.<br />
<br />
However, servers only run a fixed QuakeC source chosen by its owner (because clients can't send code, only receive it).<br />
<br />
So I was wondering how much the server performance is impacted by Server QuakeC, and if it was possible to recompile it to a native executable or at least to use a just-in-time compiler.<br />
<br />
Initially I tried to do some analysis of which entity fields may be present in which entities, hoping to save memory. However because of many `find` operations, which may return a priori arbitrary entities, doing such analysis would be complex and demand many manual annotations, which would be exhausting to do to the large source code of Xonotic.<br />
<br />
So I decided to simply try to change the `prvm_executeprogram.h` part (which interprets the bytecode) into something that transpiles to C. Well, not simply.<br />
<br />
Because in the QcVM bytecode every variable is global, and stores some number (which may be, for instance, a float or a function index). It is not a register machine or a stack machine. So I tried the following:<br />
<br />
* RETURN and PARMn globals are always converted to C locals (hopefully stored in registers);<br />
* the "locals" of QuakeC are converted to C locals, except in a few functions, that instead store them in globals so that they "leak" to certain other functions (mostly secret functions created by GMQCC to implement variadic functions);<br />
* if a global is never modified by the QcVM code, then it's inlined IF it is not an engine global nor an autocvar;<br />
* similarly, dynamic function calls are replaced by static calls if possible (Only now I noticed only that I forgot to check if the function index is not stored in a engine global...; I'll fix it later. EDIT: fixed it in `maybeConstCalledFun`, generated code is identical);<br />
* each non-builtin function is compiled to a C function "W f«n»(prvm_prog_t *prog, U i0, ..., U i«s-1»)", where s is a number between 0 and 24, and where W stores vector+error; a dynamic call needs a bitmap to know which QcVM arguments are floats and which are vectors, so that they are correctly written to the C arguments;<br />
* most builtins call the engine, but some (like max, min) are inlined;<br />
* field access is unmodified;<br />
* some information like number of entities (used in bounds checking) may change after calling builtins, so it needs to be re-accessed regularly, but the C code marks the operation that access such information as "pure", so GCC will coalesce consecutive calls that aren't interrupted by builtins.<br />
<br />
You may find the transpiler QcNat.hs here: <a href="https://gitlab.com/-/snippets/3613556" target="_blank" rel="noopener" class="mycode_url">https://gitlab.com/-/snippets/3613556</a> + some cludgy Darkplaces patch that does not respect the formatting guidelines. The QcNat.hs is very slow (specially the const global detection), and the resulting C code is very loong.<br />
<br />
I tried it, the game sort of worked (maybe I forgot to mark some global as mutable), however the performance was the same. (EDIT: found it, variadic functions access the PARMn's without defining them, how i missed that? need to adjust the transpiler.)<br />
<br />
What do you think? Maybe the QcVM interpreter is not a bottleneck? Or my fault?<br />
<br />
Thank you, developers!]]></description>
			<content:encoded><![CDATA[The game code is implemented in QuakeC (not the same language as C, which is used to implement the Darkplaces engine), and clients interpret a "bytecode" derived from it, so that players are able to play modified versions chosen by server owners, without having the install a separate Xonotic for each server.<br />
<br />
However, servers only run a fixed QuakeC source chosen by its owner (because clients can't send code, only receive it).<br />
<br />
So I was wondering how much the server performance is impacted by Server QuakeC, and if it was possible to recompile it to a native executable or at least to use a just-in-time compiler.<br />
<br />
Initially I tried to do some analysis of which entity fields may be present in which entities, hoping to save memory. However because of many `find` operations, which may return a priori arbitrary entities, doing such analysis would be complex and demand many manual annotations, which would be exhausting to do to the large source code of Xonotic.<br />
<br />
So I decided to simply try to change the `prvm_executeprogram.h` part (which interprets the bytecode) into something that transpiles to C. Well, not simply.<br />
<br />
Because in the QcVM bytecode every variable is global, and stores some number (which may be, for instance, a float or a function index). It is not a register machine or a stack machine. So I tried the following:<br />
<br />
* RETURN and PARMn globals are always converted to C locals (hopefully stored in registers);<br />
* the "locals" of QuakeC are converted to C locals, except in a few functions, that instead store them in globals so that they "leak" to certain other functions (mostly secret functions created by GMQCC to implement variadic functions);<br />
* if a global is never modified by the QcVM code, then it's inlined IF it is not an engine global nor an autocvar;<br />
* similarly, dynamic function calls are replaced by static calls if possible (Only now I noticed only that I forgot to check if the function index is not stored in a engine global...; I'll fix it later. EDIT: fixed it in `maybeConstCalledFun`, generated code is identical);<br />
* each non-builtin function is compiled to a C function "W f«n»(prvm_prog_t *prog, U i0, ..., U i«s-1»)", where s is a number between 0 and 24, and where W stores vector+error; a dynamic call needs a bitmap to know which QcVM arguments are floats and which are vectors, so that they are correctly written to the C arguments;<br />
* most builtins call the engine, but some (like max, min) are inlined;<br />
* field access is unmodified;<br />
* some information like number of entities (used in bounds checking) may change after calling builtins, so it needs to be re-accessed regularly, but the C code marks the operation that access such information as "pure", so GCC will coalesce consecutive calls that aren't interrupted by builtins.<br />
<br />
You may find the transpiler QcNat.hs here: <a href="https://gitlab.com/-/snippets/3613556" target="_blank" rel="noopener" class="mycode_url">https://gitlab.com/-/snippets/3613556</a> + some cludgy Darkplaces patch that does not respect the formatting guidelines. The QcNat.hs is very slow (specially the const global detection), and the resulting C code is very loong.<br />
<br />
I tried it, the game sort of worked (maybe I forgot to mark some global as mutable), however the performance was the same. (EDIT: found it, variadic functions access the PARMn's without defining them, how i missed that? need to adjust the transpiler.)<br />
<br />
What do you think? Maybe the QcVM interpreter is not a bottleneck? Or my fault?<br />
<br />
Thank you, developers!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Xonotic Roadmap]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9646</link>
			<pubDate>Sat, 18 Mar 2023 23:18:34 +0000</pubDate>
			<dc:creator><![CDATA[cushinga]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9646</guid>
			<description><![CDATA[Alr, I've decided the contents of this post were dumb, but I do think the devs do need some sort of more transparent roadmap of future plans instead of just a milestones list on GitLab.<br />
That is all.<br />
Thank you,]]></description>
			<content:encoded><![CDATA[Alr, I've decided the contents of this post were dumb, but I do think the devs do need some sort of more transparent roadmap of future plans instead of just a milestones list on GitLab.<br />
That is all.<br />
Thank you,]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Xonotic 0.8.5/DarkPlaces "Issues"]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9642</link>
			<pubDate>Fri, 24 Feb 2023 07:55:07 +0000</pubDate>
			<dc:creator><![CDATA[Baker]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9642</guid>
			<description><![CDATA[This will be an ongoing thread related to engine code in Xonotic/DarkPlaces.<br />
<br />
<span style="font-size: x-small;" class="mycode_size">(I don't see a issue report ability on the github for Xonotic.  I engine code a lot and will be maintaining a modified DarkPlaces for the foreseabe future.  If there is a number like "1008", I used that as personal tracking # in the code.  I wish to thank the Xonotic team for their years of advancement and hardening of DarkPlaces</span><br />
<br />
x. darkplaces-wgl.vcproj has 2 errors upon compile on 0.8.5 (prior version did not).<br />
<br />
vid_shared.c The fix is simply 1.0 ---&gt; 1.0f<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>void VID_ApplyGammaToColor(const float *rgb, float *out)<br />
{<br />
int i;<br />
if (cachecolorenable)<br />
{<br />
for (i = 0; i &lt; 3; i++)<br />
out[i] = pow(cachecontrastboost * rgb[i] / ((cachecontrastboost - 1) * rgb[i] + 1), 1.0f / invpow(0.5f, 1 - cachegrey[i])) * cachewhite[i] + cacheblack[i];<br />
}<br />
else<br />
{<br />
for (i = 0; i &lt; 3; i++)<br />
out[i] = pow(cachecontrastboost * rgb[i] / ((cachecontrastboost - 1) * rgb[i] + 1), 1.0f / cachegamma) * cachecontrast + cachebrightness;<br />
}<br />
}</code></div></div><br />
x. Intel Integrated video -- DarkPlaces spams "Fragment shader compile log: No errors."  Now perhaps the video driver is at fault for returning "No errors." as the result of a shader compile, but this is Intel Integrated video and there are probably 200,000,000 computers with them.  Anyway, the fix ...<br />
<br />
gl_backend.c<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (compilelog[0]) { // Baker 1008 - fix when it reports "no error" and the next line only sees that it contains "error" and prints a false warning.<br />
 if (developer_extra.integer || (developer.integer &amp;&amp; strcasecmp(compilelog,"No errors.") !=0 )) {<br />
if (strstr(compilelog, "error") || strstr(compilelog, "ERROR") || strstr(compilelog, "Error") || strstr(compilelog, "WARNING") || strstr(compilelog, "warning") || strstr(compilelog, "Warning"))<br />
{<br />
int i, j, pretextlines = 0;<br />
for (i = 0;i &lt; numstrings - 1;i++)<br />
for (j = 0;strings[i][j];j++)<br />
if (strings[i][j] == '&#92;n')<br />
pretextlines++;<br />
Con_Printf("%s shader compile log:&#92;n%s&#92;n(line offset for any above warnings/errors: %i)&#92;n", shadertype, compilelog, pretextlines);<br />
}<br />
}<br />
}</code></div></div><br />
x. darkplaces-wgl.vcproj  should have /LARGEADDRESSAWARE in linker options.  When compiled without this, memory allocations can fail when crossing the 2 GB mark.<br />
<br />
x. I have never seen this in occur in Xonotic because uses the viewzoom field, but DarkPlaces has a very odd zoom effect starting a map in Quake.<br />
<br />
The fix is initializing the viewzoom field.<br />
<br />
cl_main.c - CL_ClearState<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// set up the float version of the stats array for easier access to float stats<br />
 cl.statsf = (float *)cl.stats;<br />
cl.num_entities = 0;<br />
cl.num_static_entities = 0;<br />
cl.num_brushmodel_entities = 0;<br />
cl.stats[STAT_VIEWZOOM] = 255; // Baker 1006</code></div></div><br />
x. On a Windows 10 computer, I have experienced a situation where video restart from windowed mode to fullscreen while the engine has the mouse captured causes the mouse to forever more move the player and never mouselook. This does not occur if the mouse is not captured.  This applies to 0.8.3 for sure, I have not tested 0.8.5.  If I think of what I want to look for, I'll find out the issue, solve it and post the solution here.<br />
<br />
x.The official DarkPlaces engine download does not have a "DarkPlaces"  icon in the top left corner of the engine window and instead has the "missing icon" icon.  Xonotic does have a window icon in the top left corner.<br />
<br />
x. DarkPlaces:  The Mac version download does not have a valid digital signature.  If you set the Mac to allow it anyway,, where is DarkPlaces looking for the data?  I have not actually been able to get DarkPlaces to work on a Mac.  This is compounded by Mac not really allowing command line parameters for a gui application, so I can't -nohome it or do -basedir &lt;something&gt;.<br />
<br />
x. In both Xonotic and DarkPlaces, if you are holding down +attack (like mouse 1) and ALT TAB out of the window in Windows, you will be firing forever until you quit the engine and restart it.<br />
<br />
Solve:  vid_wgl.c<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Baker 1002.2<br />
void Key_Release_Keys (void)<br />
{<br />
int      keynum;<br />
<br />
    for (keynum = 0 ; keynum &lt; MAX_KEYS /*1024 in dp*/; keynum++) {<br />
if (keydown[keynum])<br />
Key_Event (keynum, /*ascii*/ 0, /*down*/ false);<br />
}<br />
}</code></div></div> <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (!fActive)<br />
 {<br />
VID_SetMouse(false, false, false);<br />
Key_Release_Keys (); // Baker 1002<br />
if (vid_isfullscreen)<br />
{<br />
if (gldll)<br />
ChangeDisplaySettings (NULL, CDS_FULLSCREEN);<br />
vid_wassuspended = true;<br />
}<br />
VID_RestoreSystemGamma();<br />
}</code></div></div>]]></description>
			<content:encoded><![CDATA[This will be an ongoing thread related to engine code in Xonotic/DarkPlaces.<br />
<br />
<span style="font-size: x-small;" class="mycode_size">(I don't see a issue report ability on the github for Xonotic.  I engine code a lot and will be maintaining a modified DarkPlaces for the foreseabe future.  If there is a number like "1008", I used that as personal tracking # in the code.  I wish to thank the Xonotic team for their years of advancement and hardening of DarkPlaces</span><br />
<br />
x. darkplaces-wgl.vcproj has 2 errors upon compile on 0.8.5 (prior version did not).<br />
<br />
vid_shared.c The fix is simply 1.0 ---&gt; 1.0f<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>void VID_ApplyGammaToColor(const float *rgb, float *out)<br />
{<br />
int i;<br />
if (cachecolorenable)<br />
{<br />
for (i = 0; i &lt; 3; i++)<br />
out[i] = pow(cachecontrastboost * rgb[i] / ((cachecontrastboost - 1) * rgb[i] + 1), 1.0f / invpow(0.5f, 1 - cachegrey[i])) * cachewhite[i] + cacheblack[i];<br />
}<br />
else<br />
{<br />
for (i = 0; i &lt; 3; i++)<br />
out[i] = pow(cachecontrastboost * rgb[i] / ((cachecontrastboost - 1) * rgb[i] + 1), 1.0f / cachegamma) * cachecontrast + cachebrightness;<br />
}<br />
}</code></div></div><br />
x. Intel Integrated video -- DarkPlaces spams "Fragment shader compile log: No errors."  Now perhaps the video driver is at fault for returning "No errors." as the result of a shader compile, but this is Intel Integrated video and there are probably 200,000,000 computers with them.  Anyway, the fix ...<br />
<br />
gl_backend.c<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (compilelog[0]) { // Baker 1008 - fix when it reports "no error" and the next line only sees that it contains "error" and prints a false warning.<br />
 if (developer_extra.integer || (developer.integer &amp;&amp; strcasecmp(compilelog,"No errors.") !=0 )) {<br />
if (strstr(compilelog, "error") || strstr(compilelog, "ERROR") || strstr(compilelog, "Error") || strstr(compilelog, "WARNING") || strstr(compilelog, "warning") || strstr(compilelog, "Warning"))<br />
{<br />
int i, j, pretextlines = 0;<br />
for (i = 0;i &lt; numstrings - 1;i++)<br />
for (j = 0;strings[i][j];j++)<br />
if (strings[i][j] == '&#92;n')<br />
pretextlines++;<br />
Con_Printf("%s shader compile log:&#92;n%s&#92;n(line offset for any above warnings/errors: %i)&#92;n", shadertype, compilelog, pretextlines);<br />
}<br />
}<br />
}</code></div></div><br />
x. darkplaces-wgl.vcproj  should have /LARGEADDRESSAWARE in linker options.  When compiled without this, memory allocations can fail when crossing the 2 GB mark.<br />
<br />
x. I have never seen this in occur in Xonotic because uses the viewzoom field, but DarkPlaces has a very odd zoom effect starting a map in Quake.<br />
<br />
The fix is initializing the viewzoom field.<br />
<br />
cl_main.c - CL_ClearState<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// set up the float version of the stats array for easier access to float stats<br />
 cl.statsf = (float *)cl.stats;<br />
cl.num_entities = 0;<br />
cl.num_static_entities = 0;<br />
cl.num_brushmodel_entities = 0;<br />
cl.stats[STAT_VIEWZOOM] = 255; // Baker 1006</code></div></div><br />
x. On a Windows 10 computer, I have experienced a situation where video restart from windowed mode to fullscreen while the engine has the mouse captured causes the mouse to forever more move the player and never mouselook. This does not occur if the mouse is not captured.  This applies to 0.8.3 for sure, I have not tested 0.8.5.  If I think of what I want to look for, I'll find out the issue, solve it and post the solution here.<br />
<br />
x.The official DarkPlaces engine download does not have a "DarkPlaces"  icon in the top left corner of the engine window and instead has the "missing icon" icon.  Xonotic does have a window icon in the top left corner.<br />
<br />
x. DarkPlaces:  The Mac version download does not have a valid digital signature.  If you set the Mac to allow it anyway,, where is DarkPlaces looking for the data?  I have not actually been able to get DarkPlaces to work on a Mac.  This is compounded by Mac not really allowing command line parameters for a gui application, so I can't -nohome it or do -basedir &lt;something&gt;.<br />
<br />
x. In both Xonotic and DarkPlaces, if you are holding down +attack (like mouse 1) and ALT TAB out of the window in Windows, you will be firing forever until you quit the engine and restart it.<br />
<br />
Solve:  vid_wgl.c<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Baker 1002.2<br />
void Key_Release_Keys (void)<br />
{<br />
int      keynum;<br />
<br />
    for (keynum = 0 ; keynum &lt; MAX_KEYS /*1024 in dp*/; keynum++) {<br />
if (keydown[keynum])<br />
Key_Event (keynum, /*ascii*/ 0, /*down*/ false);<br />
}<br />
}</code></div></div> <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>if (!fActive)<br />
 {<br />
VID_SetMouse(false, false, false);<br />
Key_Release_Keys (); // Baker 1002<br />
if (vid_isfullscreen)<br />
{<br />
if (gldll)<br />
ChangeDisplaySettings (NULL, CDS_FULLSCREEN);<br />
vid_wassuspended = true;<br />
}<br />
VID_RestoreSystemGamma();<br />
}</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Xonotic port/reboot in Godot - roadmap]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9623</link>
			<pubDate>Fri, 27 Jan 2023 23:04:21 +0000</pubDate>
			<dc:creator><![CDATA[ballerburg9005]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9623</guid>
			<description><![CDATA[A while back I have suggested to port Xonotic to Godot, in order to move it away from legacy tech and make it accessible to a wider dev community, resource base &amp; tons of new huge features and possibilities (like physics, in-game map editor, crafting, building, limitless modding, etc), but it became quite clear that no one from the current dev team/community is really interested in that (or only in an "after the fact" manner, maybe). Especially not so it seemed, the more they had already contributed to current Xonotic code, which seems understandable, but would be the least fortunate grounds to start porting with. I think the idea is very exciting and tempting, but still for just one single person it is too much work to get to a really satisfactory result. Also as Xonotic is very rich in tons of features, some of which tie deeply to the Darkplaces engine, there can never be a total 100% port of the game if it concerns the mostly unused cvars / fine-grained details and it would of course totally break any mods and compatibility. Think of when Mozilla switched Firefox Classic to Firefox Quantum on Desktop 10 years back, which was also a total rewrite of a very old and grown program. To 90% of people the browser remained the same for all intents and purposes, but to a very small minority the switch was a totally insulting outrage, because it broke addons and old features and was clunky at first especially to powerusers. Porting Xonotic to Godot would be a very similar situation. But on the long haul it will be worth it and pay back twice over (but it is lots of work at first, that some people have to do). If you were to put in less effort, you can easily jumble some sort of Quake shooter with Xonotic assets together on the weekend alone with Godot, but it would probably suck by comparison. My take on it is that you need at least two people to put in some serious manhours for some weeks to make it true to the original and take off, or it is just too much overkill for one person. This is why a Xonotic port will probably not happen any time soon, or at all.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">I am not trying to port the game right now</span>, but I am making a Duel trainer in Godot 4 (it is sort of a funny mini game) with some of the assets.<br />
<br />
I want to give an overview here what works, what is available and what is not. Maybe that will give people a better idea of what all the fuzz is about. <br />
<br />
<br />
What works: <ul class="mycode_list"><li>3D model import from Blender with animations, etc (via glb2.0)<br />
</li>
<li>any sort of run-of-the-mill FPS stuff<br />
</li>
<li>Converting bsp to map with q3map2<br />
</li>
</ul>
<br />
<br />
Sort of works:<ul class="mycode_list"><li>map import via Trenchbroom Loader plugin (needs Copy&amp;Paste to Valve 220 in netradiant-custom) + bash script to convert dds -&gt; png &amp; normalize weirdo paths in map file (only brush, no patch support &amp; with a few brushes missing randomly) - also Qodot has v4 version now  but not tested and should suffer from identical shortcomings<br />
</li>
<li><a href="https://github.com/rhulha/quake3-movement-godot" target="_blank" rel="noopener" class="mycode_url">basic Quake movement code</a> BUT without 100% original collision code (100% original code can be done but you have to bypass standard physics functions for it and do everything manually like in Darkplaces, which is rather messy by today's standards and most people don't consider this to be "worth it")<br />
</li>
<li>3D Performance with Godot 4 has been reported to be bad, depends on what features you use, but this is "intentional", since Godot 4 is still beta - it doesn't say much at this point<br />
</li>
</ul>
<br />
<br />
What does not work / exist:<ul class="mycode_list"><li><a href="https://github.com/godotengine/godot-proposals/issues/5010" target="_blank" rel="noopener" class="mycode_url">sandboxed</a> modding (Godot has absolutely no sandboxing yet - writing modding API would SUCK so bad by comparison, imho better to just sit this one out until Godot 4.1 or 5.0 or whatever. New: As pointed out in this thread, there is a <a href="https://github.com/WeaselGames/godot_luaAPI" target="_blank" rel="noopener" class="mycode_url">Godot Lua API for sandboxing</a>. However, I would be hesitant to go that route, for performance concerns and bugs. It would be MUCH nicer if Godot made this an engine feature using Gdscript, which is destined to happen "somewhen".)<br />
</li>
<li>networking code (because you have to write it all from scratch, the engine doesn't have any special features for this that make it easier. You have tons of code examples of course and <a href="https://git.join-striked.com/striked-gaming/open-source-shooter" target="_blank" rel="noopener" class="mycode_url">you can steal high-quality code everywhere</a>, but only to a certain extent, since Xonotic is input-based, which is too unusual. Of course it is still modern code and NOTHING alike writing QuakeC. Stats &amp; Gamelist count as network code and also have to be reimplemented. If you want to see a quick intro how networking code works in Godot 4, see this post: <a href="https://forums.xonotic.org/showthread.php?tid=9623&amp;pid=89284#pid89284" target="_blank" rel="noopener" class="mycode_url">https://forums.xonotic.org/showthread.ph...4#pid89284</a> )<br />
</li>
<li>all non-trivial shaders like skyboxes and lava need to be set up from scratch (I can imagine that you can crudely convert q3 shader logic via script in 60-80% of cases maybe to get at least some sort of passable surface.)<br />
</li>
<li>cvars (all cvars need to be reimplemented manually)<br />
</li>
<li>loading assets directly (all assets need to be imported by devs into a Godot "scene" via editor for them to work, even maps. So without sandboxing or custom map-loading code, at this point you are not able to load any untrusted community maps.)<br />
</li>
<li>game logic of course has to be written by hand. There is nothing in TBLoader that tells Godot what a jumppad means, a door or a portal.<br />
</li>
</ul>
<br />
<br />
Could conceivably work, but untested:<ul class="mycode_list"><li>dynamic <a href="https://www.youtube.com/watch?v=7cTEJiPFAiM" target="_blank" rel="noopener" class="mycode_url">bsp loading</a> (hint: loading bsp maps already works via q3map2 conversion to .map file, then conversion to Godot scene)<br />
</li>
<li>doing stuff from within the game you can only do in the editor (editor/plugin code works 100% identical to script code, the editor basically is a "game" itself)<br />
</li>
</ul>
<br />
<br />
<br />
<img src="https://i.imgur.com/NN4N9iz.jpg" loading="lazy"  alt="[Image: NN4N9iz.jpg]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[A while back I have suggested to port Xonotic to Godot, in order to move it away from legacy tech and make it accessible to a wider dev community, resource base &amp; tons of new huge features and possibilities (like physics, in-game map editor, crafting, building, limitless modding, etc), but it became quite clear that no one from the current dev team/community is really interested in that (or only in an "after the fact" manner, maybe). Especially not so it seemed, the more they had already contributed to current Xonotic code, which seems understandable, but would be the least fortunate grounds to start porting with. I think the idea is very exciting and tempting, but still for just one single person it is too much work to get to a really satisfactory result. Also as Xonotic is very rich in tons of features, some of which tie deeply to the Darkplaces engine, there can never be a total 100% port of the game if it concerns the mostly unused cvars / fine-grained details and it would of course totally break any mods and compatibility. Think of when Mozilla switched Firefox Classic to Firefox Quantum on Desktop 10 years back, which was also a total rewrite of a very old and grown program. To 90% of people the browser remained the same for all intents and purposes, but to a very small minority the switch was a totally insulting outrage, because it broke addons and old features and was clunky at first especially to powerusers. Porting Xonotic to Godot would be a very similar situation. But on the long haul it will be worth it and pay back twice over (but it is lots of work at first, that some people have to do). If you were to put in less effort, you can easily jumble some sort of Quake shooter with Xonotic assets together on the weekend alone with Godot, but it would probably suck by comparison. My take on it is that you need at least two people to put in some serious manhours for some weeks to make it true to the original and take off, or it is just too much overkill for one person. This is why a Xonotic port will probably not happen any time soon, or at all.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">I am not trying to port the game right now</span>, but I am making a Duel trainer in Godot 4 (it is sort of a funny mini game) with some of the assets.<br />
<br />
I want to give an overview here what works, what is available and what is not. Maybe that will give people a better idea of what all the fuzz is about. <br />
<br />
<br />
What works: <ul class="mycode_list"><li>3D model import from Blender with animations, etc (via glb2.0)<br />
</li>
<li>any sort of run-of-the-mill FPS stuff<br />
</li>
<li>Converting bsp to map with q3map2<br />
</li>
</ul>
<br />
<br />
Sort of works:<ul class="mycode_list"><li>map import via Trenchbroom Loader plugin (needs Copy&amp;Paste to Valve 220 in netradiant-custom) + bash script to convert dds -&gt; png &amp; normalize weirdo paths in map file (only brush, no patch support &amp; with a few brushes missing randomly) - also Qodot has v4 version now  but not tested and should suffer from identical shortcomings<br />
</li>
<li><a href="https://github.com/rhulha/quake3-movement-godot" target="_blank" rel="noopener" class="mycode_url">basic Quake movement code</a> BUT without 100% original collision code (100% original code can be done but you have to bypass standard physics functions for it and do everything manually like in Darkplaces, which is rather messy by today's standards and most people don't consider this to be "worth it")<br />
</li>
<li>3D Performance with Godot 4 has been reported to be bad, depends on what features you use, but this is "intentional", since Godot 4 is still beta - it doesn't say much at this point<br />
</li>
</ul>
<br />
<br />
What does not work / exist:<ul class="mycode_list"><li><a href="https://github.com/godotengine/godot-proposals/issues/5010" target="_blank" rel="noopener" class="mycode_url">sandboxed</a> modding (Godot has absolutely no sandboxing yet - writing modding API would SUCK so bad by comparison, imho better to just sit this one out until Godot 4.1 or 5.0 or whatever. New: As pointed out in this thread, there is a <a href="https://github.com/WeaselGames/godot_luaAPI" target="_blank" rel="noopener" class="mycode_url">Godot Lua API for sandboxing</a>. However, I would be hesitant to go that route, for performance concerns and bugs. It would be MUCH nicer if Godot made this an engine feature using Gdscript, which is destined to happen "somewhen".)<br />
</li>
<li>networking code (because you have to write it all from scratch, the engine doesn't have any special features for this that make it easier. You have tons of code examples of course and <a href="https://git.join-striked.com/striked-gaming/open-source-shooter" target="_blank" rel="noopener" class="mycode_url">you can steal high-quality code everywhere</a>, but only to a certain extent, since Xonotic is input-based, which is too unusual. Of course it is still modern code and NOTHING alike writing QuakeC. Stats &amp; Gamelist count as network code and also have to be reimplemented. If you want to see a quick intro how networking code works in Godot 4, see this post: <a href="https://forums.xonotic.org/showthread.php?tid=9623&amp;pid=89284#pid89284" target="_blank" rel="noopener" class="mycode_url">https://forums.xonotic.org/showthread.ph...4#pid89284</a> )<br />
</li>
<li>all non-trivial shaders like skyboxes and lava need to be set up from scratch (I can imagine that you can crudely convert q3 shader logic via script in 60-80% of cases maybe to get at least some sort of passable surface.)<br />
</li>
<li>cvars (all cvars need to be reimplemented manually)<br />
</li>
<li>loading assets directly (all assets need to be imported by devs into a Godot "scene" via editor for them to work, even maps. So without sandboxing or custom map-loading code, at this point you are not able to load any untrusted community maps.)<br />
</li>
<li>game logic of course has to be written by hand. There is nothing in TBLoader that tells Godot what a jumppad means, a door or a portal.<br />
</li>
</ul>
<br />
<br />
Could conceivably work, but untested:<ul class="mycode_list"><li>dynamic <a href="https://www.youtube.com/watch?v=7cTEJiPFAiM" target="_blank" rel="noopener" class="mycode_url">bsp loading</a> (hint: loading bsp maps already works via q3map2 conversion to .map file, then conversion to Godot scene)<br />
</li>
<li>doing stuff from within the game you can only do in the editor (editor/plugin code works 100% identical to script code, the editor basically is a "game" itself)<br />
</li>
</ul>
<br />
<br />
<br />
<img src="https://i.imgur.com/NN4N9iz.jpg" loading="lazy"  alt="[Image: NN4N9iz.jpg]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Welcome Message Dialogbox]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9620</link>
			<pubDate>Wed, 18 Jan 2023 09:40:16 +0000</pubDate>
			<dc:creator><![CDATA[Cooper Hawks]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9620</guid>
			<description><![CDATA[hey there,<br />
since v0.8.5 there is this dialogbox where you can choose if you want to join or spectate when entering a new match. Can this dialogbox be disabled, so that it works like in v0.8.2?]]></description>
			<content:encoded><![CDATA[hey there,<br />
since v0.8.5 there is this dialogbox where you can choose if you want to join or spectate when entering a new match. Can this dialogbox be disabled, so that it works like in v0.8.2?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[“Extended Translation Pack” is Possible]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9511</link>
			<pubDate>Sun, 04 Sep 2022 17:01:26 +0000</pubDate>
			<dc:creator><![CDATA[NaitLee]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9511</guid>
			<description><![CDATA[I gave it a try to make “Extended Translation Pack” in my own language, <a href="https://github.com/NaitLee/xon-cn-ext" target="_blank" rel="noopener" class="mycode_url">here’s the repo</a>.<br />
<br />
Update: The repo is renamed and have script infrastructure for variations.<br />
<br />
Non-English players that have hard time with English can feel ease, if they see their local language.<br />
(Or say, maybe weird, if they don’t see any strange foreign script…)<br />
<br />
Detailed explanation below.<br />
<br />
<hr class="mycode_hr" />
<br />
I’m working on localization work these days and noticed that stuffs like Campaign description can’t be translated via “standard” approach (official Transifex team).<br />
Singleplayer Campaign is the very first experience to new players. But what’s the point if it can’t be understood?<br />
<br />
So workaround should be done. I know about that the game/engine have concept of “packs”, those <span style="font-family: monospace;" class="mycode_font">.pk3</span> files or <span style="font-family: monospace;" class="mycode_font">.pk3dir</span> directories. This made it convenient for modding, for example.<br />
<br />
In the meanwhile, a big majority of Xonotic <span style="font-style: italic;" class="mycode_i">functional</span> assets are text files. In my opinion it’s a good matter: they are much easier to learn &amp; modify, in contrast to those static code.<br />
This also shows how devs here care about flexibility. Big thanks!<br />
<br />
So that I just search for those related files (e.g. <span style="font-family: monospace;" class="mycode_font">maps/campaignxonoticbeta.txt</span>), copy &amp; modify the strings inside, put to external pack, raise its priority to override the original, then it will work.<br />
<br />
<span style="font-style: italic;" class="mycode_i">However</span>, there’s a significant drawback: those functional bits are also being overridden, if affected files have official updates, they won't take effect until players update the pack (after my update, of course).<br />
<br />
At the moment it does no harm, for affecting only few files. But be careful anyway, as a non-functional game (edge case) can be worse if English makes less or no hassle.<br />
<br />
I wish better internationalization ability will be offered officially. Great game like Xonotic ought to be known by global gamers — and let’s don’t forget Software Freedom.]]></description>
			<content:encoded><![CDATA[I gave it a try to make “Extended Translation Pack” in my own language, <a href="https://github.com/NaitLee/xon-cn-ext" target="_blank" rel="noopener" class="mycode_url">here’s the repo</a>.<br />
<br />
Update: The repo is renamed and have script infrastructure for variations.<br />
<br />
Non-English players that have hard time with English can feel ease, if they see their local language.<br />
(Or say, maybe weird, if they don’t see any strange foreign script…)<br />
<br />
Detailed explanation below.<br />
<br />
<hr class="mycode_hr" />
<br />
I’m working on localization work these days and noticed that stuffs like Campaign description can’t be translated via “standard” approach (official Transifex team).<br />
Singleplayer Campaign is the very first experience to new players. But what’s the point if it can’t be understood?<br />
<br />
So workaround should be done. I know about that the game/engine have concept of “packs”, those <span style="font-family: monospace;" class="mycode_font">.pk3</span> files or <span style="font-family: monospace;" class="mycode_font">.pk3dir</span> directories. This made it convenient for modding, for example.<br />
<br />
In the meanwhile, a big majority of Xonotic <span style="font-style: italic;" class="mycode_i">functional</span> assets are text files. In my opinion it’s a good matter: they are much easier to learn &amp; modify, in contrast to those static code.<br />
This also shows how devs here care about flexibility. Big thanks!<br />
<br />
So that I just search for those related files (e.g. <span style="font-family: monospace;" class="mycode_font">maps/campaignxonoticbeta.txt</span>), copy &amp; modify the strings inside, put to external pack, raise its priority to override the original, then it will work.<br />
<br />
<span style="font-style: italic;" class="mycode_i">However</span>, there’s a significant drawback: those functional bits are also being overridden, if affected files have official updates, they won't take effect until players update the pack (after my update, of course).<br />
<br />
At the moment it does no harm, for affecting only few files. But be careful anyway, as a non-functional game (edge case) can be worse if English makes less or no hassle.<br />
<br />
I wish better internationalization ability will be offered officially. Great game like Xonotic ought to be known by global gamers — and let’s don’t forget Software Freedom.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Idea] “Knockout” gametype]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9510</link>
			<pubDate>Sun, 04 Sep 2022 16:11:52 +0000</pubDate>
			<dc:creator><![CDATA[NaitLee]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9510</guid>
			<description><![CDATA[There’s some kind of new gametype in my mind: a “pyramid” fight.<br />
I call it “Knockout” but may have better word.<br />
<br />
<hr class="mycode_hr" />
<br />
Several players will join the game.<br />
Only 2 players are simultaneously “released” and fight each other. Others will spectate.<br />
When one get fragged*, he/she is lost and will spectate. Now, announce the winner, and “release” the next player (reset the winner’s weapons too).<br />
Keep fighting. The game ends when the final winner is elected, the “King”!<br />
<br />
* For some sort of enjoy-ability, may  start with 200 HP + 200 Armor like Clan Arena.<br />
<br />
<hr class="mycode_hr" />
<br />
<br />
I put this to my wishlist, and maybe one day I can get time to work on such thing (not guaranteed though) (maybe with other “gametype” ideas around here).<br />
<br />
P.S. This is what a “duel” was in my mind, before I knowing about “duel is just 1v1 deathmatch <span style="font-style: italic;" class="mycode_i">and no more</span>”.<br />
(Poor kid like me can’t see a public server with ping &lt; 200, and never experienced playing there)]]></description>
			<content:encoded><![CDATA[There’s some kind of new gametype in my mind: a “pyramid” fight.<br />
I call it “Knockout” but may have better word.<br />
<br />
<hr class="mycode_hr" />
<br />
Several players will join the game.<br />
Only 2 players are simultaneously “released” and fight each other. Others will spectate.<br />
When one get fragged*, he/she is lost and will spectate. Now, announce the winner, and “release” the next player (reset the winner’s weapons too).<br />
Keep fighting. The game ends when the final winner is elected, the “King”!<br />
<br />
* For some sort of enjoy-ability, may  start with 200 HP + 200 Armor like Clan Arena.<br />
<br />
<hr class="mycode_hr" />
<br />
<br />
I put this to my wishlist, and maybe one day I can get time to work on such thing (not guaranteed though) (maybe with other “gametype” ideas around here).<br />
<br />
P.S. This is what a “duel” was in my mind, before I knowing about “duel is just 1v1 deathmatch <span style="font-style: italic;" class="mycode_i">and no more</span>”.<br />
(Poor kid like me can’t see a public server with ping &lt; 200, and never experienced playing there)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Where are Weapon skins?]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9458</link>
			<pubDate>Thu, 07 Jul 2022 18:26:00 +0000</pubDate>
			<dc:creator><![CDATA[NoClue]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9458</guid>
			<description><![CDATA[I would like to do some skinning myself however i don't seem to find any texture files is there any tutorial to follow about skinning? I kinda figured that the skins might be included in iqm? But i'm not sure if this is right. Setting up Blender just to do some skinning seems to be annoying as well since it doesn'T work by default with xonotic.]]></description>
			<content:encoded><![CDATA[I would like to do some skinning myself however i don't seem to find any texture files is there any tutorial to follow about skinning? I kinda figured that the skins might be included in iqm? But i'm not sure if this is right. Setting up Blender just to do some skinning seems to be annoying as well since it doesn'T work by default with xonotic.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Speech to text, or almost voice chat]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=9451</link>
			<pubDate>Thu, 30 Jun 2022 23:29:16 +0000</pubDate>
			<dc:creator><![CDATA[oblector]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=9451</guid>
			<description><![CDATA[I describe how to chat while playing, by <span style="font-style: italic;" class="mycode_i">speaking</span> (not typing), without the necessity of the recipients installing additional software. As it is a kludge, you may want to change the details.<br />
<br />
First install some speech to text software, such as <span style="font-style: italic;" class="mycode_i"><a href="https://github.com/ideasman42/nerd-dictation" target="_blank" rel="noopener" class="mycode_url">nerd-dictation</a></span>. Remember to download models for one or more languages.<br />
<br />
As far I know, for security Xonotic can not execute external programs. So we'll have a script for executing <span style="font-style: italic;" class="mycode_i">nerd-dictation</span> when some specific files in the <span style="font-family: mono;" class="mycode_font">.xonotic</span> directory get changed.<br />
<br />
Consider the following script (depending on inotify tools), which you may need to adapt, as it presupposes some directory names and that the models you have are named <span style="font-style: italic;" class="mycode_i">model-en</span> and <span style="font-style: italic;" class="mycode_i">model-pt</span>.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!/bin/bash<br />
<br />
set -eu<br />
<br />
xondir="&#36;HOME"/.xonotic/data/<br />
<br />
diagn() {<br />
  printf "%s&#92;n" "&#36;1" &gt;&gt; /dev/stderr<br />
}<br />
<br />
main() {<br />
  cd "&#36;xondir"<br />
<br />
  outfile="&#36;xondir"/voiceout<br />
  nerddic="&#36;HOME"/gits/nerd-dictation/nerd-dictation<br />
<br />
  while true ; do<br />
    diagn "Waiting signal..."<br />
    # Change the languages here:<br />
    file=&#36;(inotifywait --format %w -e modify en pt)<br />
    diagn "Received start signal: &#36;file"<br />
    echo -n &gt; "&#36;file"<br />
    {<br />
      model="&#36;HOME"/gits/nerd-dictation/model-&#36;file/<br />
      res=&#36;("&#36;nerddic" begin --numbers-as-digits --vosk-model="&#36;model" --output STDOUT | tr '&#92;n' ' ')<br />
      diagn "Writing text...: &#36;res"<br />
      printf "set nerddic_text &#92;"%s&#92;"" "&#36;res" &gt; "&#36;outfile"<br />
    } &amp;<br />
    diagn "Waiting stop signal..."<br />
    inotifywait -e modify voicestop<br />
    diagn "Received stop signal"<br />
    echo -n &gt; voicestop<br />
    "&#36;nerddic" "end";<br />
  done<br />
}<br />
<br />
main</code></div></div><br />
Inside the <span style="font-family: mono;" class="mycode_font">.xonotic/data/</span> directory create the empty files: <span style="font-family: mono;" class="mycode_font">voiceout</span>, <span style="font-family: mono;" class="mycode_font">voicestop</span>, <span style="font-family: mono;" class="mycode_font">en</span> and <span style="font-family: mono;" class="mycode_font">pt</span>.<br />
<br />
Add the following (or similar) to <span style="font-family: mono;" class="mycode_font">.xonotic/data/autoexec.cfg</span>:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>set nerddic_text "&lt;unitialized&gt;"<br />
<br />
set lang en<br />
<br />
alias voiceask "condump &#36;lang"<br />
<br />
alias voicestop "condump voicestop"<br />
<br />
alias voicerecstart "cprint Recording voice... (&#36;lang); voiceask"<br />
<br />
alias voiceexecres "exec voiceout"<br />
<br />
alias voicerecend "voicestop; cprint Processing, wait how much I do not know"<br />
<br />
alias voicesayres_ "say &#36;{nerddic_text}"<br />
<br />
alias voicesayres "voiceexecres; voicesayres_"<br />
<br />
alias voiceshowres_ "cprint &#36;{nerddic_text}"<br />
<br />
alias voiceshowres "voiceexecres; voiceshowres_"<br />
<br />
alias voiceteamsayres_ "say_team &#36;{nerddic_text}"<br />
<br />
alias voiceteamsayres "voiceexecres; voiceteamsayres_"</code></div></div><br />
Then start the bash script, and run Xonotic.<br />
<br />
Note that some files are modified with <span style="font-family: mono;" class="mycode_font">condump</span>, which writes the entire console history, a bit inefficient. Anyway, speech to text demands more power and time.<br />
<br />
You may change the language with the Xonotic console command <span style="font-family: mono;" class="mycode_font">lang pt</span>. You may bind some of these commands to some key presses; the command <span style="font-family: mono;" class="mycode_font">voiceshowres</span> shows the interpreted text before publishing.<br />
<br />
You may want to change the code to automatically send the text after recording; caution with race conditions.<br />
<br />
It seems to be slightly practical (not much in phrenetic games). I couldn't test it rigorously because I'm not a fluent anglophone, nor I have a quality microphone.<br />
<br />
Thanks for the attention. Suggestions? Also, I'm grateful for this marvelous game.]]></description>
			<content:encoded><![CDATA[I describe how to chat while playing, by <span style="font-style: italic;" class="mycode_i">speaking</span> (not typing), without the necessity of the recipients installing additional software. As it is a kludge, you may want to change the details.<br />
<br />
First install some speech to text software, such as <span style="font-style: italic;" class="mycode_i"><a href="https://github.com/ideasman42/nerd-dictation" target="_blank" rel="noopener" class="mycode_url">nerd-dictation</a></span>. Remember to download models for one or more languages.<br />
<br />
As far I know, for security Xonotic can not execute external programs. So we'll have a script for executing <span style="font-style: italic;" class="mycode_i">nerd-dictation</span> when some specific files in the <span style="font-family: mono;" class="mycode_font">.xonotic</span> directory get changed.<br />
<br />
Consider the following script (depending on inotify tools), which you may need to adapt, as it presupposes some directory names and that the models you have are named <span style="font-style: italic;" class="mycode_i">model-en</span> and <span style="font-style: italic;" class="mycode_i">model-pt</span>.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!/bin/bash<br />
<br />
set -eu<br />
<br />
xondir="&#36;HOME"/.xonotic/data/<br />
<br />
diagn() {<br />
  printf "%s&#92;n" "&#36;1" &gt;&gt; /dev/stderr<br />
}<br />
<br />
main() {<br />
  cd "&#36;xondir"<br />
<br />
  outfile="&#36;xondir"/voiceout<br />
  nerddic="&#36;HOME"/gits/nerd-dictation/nerd-dictation<br />
<br />
  while true ; do<br />
    diagn "Waiting signal..."<br />
    # Change the languages here:<br />
    file=&#36;(inotifywait --format %w -e modify en pt)<br />
    diagn "Received start signal: &#36;file"<br />
    echo -n &gt; "&#36;file"<br />
    {<br />
      model="&#36;HOME"/gits/nerd-dictation/model-&#36;file/<br />
      res=&#36;("&#36;nerddic" begin --numbers-as-digits --vosk-model="&#36;model" --output STDOUT | tr '&#92;n' ' ')<br />
      diagn "Writing text...: &#36;res"<br />
      printf "set nerddic_text &#92;"%s&#92;"" "&#36;res" &gt; "&#36;outfile"<br />
    } &amp;<br />
    diagn "Waiting stop signal..."<br />
    inotifywait -e modify voicestop<br />
    diagn "Received stop signal"<br />
    echo -n &gt; voicestop<br />
    "&#36;nerddic" "end";<br />
  done<br />
}<br />
<br />
main</code></div></div><br />
Inside the <span style="font-family: mono;" class="mycode_font">.xonotic/data/</span> directory create the empty files: <span style="font-family: mono;" class="mycode_font">voiceout</span>, <span style="font-family: mono;" class="mycode_font">voicestop</span>, <span style="font-family: mono;" class="mycode_font">en</span> and <span style="font-family: mono;" class="mycode_font">pt</span>.<br />
<br />
Add the following (or similar) to <span style="font-family: mono;" class="mycode_font">.xonotic/data/autoexec.cfg</span>:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>set nerddic_text "&lt;unitialized&gt;"<br />
<br />
set lang en<br />
<br />
alias voiceask "condump &#36;lang"<br />
<br />
alias voicestop "condump voicestop"<br />
<br />
alias voicerecstart "cprint Recording voice... (&#36;lang); voiceask"<br />
<br />
alias voiceexecres "exec voiceout"<br />
<br />
alias voicerecend "voicestop; cprint Processing, wait how much I do not know"<br />
<br />
alias voicesayres_ "say &#36;{nerddic_text}"<br />
<br />
alias voicesayres "voiceexecres; voicesayres_"<br />
<br />
alias voiceshowres_ "cprint &#36;{nerddic_text}"<br />
<br />
alias voiceshowres "voiceexecres; voiceshowres_"<br />
<br />
alias voiceteamsayres_ "say_team &#36;{nerddic_text}"<br />
<br />
alias voiceteamsayres "voiceexecres; voiceteamsayres_"</code></div></div><br />
Then start the bash script, and run Xonotic.<br />
<br />
Note that some files are modified with <span style="font-family: mono;" class="mycode_font">condump</span>, which writes the entire console history, a bit inefficient. Anyway, speech to text demands more power and time.<br />
<br />
You may change the language with the Xonotic console command <span style="font-family: mono;" class="mycode_font">lang pt</span>. You may bind some of these commands to some key presses; the command <span style="font-family: mono;" class="mycode_font">voiceshowres</span> shows the interpreted text before publishing.<br />
<br />
You may want to change the code to automatically send the text after recording; caution with race conditions.<br />
<br />
It seems to be slightly practical (not much in phrenetic games). I couldn't test it rigorously because I'm not a fluent anglophone, nor I have a quality microphone.<br />
<br />
Thanks for the attention. Suggestions? Also, I'm grateful for this marvelous game.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Xonotic reboot/port in modern engine]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=8847</link>
			<pubDate>Mon, 27 Sep 2021 12:18:43 +0000</pubDate>
			<dc:creator><![CDATA[ballerburg9005]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=8847</guid>
			<description><![CDATA[Please tell us shortly if you are interested in porting Xonotic to a modern Engine, what your skills are and how much time you could invest initially and on the long run.<br />
<br />
I think we can all agree that there is no good strategy to go forward with this. The two options I see are:<br />
<ol type="1" class="mycode_list"><li>Xonotic "Quantum" (stealing all the old assets, porting just the bare minimum code to get 1:1 gameplay, breaking all the mods and implementing only like 5% of the cvars)<br />
</li>
<li>QuakeC wrapper (or semi-atomatic converter) to transform at least some legacy code from portions of source code into modern code or at least run it as binary<br />
</li>
</ol>
<br />
Which engine? Godot 4 seems the only good choice to me.<br />
<br />
What comes next? The new Xonotic will essentially evolve into Fortnite on the long run.<br />
<br />
Also I think we should name the first 1:1 port "Yonotic". And when it becomes more like Fortnite, we name it "Zoonotic" and it will default to fully customizable furry player models.]]></description>
			<content:encoded><![CDATA[Please tell us shortly if you are interested in porting Xonotic to a modern Engine, what your skills are and how much time you could invest initially and on the long run.<br />
<br />
I think we can all agree that there is no good strategy to go forward with this. The two options I see are:<br />
<ol type="1" class="mycode_list"><li>Xonotic "Quantum" (stealing all the old assets, porting just the bare minimum code to get 1:1 gameplay, breaking all the mods and implementing only like 5% of the cvars)<br />
</li>
<li>QuakeC wrapper (or semi-atomatic converter) to transform at least some legacy code from portions of source code into modern code or at least run it as binary<br />
</li>
</ol>
<br />
Which engine? Godot 4 seems the only good choice to me.<br />
<br />
What comes next? The new Xonotic will essentially evolve into Fortnite on the long run.<br />
<br />
Also I think we should name the first 1:1 port "Yonotic". And when it becomes more like Fortnite, we name it "Zoonotic" and it will default to fully customizable furry player models.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to create a command - DarkPlaces engine C programming]]></title>
			<link>https://forums.xonotic.org/showthread.php?tid=8531</link>
			<pubDate>Sat, 27 Mar 2021 22:26:50 +0000</pubDate>
			<dc:creator><![CDATA[LegendGuard]]></dc:creator>
			<guid isPermaLink="false">https://forums.xonotic.org/showthread.php?tid=8531</guid>
			<description><![CDATA[Hello, all! <img src="https://forums.xonotic.org/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
It's the first time I've touched engine code to test something simple.<br />
<span style="font-style: italic;" class="mycode_i">IMPORTANT NOTE: only modifies engine part.</span><br />
<br />
1. Open a file called <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial;" class="mycode_font">console.c</span></span> in <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> folder<br />
<br />
2. Write the following in the line 842 (<span style="font-style: italic;" class="mycode_i">NOTE: This line is specific, if you see something not empty, don't do. The code may change in some time due to the development, so don't write inside the functions, write it outside the functions</span>)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//LegendGuard first time using engine code 27-03-2021<br />
/*<br />
================<br />
Con_Hello_f<br />
================<br />
*/<br />
static void Con_Hello_f (void)<br />
{<br />
   Con_Printf("HELLO XONOTIC! I'm LegendGuard, touching console code in the engine! :D&#92;n");<br />
   return;<br />
}</code></div></div><br />
<br />
3. Write the following line to call the command function in the line 917 more or less where says "// register our commands":<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Cmd_AddCommand ("hello", Con_Hello_f, "output a hello message");</code></div></div><br />
<br />
4. Save <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial;" class="mycode_font">console.c</span></span> file and go to console MSYS2 (as I use Windows)<br />
<br />
<br />
<br />
5. In the console, while you're in <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> directory, write and execute  <span style="font-family: Courier New;" class="mycode_font">make sdl-release </span><br />
(optionally, you can use  <span style="font-family: Courier New;" class="mycode_font">./all compile -r</span><span style="font-family: Arial;" class="mycode_font">   when you're in <span style="font-weight: bold;" class="mycode_b">xonotic </span>directory but <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u"><span style="font-style: italic;" class="mycode_i">IT'S NOT RECOMMENDED</span></span></span>, since it compiles all contents and is slow to check the results of your code in the engine)</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">NOTE: about  <span style="font-family: Courier New;" class="mycode_font">make</span></span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">sdl-release</span> = xonotic-sdl</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">sv-release</span> = xonotic-dedicated</span><br />
<span style="font-style: italic;" class="mycode_i">You can compile graphical with glx or sdl interface or non graphical dedicated good for servers without a windowing system.</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">There are differences:</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">make sdl-release</span>    uses sdl2-config (in my system is version 2.0.12)  (uses -ljpeg)   - USE THIS COMMAND IN <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> DIRECTORY -</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">./all compile sdl</span>   uses xonotic/misc/builddeps/win64/sdl/bin/sdl2-config (version 2.0.10)  (doesn't use -ljpeg)   - USE THIS COMMAND IN <span style="font-weight: bold;" class="mycode_b">xonotic </span>DIRECTORY -</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">You can see more info in the </span><span style="font-weight: bold;" class="mycode_b"><a href="https://gitlab.com/xonotic/darkplaces/-/blob/div0-stable/makefile.inc#L307" target="_blank" rel="noopener" class="mycode_url"><span style="font-style: italic;" class="mycode_i">makefile</span></a></span><br />
<br />
6. After compiled successfully, go to <span style="font-weight: bold;" class="mycode_b">xonotic</span> directory and run the game with <span style="font-family: Courier New;" class="mycode_font">./all run</span><br />
<br />
<br />
7. Press Shift + Esc, type  <span style="font-family: Courier New;" class="mycode_font">hello</span>  and ENJOY!!!  <img src="https://forums.xonotic.org/images/smilies/cool.png" alt="Cool" title="Cool" class="smilie smilie_3" /> <br />
<br />
<img src="https://cdn.discordapp.com/attachments/599372482318958601/825495229447929898/darkplacesconsole.jpg" loading="lazy"  alt="[Image: darkplacesconsole.jpg]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Hello, all! <img src="https://forums.xonotic.org/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
It's the first time I've touched engine code to test something simple.<br />
<span style="font-style: italic;" class="mycode_i">IMPORTANT NOTE: only modifies engine part.</span><br />
<br />
1. Open a file called <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial;" class="mycode_font">console.c</span></span> in <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> folder<br />
<br />
2. Write the following in the line 842 (<span style="font-style: italic;" class="mycode_i">NOTE: This line is specific, if you see something not empty, don't do. The code may change in some time due to the development, so don't write inside the functions, write it outside the functions</span>)<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//LegendGuard first time using engine code 27-03-2021<br />
/*<br />
================<br />
Con_Hello_f<br />
================<br />
*/<br />
static void Con_Hello_f (void)<br />
{<br />
   Con_Printf("HELLO XONOTIC! I'm LegendGuard, touching console code in the engine! :D&#92;n");<br />
   return;<br />
}</code></div></div><br />
<br />
3. Write the following line to call the command function in the line 917 more or less where says "// register our commands":<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Cmd_AddCommand ("hello", Con_Hello_f, "output a hello message");</code></div></div><br />
<br />
4. Save <span style="font-weight: bold;" class="mycode_b"><span style="font-family: Arial;" class="mycode_font">console.c</span></span> file and go to console MSYS2 (as I use Windows)<br />
<br />
<br />
<br />
5. In the console, while you're in <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> directory, write and execute  <span style="font-family: Courier New;" class="mycode_font">make sdl-release </span><br />
(optionally, you can use  <span style="font-family: Courier New;" class="mycode_font">./all compile -r</span><span style="font-family: Arial;" class="mycode_font">   when you're in <span style="font-weight: bold;" class="mycode_b">xonotic </span>directory but <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u"><span style="font-style: italic;" class="mycode_i">IT'S NOT RECOMMENDED</span></span></span>, since it compiles all contents and is slow to check the results of your code in the engine)</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">NOTE: about  <span style="font-family: Courier New;" class="mycode_font">make</span></span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">sdl-release</span> = xonotic-sdl</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">sv-release</span> = xonotic-dedicated</span><br />
<span style="font-style: italic;" class="mycode_i">You can compile graphical with glx or sdl interface or non graphical dedicated good for servers without a windowing system.</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">There are differences:</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">make sdl-release</span>    uses sdl2-config (in my system is version 2.0.12)  (uses -ljpeg)   - USE THIS COMMAND IN <span style="font-weight: bold;" class="mycode_b">xonotic/darkplaces</span> DIRECTORY -</span><br />
<span style="font-style: italic;" class="mycode_i"><span style="font-family: Courier New;" class="mycode_font">./all compile sdl</span>   uses xonotic/misc/builddeps/win64/sdl/bin/sdl2-config (version 2.0.10)  (doesn't use -ljpeg)   - USE THIS COMMAND IN <span style="font-weight: bold;" class="mycode_b">xonotic </span>DIRECTORY -</span><br />
<br />
<span style="font-style: italic;" class="mycode_i">You can see more info in the </span><span style="font-weight: bold;" class="mycode_b"><a href="https://gitlab.com/xonotic/darkplaces/-/blob/div0-stable/makefile.inc#L307" target="_blank" rel="noopener" class="mycode_url"><span style="font-style: italic;" class="mycode_i">makefile</span></a></span><br />
<br />
6. After compiled successfully, go to <span style="font-weight: bold;" class="mycode_b">xonotic</span> directory and run the game with <span style="font-family: Courier New;" class="mycode_font">./all run</span><br />
<br />
<br />
7. Press Shift + Esc, type  <span style="font-family: Courier New;" class="mycode_font">hello</span>  and ENJOY!!!  <img src="https://forums.xonotic.org/images/smilies/cool.png" alt="Cool" title="Cool" class="smilie smilie_3" /> <br />
<br />
<img src="https://cdn.discordapp.com/attachments/599372482318958601/825495229447929898/darkplacesconsole.jpg" loading="lazy"  alt="[Image: darkplacesconsole.jpg]" class="mycode_img" />]]></content:encoded>
		</item>
	</channel>
</rss>