ec- / quake3e Goto Github PK
View Code? Open in Web Editor NEWImproved Quake III Arena engine
License: GNU General Public License v2.0
Improved Quake III Arena engine
License: GNU General Public License v2.0
Part of PointRelease 1.27 (or was it 1.29) was the ability to play videos ingame from map. This was part of the Team Arena maps. There are a few custom maps as well, iirc.
Bothe Q3a renderers (GL1 and Vulkan) seems to have trouble to play those videos.
As far as the GL renderer is concerned it seems the 'videoMap' and the 'lighmap' is somehow mixing up, or interfere with each other.
Here is a screenshot of what happens to GL1 renderer if you enter an area where a 'videoMap' shader should be seen:
...and here is how 'videoMaps' look in Vulkan:
The best way to reproduce this is by loading maps from Team Arena (for example mpteam3 or mpteam5) or any custom map that ships with an ingame video.
Scanning for servers on the local network...
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
Sys_SendPacket: Cannot assign requested address
127.0.0.1:27960 resolved to 127.0.0.1:27960
I added a simple but effective enhancement to a copy of the source code that I think would be beneficial to everyone. So I am putting my code snippet here so you can consider if you want to incorporate it or not.
The feature is auto-nudge which is basically automatic time nudge that uses your average ping as the time nudge value. (It is also not limited by the -30 to 30 nudge range). It is so simple to implement I'm surprised it was not already a feature. In my testing I am able to play competitively with even 150ms ping (and even better with lower).
I'm not sure if there are legitimate reasons why you may not want to implement this (people might consider it unfair advantage??). It just helps you play unlagged, so if anything I think it just helps equal the playing field for people with higher ping vs people with lower ping. Or maybe the results wont be as good for other people (different connections), so I don't know. I leave it up to you but works great for me.
First you need to define a new client variable called: cl_autoNudge (integer)
Then add the following function to cl_cgame.c
/*
==================
CL_AvgPing
Calculates Average Ping from snapshots in buffer. Used by AutoNudge.
==================
*/
int CL_AvgPing( void ) {
int avgPing = 0;
int count = 0;
int i;
for ( i = 0 ; i < PACKET_BACKUP ; i++ ) {
if ( cl.snapshots[i].ping > 0 && cl.snapshots[i].ping < 999 ) {
avgPing += cl.snapshots[i].ping;
count++;
}
}
if ( count > 0 )
avgPing = (int)((avgPing / count) + 0.5); // round
return avgPing;
}
Last modify function CL_SetCGameTime function and modify the time nudge portion of logic:
// cl_timeNudge is a user adjustable cvar that allows more
// or less latency to be added in the interest of better
// smoothness or better responsiveness.
if ( cl_autoNudge->integer == 1 )
cl.serverTime = cls.realtime + cl.serverTimeDelta + CL_AvgPing();
else
cl.serverTime = cls.realtime + cl.serverTimeDelta - cl_timeNudge->integer;
That's it. Very simple.
I also made a few additional enhancements pertaining to console (unrelated). But another feature which I think would be beneficial to all is cl_infoLevel (0 = All, 1 = Warnings & Errors, 2 = Errors Only), which controls the verbosity of the output to client console.
Hello, I would like to make a website for you,
We can host it on our server and stuff.
I want to support this project in any way because it's technically and practically better than ioQuake3 now.
Write your ideas here!
I've been working on this project for several years now. I've been trying to propose this for ioquake3, but so far it doesn't seem to have gotten much interest, so I thought I'd try here.
Here's a general overview of the project. You can also check the readme and design doc, if you haven't seen them already.
In this filesystem the ID paks have precedence over all other pk3s in baseq3, compared to the original behavior where pk3s alphabetically higher than 'p' override them. Permanent mod pk3s can still be used, but need to be moved to the 'basemod' folder instead of baseq3.
This change makes the game more stable against unwanted overrides from arbitrary pk3s, including pk3s downloaded from servers. It gives the user more control because only the pk3s they specifically select by placing them in basemod (or that are part of an fs_game mod) have override privileges.
Certain file precedence behavior has been adjusted to better handle conflict situations and respect and the intentions of the ID pak precedence policy. These changes have little to no practical compatibility impact in normal usage, but do prevent bugs caused by badly designed pk3s. The following examples show the main precedence changes and their motivation.
Scenario: The shader "console" is defined in gfx.shader in pak0.pk3. Suppose "ql_mapconversion.pk3" defines its own "console" shader in "shadersfromquakelive.shader". Due to quirks in the standard Q3 engine, shader precedence (for uniquely named .shader files) is the opposite of normal filesystem precedence. Therefore the shaders in pak0.pk3 do not get overridden and this map conversion 'works' because q > p. However, if somebody decides to rename the map pk3 file to "mapconversion.pk3", or the user's ID pak was renamed to "zpak0.pk3", or similarly prioritized by the engine, incompatible shaders would probably be loaded and put the game in a broken state.
Solution: Shaders follow the same conventions as other assets regardless of the name of the .shader file. This ensures the ID pak, mod/basemod precedence, and similar policies work as intended instead of potentially having the opposite effect. Due to the ID pak precedence policy, maps with excess shaders such as the one described continue to work without risk of destabilizing the game.
Scenario: A map pk3 contains certain shaders/textures. It is a popular map, and other maps copy assets from this map. An amateur map author decides they want to modify one of the assets in their map, but they leave the same name, causing the change to bleed into the original map as well when their pk3 is present.
Solution: The current map pk3 has precedence over other arbitrary pk3s in baseq3. This prevents a lot of conflict headaches for map authors, and even allows some 'mod' maps that modify assets without changing the map bsp to functionally coexist with the original map (e.g. padshop/adultshop). This behavior applies only to regular maps in baseq3, not maps from an ID pak or mod pk3.
Scenario: The shader "textures/base_trim/basemetalsupport" is not explicitly defined in a shader file, but it can be used by maps to reference the jpg image file of that name in pak0.pk3. Suppose a map author decides to put an explicit shader for this image in their pk3 to do some special effect. In the standard filesystem, the explicit shader will always override the image and the change will bleed into all maps.
Solution: Shaders continue to override images in most cases, because there are valid use cases for this. However, images in the ID paks or current map are special cases and can be protected from being overridden by external shaders.
Scenario: If a map pk3 includes "textures/base_trim/basemetalsupport" as a tga file, it would override the version in pak0.pk3 in spite of pk3 name or the ID pak policy because the renderer traditionally searches for tgas ahead of jpgs.
Solution: Precedence is applied regardless of image type, so a jpg in an ID pak or mod can override a tga in baseq3. This ensures filesystem precedence policies work as intended when multiple image types are involved. Similar behavior applies to sound file types as well.
This filesystem is designed from the ground up for high performance. There are several load time optimizations, including caching pk3 index data (matched by size and timestamp) to a file for faster startup, and avoiding the need to reindex the filesystem between maps for faster map load times.
Here are some benchmarks comparing my ioquake3 filesystem port versus current quake3e with different numbers of map pk3s installed in baseq3.
Test methodology:
Results:
configuration | cold start | warm start | q3dm17(1) | q3dm17(2) | q3dm7(1) | q3dm7(2) |
---|---|---|---|---|---|---|
clean ioq3 | 302 ms | 196 ms | 581 ms | 296 ms | 535 ms | 462 ms |
clean q3e | 378 ms | 202 ms | 559 ms | 457 ms | 639 ms | 601 ms |
250pk ioq3 | 1286 ms | 213 ms | 595 ms | 310 ms | 555 ms | 480 ms |
250pk q3e | 1536 ms | 363 ms | 752 ms | 632 ms | 833 ms | 778 ms |
500pk ioq3 | 2177 ms | 241 ms | 601 ms | 320 ms | 545 ms | 490 ms |
500pk q3e | 2804 ms | 538 ms | 985 ms | 876 ms | 1120 ms | 1053 ms |
1000pk ioq3 | 2220 ms | 239 ms | 609 ms | 331 ms | 570 ms | 486 ms |
1000pk q3e | 5049 ms | 838 ms | 1333 ms | 1185 ms | 1469 ms | 1397 ms |
4000pk ioq3 | 2054 ms | 280 ms | 637 ms | 350 ms | 583 ms | 515 ms |
4000pk q3e | 19586 ms | 4201 ms | 6580 ms | 5257 ms | 5010 ms | 4900 ms |
Notes:
Functional features:
Implementation features:
I'm proposing this filesystem as a possible candidate for Quake3e because it seems to fit with existing Quake3e design priorities; i.e. an emphasis on practical Quake 3 multiplayer, map support, and performance improvements.
If you would like, I'm willing to assist in porting my filesystem to Quake3e, including helping with support and technical issues and perhaps making a prototype integration. Based on a brief review of the filesystem code in Quake3e I think the port should be straightforward.
BUG: After a while vulkan crashes (dedected after loading map lun3dm5).
SYSTEM: Windows 8.1, NV GTX 1060 (436.48). Q3e compiled with CygWin.
Here is the output:
RE_Shutdown( 0 )
...
----- Client Shutdown (Server fatal crashed: Vulkan: error code -4 returned by qvkQueueSubmit( vk.queue, 1, &submit_info, vk.cmd->rendering_finished_fence )) -----
Closing SDL audio playback device...
SDL audio playback device closed.
SDL audio shut down.
RE_Shutdown( 2 )
----- Client Shutdown (recursive error after: Vulkan: error code -4 returned by qvkQueueSubmit( vk.queue, 1, &submit_info, vk.cmd->rendering_finished_fence )) -----
WARNING: Recursive CL_Shutdown()
recursive error after: Vulkan: error code -4 returned by qvkQueueSubmit( vk.queue, 1, &submit_info, vk.cmd->rendering_finished_fence )
Some times I accidentaly overwrite demos when using the /record command, it also happens with the auto record functinoality in CPMA when there's no date in the name of the demo.
It would be very helpful if Quake3e had a built in function that added a number sequence at the end of the name for each demo so that you never accidentally overwrite demos.
I believe this is happening since caf6b5d
Press the right alt key, wait a few seconds then press enter like say, to commit your text in the console and it will cause fullscreen toggle.
US layout
A buffer overflow scenario can be created within cmd.c. The cmd_args
variable within the char *Cmd_Args
function is vulnerable to this attack.
The cmd_args
variable assigns all the arguments within argv to a single variable, space delimited.
Line 421 in 4660de6
This variable has allotted 1024 bytes for characters as displayed below:
Quake3e/code/qcommon/q_shared.h
Line 221 in 41aef4a
If we provide arguments with length > 2000, this variable should overflow and cause a crash.
Disregard.
Figure I'd check here but is this compatible with Arch Linux in particular? Looking to install Quake3e and having a tough time getting started.
/followpowerup is inconsistent. It seems to get bugged when two flags are held concurrently. Players who are coach on a team don't get the problem probably due to not following opposing team powerups. I could provide demos to help if needed.
I'm having issues running Q3 in fullscreen, both in the base game and CPMA mod. Until recently I skipped around the issue by using i3wm's fullscreen mode and killing any running compositor. Since switching over to gnome I can no longer do that, meaning I have to run Quake 3 in windowed mode for now.
Running the base game in fullscreen will span the game across both monitors (r_mode 19 for 1920x1080 is set), and doing the same in CPMA will render the game in a tiny box on the bottom left of my first monitor. I've got no idea why it's different between the two, and I've never figured out why it happens in the first place.
I have no idea if this is an easy or difficult fix for someone with knowledge of the engine, or if I'm doing something wrong to cause the issue for myself. If any more info is needed for a potential fix, please let me know.
Using Manjaro Linux (based on arch) 64 bit and i can only run ./quake3e
when i run a jackserver (for example with qjackctl
) first. Seems odd and i'd like to know whether this is intentional.
Thanks for the info!
The output when i run ./quake3e.x64
:
21:37 ~/Games/quake3❱ ./quake3e.x64
Q3 1.32e linux-x86_64 Nov 29 2019
----- FS_Startup -----
...loaded in 65 milliseconds
----------------------
21860 files in 180 pk3 files
execing default.cfg
execing q3config.cfg
com_zoneMegs will be changed upon restarting.
couldn't exec autoexec.cfg
Hunk_Clear: reset the hunk ok
...detecting CPU, found 64-bit GenuineIntel w/ SSE4.1
----- Client Initialization -----
----- Initializing Renderer ----
-------------------------------
----- Client Initialization Complete -----
----- R_Init -----
...initializing QGL
...loading 'libGL.so.1' : succeeded
...RandR extension version 1.6 detected.
...current monitor: 1440x900@0,0 VGA1
...DGA extension version 2.0 detected.
Initializing display
...setting mode -1: 1440 900
...using desktop display mode
ATTENTION: default value of option vblank_mode overridden by environment.
ATTENTION: option value of option vblank_mode ignored.
Using 8/8/8 Color bits, 24 depth, 8 stencil display.
...using GLX_EXT_swap_control
Initializing OpenGL extensions
...ignoring GL_EXT_texture_compression_s3tc
...using GL_EXT_texture_env_add
...using GL_ARB_multitexture
...using GL_EXT_compiled_vertex_array
...ignoring GL_EXT_texture_filter_anisotropic
...using ARB vertex/fragment programs
...using ARB vertex buffer objects
...using xrandr gamma extension
GL_VENDOR: Intel Open Source Technology Center
GL_RENDERER: Mesa DRI Intel(R) Haswell Mobile
GL_VERSION: 3.0 Mesa 19.2.4
GL_MAX_TEXTURE_SIZE: 16384
GL_MAX_TEXTURE_UNITS_ARB: 8
PIXELFORMAT: color(24-bits) Z(24-bit) stencil(8-bits)
MODE: -2, 1440 x 900 fullscreen hz:N/A
multitexture: enabled
compiled vertex arrays: enabled
texenv add: enabled
compressed textures: disabled
GAMMA: hardware w/ 0 overbright bits
rendering primitives: single glDrawElements
texturemode: GL_LINEAR_MIPMAP_NEAREST
texture bits: 32
picmip: 0
Initializing Shaders
----- finished R_Init -----
------ Initializing Sound ------
...trying MMAP mode
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Playback device open error: No such file or directory
Received signal 11, exiting...
----- Client Shutdown (Signal caught (11)) -----
RE_Shutdown( 2 )
...shutting down QGL
...unloading OpenGL DLL
-----------------------
When you jump around servers a lot it would be nice to able to just type /followip or something to connect to the last IP or server address someone wrote in console.
Thanks for your hard work!
Compiling with Ubuntu 16.04 and GCC 5.4.0 gives some benign warnings. I was able to silence the warnings with a short error message if the writes are not successful. Thank you.
code/unix/unix_main.c: In function ‘tty_Back’:
code/unix/unix_main.c:194:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write( STDOUT_FILENO, &key, 1 );
^
code/unix/unix_main.c:196:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write( STDOUT_FILENO, &key, 1 );
^
code/unix/unix_main.c:198:2: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write( STDOUT_FILENO, &key, 1 );
^
code/unix/unix_main.c: In function ‘tty_Show’:
code/unix/unix_main.c:242:3: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void)write( STDOUT_FILENO, "]", 1 ); // -EC-
^
code/unix/unix_main.c:246:5: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void)write( STDOUT_FILENO, tty_con.buffer + i, 1 );
^
code/unix/unix_main.c: In function ‘Sys_ConsoleInput’:
code/unix/unix_main.c:576:6: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void)write( STDOUT_FILENO, "\n]", 2 );
^
code/unix/unix_main.c:634:6: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void)write( STDOUT_FILENO, "\ec]", 3 );
^
code/unix/unix_main.c:637:7: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
(void)write( STDOUT_FILENO, tty_con.buffer, tty_con.cursor );
^
code/unix/unix_main.c:653:4: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result [-Wunused-result]
write( STDOUT_FILENO, &key, 1 );
^
Hello!
Not quite an issue to report, but was curious about the following stats reporting during a Skirmish bot match played locally:
Whenever using RTSS i.e. Riva Tuner Statistics Server (with MSI Afterburner) to cap the framerate of Quake3e (either OGL or Vulkan), the reported ping for my character is 8ms (if capping at 120) or 16ms (if capping at 60) - so equivalent to the cost of a frame at said frame cap.
If not using any external framerate limiter then the Ping value is 0.
This would be useful to me personally on a bot i'm working on for a .log parser and i don't think it would hurt anything, the request is to make /tell grab the user id if no id is specified.
For example, right now if tell is used without an active id it doesn't output on the .log, doesn't go past the client at all so the solution im using now is having the client use /tell selfID message, My request would automate this part.
If is something your willing to do Cyrax but have no time in doing so let me know and i can find someone to provide the code change that i will send to you for review.
I was getting the following error when cross-compiling for Windows on Linux:
code/qcommon/net_ip.c:42:23: fatal error: Wspiapi.h: No such file or directory
https://github.com/ec-/Quake3e/blob/master/code/qcommon/net_ip.c#L42
I changed the header filename to all lowercase and that fixed the issue. Thank you.
where is the makefile to be able to compile in windows?
I am using visual studio 2017. When I compile I get the following error:
1>------ Build started: Project: quake3e, Configuration: Release x64 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(1198,5): warning MSB8012: TargetPath(M:\ztemp\Quake3e Sep\Quake3e-master\code\win32\msvc2017.\output\quake3e.exe) does not match the Linker's OutputFile property value (M:\ztemp\Quake3e Sep\Quake3e-master\code\win32\msvc2017\output\quake3e.x64.exe). This may cause your project to build incorrectly. To correct this, please make sure that
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(1200,5): warning MSB8012: TargetName(quake3e) does not match the Linker's OutputFile property value (quake3e.x64). This may cause your project to build incorrectly. To correct this, please make sure that
1> Creating library .\output\quake3e.lib and object .\output\quake3e.exp
1>cl_main.obj : error LNK2019: unresolved external symbol CL_SaveJPGToBuffer referenced in function CL_InitRef
1>cl_main.obj : error LNK2019: unresolved external symbol CL_SaveJPG referenced in function CL_InitRef
1>cl_main.obj : error LNK2019: unresolved external symbol CL_LoadJPG referenced in function CL_InitRef
1>.\output\quake3e.x64.exe : fatal error LNK1120: 3 unresolved externals
1>Done building project "quake3e.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 5 up-to-date, 0 skipped ==========
Something about the jpg stuff is causing problems, so I removed the jpg screenshot ability, commenting out CL_SaveJPGToBuffer, CL_SaveJPG, and part of the CL_LoadJPG. It compiles fine with no errors. But then the game crashes on load. Here is what the console says before it quickly exits:
If loading many bots into any map, the game freezes.
This only happens when the engine is compiled with USE_VULKAN = 1.
When compiling the current code with USE_VULKAN = 0 (the default) the crash doesn't happen, hence my suspicion that Vulkan causes the bug.
Best way to reproduce the crash, is by compiling the engine with USE_VULKAN = 1.
Than load any map you want, add more and more bots until the game will freeze. Eventually you will get a somehow 'chopped up' screen.
WARNING: you can't quit Q3a regulary.
Currently I'm not sure if the amount of bots is of some importance.
Specifications:
Win 8.1 (64-bit)
NV GT1060
Compiled from latest source, unmodified, with Cygwin.
LD build/release-linux-x86_64/quake3e.x64
/usr/bin/ld: build/release-linux-x86_64/client/sdl_glimp.o: in function `GLimp_Init':
sdl_glimp.c:(.text+0xc17): undefined reference to `r_ignorehwgamma'
/usr/bin/ld: build/release-linux-x86_64/client/sdl_glimp.o: in function `VKimp_Init':
sdl_glimp.c:(.text+0xd9b): undefined reference to `r_ignorehwgamma'
/usr/bin/ld: build/release-linux-x86_64/client/sdl_gamma.o: in function `GLimp_SetGamma':
sdl_gamma.c:(.text+0x90): undefined reference to `r_ignorehwgamma'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:1037: build/release-linux-x86_64/quake3e.x64] Error 1
make[2]: Leaving directory '/home/user/src/Quake3e'
make[1]: *** [Makefile:666: targets] Error 2
make[1]: Leaving directory '/home/user/src/Quake3e'
make: *** [Makefile:624: release] Error 2
There is a libre toolchain for the PS3, https://github.com/ps3dev/ps3toolchain
One obstacle I've come across when trying to compile ioQuake3 with it was the toolchain's spotty ipv6 support, more here ps3dev/ps3toolchain#78
How hard would it be to divorce ipv6 support from Quake3e?
Hi, Could you push updates to Github Releases too?
It's a little easier to keep up with changes & grab downloads over checking the forum.
Cheers and thanks for q3e!
edit: ty
Hello to everyone!
It is possible to add support of another CPU architectures in Quake3e like it was done in OpenArena (https://github.com/OpenArena/engine) or ioquake3 (https://github.com/ioquake/ioq3)?
When I tried to add initial support of MCST e2k (Elbrus 2000) architecture, I found that you are using assembler in the Quake3e/code/qcommon/common.c file. This complicates porting 😄
My previous PR's in OpenArena and ioquake3:
Notice in /code/qcommon/q_shared.h
it is written:
#define CVAR_PROTECTED 0x2000 // prevent modifying this var from VMs or the server
VMs can however modify vars marked with CVAR_PROTECTED
. Below is a proof of concept that modifies vm_cgame
. This would allow QVM mods to break out of the VM sandbox if they manage to ship with/procure a malicious shared lib (ie. a server sending a dll inside pk3 download).
Proof of concept: zzz-prot-poc.zip
.zip
extension to .pk3
test
)+set fs_game test +set vm_cgame 2
)/map q3dm1
)vm_cgame
change to 0 after a few seconds :)The driving code behind the proof of concept, that I stuck into the beginning of CG_Init
:
char var[256];
int vm_cgame;
trap_Cvar_VariableStringBuffer( "vm_cgame", var, sizeof( var ) );
vm_cgame = atoi(var);
CG_Printf("^1VM_CGAME IS: %d\n", vm_cgame);
if(vm_cgame != 0) {
trap_SendConsoleCommand("seta vm_cgame \"0\"; wait 512;vid_restart\n");
}
Useful for development
Have folder with ".pk3dir" at end and it will be treated like a pk3 file but is just a folder within mod folder.
Hi Dev(s), i am trying to get the far away curved surfaces to look smooth. So i put r_lodcurveerror=10000 (max value) in autoconfig.cfg but it isn't working.
It is also an issue in another ports like ioquake3, cnq3. So maybe it is vanilla quake 3 issue but it is still a bug/ unintended behaviour nonetheless, so can u fix this issue.
I have also made a issue at ioquake3's git:
ioquake/ioq3#383
I've tried cmake .
but it just tells me:
CMake Error at code/renderer/CMakeLists.txt:1 (add_library):
Cannot find source file:
tr_font.c
which is true, the file isn't there. Am I missing something?
OS: Fedora 31
Graphics card: GeForce GTX 1080, NVIDIA proprietary driver 440.64
Quake3e version: Git b5ab067
When compiling Quake3e using make USE_VULKAN=1
, I get the following error when starting it:
Q3 1.32e linux-x86_64 Mar 13 2020
----- FS_Startup -----
...found 15 cached paks
...loaded in 1 milliseconds
----------------------
6313 files in 15 pk3 files
execing default.cfg
execing q3config.cfg
com_zoneMegs will be changed upon restarting.
couldn't exec autoexec.cfg
Hunk_Clear: reset the hunk ok
...detecting CPU, found 64-bit GenuineIntel w/ SSE4.1
----- Client Initialization -----
----- Initializing Renderer ----
-------------------------------
----- Client Initialization Complete -----
----- R_Init -----
...initializing QVK
...loading 'libvulkan.so' : failed
...shutting down QVK
----- Client Shutdown (Server fatal crashed: GLW_StartVulkan() - could not load Vulkan subsystem
) -----
RE_Shutdown( 2 )
...shutting down QVK
-----------------------
Sys_Error: GLW_StartVulkan() - could not load Vulkan subsystem
Other Vulkan applications and games (such as GZDoom) work fine on this machine. Quake3e's OpenGL renderer also works.
Seems like better format to use for readability in text format rather than having to open a browser.
For example rcon map [tab] you would expect it to list the local maps but it does nothing.
should improve the client code by merging part of this code
https://github.com/ry4096/znudge
ec say> Well, pretty much every improvement that increases FPS (for example) might be considered as unfair too so I don't see any problems here, it is a nice feature
https://github.com/ec-/Quake3e/issues/10
many of us are from other countries and playing with high ping is annoying,
you are still working on your engine and that is very interesting so you should improve the experience of us players with high ping
Currently I'm not sure if this is an engine or a baseq3a issue:
Sometimes bots have their 'Disconnection' sprite (icon) appearing over their head (instead of their talk balloon?).
It's not clear to me if they are really disconnected for a milisecond, or if this is just a graphical glitch of Q3e/baseq3a.
I thought it would be the best to mention this issue here.
The issue is easy to reproduce: Start any map where you can spectate lot of spawnpoints at once, add lots of bots and watch them spawn.
Here are some screenshots:
I'm unsure how this is done but in Quake Live, r_picmip only applies to world textures & models (iirc). Also, please forgive my terminology here..
Affected by r_picmip:
world textures
world models
Unaffected by r_picmip:
player models
weapon models (world & firstperson)
weapon particle effects (rocket/grenade explosions etc.)
other particles (flags etc.)
The benefit of this is improved visibility while keeping the particles looking original and no longer obscuring your vision (by being picmip'd).
So my request would be either to change r_picmip to function in this manner or have the option to enable this.
Thanks for reading.
When building the windows version on Linux (precisely, Debian) using MingW, there is a need to change the case of "#include <VersionHelpers.h>" in "code/win32/win_snd.c" to "#include <versionhelpers.h>".
. Output color text from white to pink like regular client /tell so it can be better seen within all the other white text
. If possible keep console: instead of console_tell:
Are they going to stay the same for the foreseeable future? I'm about to package this engine for Gentoo in src_prepare-overlay :)
Playing with this on my OpenBSD/amd64 workstation, build debug release with -DDEBUG_VM defined as well:
#0 0x000007ece4382000 in ?? ()
No symbol table info available.
#1 0x000007e9ed961ddc in VM_CallCompiled (vm=0x7e9eded23e0 <vmTable+416>, nargs=1,
args=0x7f7ffffc4f10) at code/qcommon/vm_x86.c:2836
opStack = {-1364053999, 0, 13, 0, -310726398, 2025, 13, 0, -243824, 32639, 1484479331,
-1734178881, -243872, 32639, -1911897422, 2028, -1911463784, 2028, -241960, 32639,
-243872, 32639, -1911997790, 2028, 0, 0, 17, 0, -1, 0, -1911463784, 2028, -310726385,
2025, -293267193, -616108009, -241888, 32639, -1911712366, 2028, 65536, 0, 8, 112,
-310726398, 2025, 13, 0, -242253, 32639, 1, 0, -243272, 32639, 1307157078, 198678270,
-243648, 32639, 260732739, 2028, 16, 48, -242736, 32639, -242976, 32639, 65536, 0, 66,
0, 1, 0, 65536, 0, 0, 0, 3, 0, 254706808, 2028, 1, 0, -180264402, 2058179236, -243584,
32639, -1911897833, 2028, 1, 0, -241672, 32639, -243584, 32639, -1911997790, 2028, 0, 0,
11, 0, -1, 0, -241288, 32639, 254706809, 2028, -293267193, -616108009, -241600, 32639,
-1911712366, 2028, -243424, 32639, 260733022, 2028, 254706808, 2028, 1, 0, -241965,
32639, 1, 0, 265681616, 2028, 1675702440, 2028, -243272, 32639, 1307157078, 198678270,
-243344, 32639, 260733022, 1792, 265708184, 2028, -243272, 32639, 1675711536, 2028,
-242020, 32639, 1, 0, -1564239042, -1825996413, -243344, 32639, 260730153, 2028,
-242020, 32639, 1307157078, 0, 265661824, 2028, 265708240, 2028, 10, 0, 1641186088,
-1833387776, -241872, 32639, 1641186088, -1833387776, -241968, 32639, 47, 0, 285189184,
2028, 285189128, 2028, -243120, 32639, 3, 0, 265661824, 2028, 265708240, 2028,
1363142910, -754010338, -1911885782, 2028, 1675711536, 2028, 103008112, 2028,
1600682736, 2028, 103008088, 2028, 0, 0, 0, 0...}
stackOnEntry = 16777192
image = 0x7ecf7cfb550
oldOpTop = 0x7f7ffffc5d8c
i = 1
#2 0x000007e9ed8605c3 in VM_Call (vm=0x7e9eded23e0 <vmTable+416>, nargs=0, callnum=2)
at code/qcommon/vm.c:1710
args = {2, 2025, -310886010, 2025}
ap = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7f7ffffc5000,
reg_save_area = 0x7f7ffffc4f40}}
r = 8701293525673
i = 0
#3 0x000007e9ed7f7b7d in CL_ShutdownUI () at code/client/cl_ui.c:1221
No locals.
#4 0x000007e9ed7e83bb in CL_ShutdownVMs () at code/client/cl_main.c:975
No locals.
#5 0x000007e9ed7ede2f in CL_Shutdown (finalmsg=0x7f7ffffc5050 "Signal caught (4)", quit=qtrue)
at code/client/cl_main.c:3935
recursive = qtrue
#6 0x000007e9ed96731b in signal_handler (sig=4) at code/unix/linux_signals.c:48
msg = "Signal caught (4)\000\374\377\177\177\000\000\237\243\t\216\354\a\000"
---Type <return> to continue, or q <return> to quit---
#7 0x000007ecd69b9005 in ?? ()
No symbol table info available.
#8 0x000007e9eded23e0 in vmTable ()
No symbol table info available.
#9 0x0000000000000001 in ?? ()
No symbol table info available.
#10 0x000007e9eded23e0 in vmTable ()
No symbol table info available.
#11 0x0000000000000008 in ?? ()
No symbol table info available.
#12 0x000007ec8e116130 in __sF () from /usr/lib/libc.so.95.1
No symbol table info available.
#13 0x8080808080808080 in ?? ()
No symbol table info available.
#14 0x00007f7ffffc1cf8 in ?? ()
No symbol table info available.
#15 0x89ea4eaaf9a8117c in ?? ()
No symbol table info available.
#16 0x00007f7ffffc60d0 in ?? ()
No symbol table info available.
#17 0x0000000000000000 in ?? ()
No symbol table info available.
(gdb) quit```
Hi there,
great project. I have noticed that not all passes of alpha-blended shaders are lit. If you have a look at the pom_bots "Pyramid of the Magician" custom map (https://ws.q3df.org/map/pom_bots/) which demonstrated the possibilities of alpha-blended lightmapped terrain back then, you will notice that at the rock cliffs only one (I guess the secondary) pass is lit. The shader in question (among other similar ones) is
textures/sockter/ter_rock2blend // Vine walls only
{
qer_editorimage textures/sockter/ter_rock2blend.tga
q3map_nonplanar
q3map_shadeAngle 120
{
map textures/sockter/ter_rock2.tga // Primary
rgbGen identity
}
{
map textures/sockter/ter_rock2vine.tga // Secondary
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
alphaFunc GE128
rgbGen identity
alphaGen vertex
}
{
map $lightmap
blendFunc GL_DST_COLOR GL_ZERO
rgbGen identity
}
}
If you run around the rock cliffs with the e.g, the gauntlet, you can see the lighting errors.
This is the only Q3 engine I know of which offers correct dynamic light except for the above problem. I love the idea of the project to show what could have been possible back then already.
Are there any plans beyond, e.g. to ever implement shadow mapping? If so I may suggest to have a look at the excellent tesseract (based on cube/sauerbraten) renderer. But this will be a huge project.
Keep up the great work.
One thing that bugs me when playing with lego visuals is that players, items and other effects are affected by the picmip variable, it would be nice to have an option to only picmip worldspawn textures.
this is the condump:
9089 files in 82 pk3 files
execing default.cfg
execing q3config.cfg
couldn't exec autoexec.cfg
Hunk_Clear: reset the hunk ok
...detecting CPU, found 64-bit GenuineIntel w/ SSE4.1
----- Client Initialization -----
12:43:56 ----- Initializing Renderer ----
12:43:56 -------------------------------
12:43:56 ----- Client Initialization Complete -----
12:43:56 ----- R_Init -----
12:43:56 Initializing Vulkan subsystem
12:43:56 ...initializing QVK
12:43:56 ...loading 'C:\WINDOWS\SYSTEM32\vulkan-1.dll' : succeeded
12:43:56 ...current monitor: 1920x1080@0,0 \.\DISPLAY1
12:43:56 ...setting mode -2: 1920 1080 FS
12:43:56 ...using desktop display depth of 32
12:43:56 ...calling CDS: ok
12:43:56 ...registered window class
12:43:56 Raw mouse input initialized.
12:43:56 ...created window@0,0 (1920x1080)
12:43:57 ...selected physical device #0
12:43:57 ...presentation modes: FIFO FIFO_RELAXED MAILBOX
12:43:57 ...selected presentation mode: MAILBOX, image count: 2
12:43:57
VK_VENDOR: NVIDIA
12:43:57 VK_RENDERER: Discrete GeForce GTX 1050 Ti, 0x1c8c
12:43:57 VK_VERSION: API: 1.0.65, Driver: 391.48.0.0
12:43:57
VK_MAX_TEXTURE_SIZE: 2048
12:43:57 VK_MAX_TEXTURE_UNITS: 8
12:43:57
PIXELFORMAT: color(32-bits) Z(24-bit) stencil(8-bits)
12:43:57 presentation: VK_FORMAT_B8G8R8A8_UNORM
12:43:57 depth: VK_FORMAT_D24_UNORM_S8_UINT
12:43:57 MODE: -2, 1920 x 1080 fullscreen hz:120
12:43:57 GAMMA: hardware w/ 0 overbright bits
12:43:57 texturemode: GL_LINEAR_MIPMAP_NEAREST
12:43:57 texture bits: 32
12:43:57 picmip: 0
12:43:57 Initializing Shaders
12:43:57 ----- finished R_Init -----
12:43:57 ------ Initializing Sound ------
12:43:57 ----- Sound Info -----
12:43:57 2 channels
12:43:57 16384 samples
12:43:57 32 samplebits (float)
12:43:57 1 submission_chunk
12:43:57 22050 speed
12:43:57 00000000014E9F00 dma buffer
12:43:57 Using WASAPI subsystem
12:43:57 No background file.
12:43:57 ----------------------
12:43:57 Sound initialization successful.
12:43:57 --------------------------------
12:43:57 Sound memory manager started
12:43:57 Loading vm file vm/ui.qvm...
12:43:57 VM file ui compiled to 696142 bytes of code
12:43:57 ui loaded in 2098176 bytes on the hunk
12:43:57 52 arenas parsed
12:43:57 32 bots parsed
12:43:57 --- Common Initialization Complete ---
12:43:57 Winsock Initialized
12:43:57 Hostname: DESKTOP-VSR4E9C
12:43:57 IP6: fe80::f559:a247:66ea:eb7d%42
12:43:57 IP6: fe80::ec41:8e11:96da:c435%4
12:43:57 IP6: 2003:c9:871f:1600:bd78:d376:26d3:c7ed
12:43:57 IP6: 2003:c9:871f:1600:ec41:8e11:96da:c435
12:43:57 IP: 192.168.178.28
12:43:57 IP: 192.168.56.1
12:43:57 Opening IP6 socket: [::]:27960
12:43:57 Opening IP socket: 0.0.0.0:27960
12:43:57 Working directory: C:\Users\screen13\Desktop\df
12:43:57 83.243.73.220:27960 resolved to 83.243.73.220:27960
12:43:57 Resolving authorize.quake3arena.com
12:43:57 authorize.quake3arena.com resolved to 192.246.40.56:27952
12:43:57 WARNING: server is not allowed to set df_mp_interferenceOff=3
12:43:57 ----- FS_Startup -----
12:43:57 ...loaded in 3 milliseconds
12:43:57 ----------------------
12:43:57 9089 files in 82 pk3 files
12:43:57 URL: http://ws.q3df.org/maps/download/zeel-exzeel_slick
12:44:12 ----- FS_Startup -----
12:44:12 ...loaded in 4 milliseconds
12:44:12 ----------------------
12:44:12 9104 files in 83 pk3 files
12:44:12 defrag\zeel-exzeel_slick.pk3 downloaded
12:44:12 WARNING: server is not allowed to set df_mp_interferenceOff=3
12:44:12 RE_Shutdown( 0 )
12:44:12 Hunk_Clear: reset the hunk ok
12:44:12 ----- R_Init -----
12:44:12 GAMMA: hardware w/ 0 overbright bits
12:44:12 texturemode: GL_LINEAR_MIPMAP_NEAREST
12:44:12 texture bits: 32
12:44:12 picmip: 0
12:44:12 Initializing Shaders
12:44:12 ----- finished R_Init -----
12:44:12 Loading vm file vm/ui.qvm...
12:44:12 VM file ui compiled to 696142 bytes of code
12:44:12 ui loaded in 2098176 bytes on the hunk
12:44:12 52 arenas parsed
12:44:12 32 bots parsed
12:44:12 Loading vm file vm/cgame.qvm...
12:44:13 VM file cgame compiled to 1243646 bytes of code
12:44:13 cgame loaded in 8389632 bytes on the hunk
12:44:13 Cvar: df_promode 1
12:44:13 Cvar: dmflags 0
12:44:13 Cvar: sv_cheats 0
12:44:13 Cvar: timescale 1.00
12:44:13 Cvar: g_synchronousClients 0
12:44:13 Cvar: pmove_fixed 1
12:44:13 Cvar: pmove_msec 8
12:44:13 Cvar: g_speed 320
12:44:13 Cvar: g_gravity 800
12:44:13 Cvar: g_knockback 1000
12:44:13 stitched 0 LoD cracks
12:44:13 ...loaded 1243 faces, 0 meshes, 2 trisurfs, 0 flares
12:44:13 ...found 1222 VBO surfaces (6333 vertexes, 11691 indexes)
12:44:14 CL_InitCGame: 1.65 seconds
12:44:14 Com_TouchMemory: 0 msec
12:44:14 sL1kJR entered the game.
12:44:14 ********************
ERROR: SHADER_MAX_VERTEXES hit in FillCloudySkySide()
12:44:14 RE_Shutdown( 0 )
12:44:14 Hunk_Clear: reset the hunk ok
12:44:14 ----- R_Init -----
12:44:14 GAMMA: hardware w/ 0 overbright bits
12:44:14 texturemode: GL_LINEAR_MIPMAP_NEAREST
12:44:14 texture bits: 32
12:44:14 picmip: 0
12:44:14 Initializing Shaders
12:44:14 ----- finished R_Init -----
12:44:14 Loading vm file vm/ui.qvm...
12:44:14 VM file ui compiled to 696142 bytes of code
12:44:14 ui loaded in 2098176 bytes on the hunk
12:44:14 52 arenas parsed
12:44:14 32 bots parsed
12:44:14 Not recording a demo.
12:44:45 ]\condump error
12:44:45 Dumped console text to error.txt.
Last I remember, ioQuake3 has been keeping local copies of the following libraries in binary format:
The purpose, I guess, was to enable building of ioQuake3 for Windows without tasking the SCM with pulling these libraries from their respective sources in source or binary form. I think that is fundamentally wrong to do because this puts the project into a position where it uses outdated, possibly vulnerable versions of these dependencies.
I can propose such solutions:
Currently Sys_SteamPath is disabled on Linux because older Steam versions wouldn't let you install natively on Linux but now with SteamPlay it works fine through Proton/integrated Wine magic.
Would like to have some additional feature parity by having OpenAL support. Maybe improved from ioquake since it had limitations?
VoIP can be excluded for now unless you want it
I'm playing on Linux. I have r_gamma
set to 1.55, but after a few seconds (in the menu and in-game), the screen gets really dark. Resetting the gamma variable brightens it again for a few seconds.
Edit: seems r_ignorehwgamma
sort of fixes this for me, but it's still a little too dark then.
Because it seems to me as if it is currently not a goal of Quake3e running with an updated missionpack mod (am I right?) this issue report is just a reminder if someone wants to use Quake3e for building the baseq3a source with 'ifdef missionpack 'defined.
The issue:
This commit ec-/baseq3a@62f995d#diff-5955bc51f4db0ef76bd33f4d4381022f adds optimized client side prediction but missionpack items aren't handled here, this results in weird behaviour if someone wants to build missionpack game upon baseq3a code. In detail the persistant powerup 'Guard' is not considered to be predicted. Picking up the 'Guard' powerup and the 'Regeneration' powerup will result in unpredicted events (playing a pain sound if health > 100 for example).
Test scenario:
Compile missionpack game mod from baseq3a source. Start missionpack game mod an load map 'mpteam5' (gametype > GT_TEAM). Pick up the 'Guard' powerup and also the 'Regeneration'. While carrying both a pain sound will be played sometimes, although the health is increasing not decreasing.
Since Quake3e/baseq3a are based upon 1.32b people are considering that missionpack should work as well.
Solution:
So eventually we should predict the 'new' missionpack items 'Guard', 'Ammoregen' (?) here too by adding the specific items to cg_predict 'CG_CheckTimers' (ec-/baseq3a@62f995d#diff-5955bc51f4db0ef76bd33f4d4381022fR609).
Well, I know this issue is a bit 'hypothetically', feel free to close this issue if missionpack won't be supported at all.
EDIT: Sorry if this is the wrong repository for this issue, is this issue more appropriate for baseq3a?
Thanks
ioquake3's is implemented with SDL in the glimp/window management.
Win32 support should be easy. Not so sure about Linux if you don't already have the minimize code adapted in Linux which could be ported to a command as well.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.