Git Product home page Git Product logo

quake3e's Introduction

Quake3e

build * Discord server

This is a modern Quake III Arena engine aimed to be fast, secure and compatible with all existing Q3A mods. It is based on last non-SDL source dump of ioquake3 with latest upstream fixes applied.

Go to Releases section to download latest binaries for your platform or follow Build Instructions

This repository does not contain any game content so in order to play you must copy the resulting binaries into your existing Quake III Arena installation

Key features:

  • optimized OpenGL renderer
  • optimized Vulkan renderer
  • raw mouse input support, enabled automatically instead of DirectInput(\in_mouse 1) if available
  • unlagged mouse events processing, can be reverted by setting \in_lagged 1
  • \in_minimize - hotkey for minimize/restore main window (win32-only, direct replacement for Q3Minimizer)
  • \video-pipe - to use external ffmpeg binary as an encoder for better quality and smaller output files
  • significally reworked QVM (Quake Virtual Machine)
  • improved server-side DoS protection, much reduced memory usage
  • raised filesystem limits (up to 20,000 maps can be handled in a single directory)
  • reworked Zone memory allocator, no more out-of-memory errors
  • non-intrusive support for SDL2 backend (video, audio, input), selectable at compile time
  • tons of bug fixes and other improvements

Vulkan renderer

Based on Quake-III-Arena-Kenny-Edition with many additions:

  • high-quality per-pixel dynamic lighting
  • very fast flares (\r_flares 1)
  • anisotropic filtering (\r_ext_texture_filter_anisotropic)
  • greatly reduced API overhead (call/dispatch ratio)
  • flexible vertex buffer memory management to allow loading huge maps
  • multiple command buffers to reduce processing bottlenecks
  • reversed depth buffer to eliminate z-fighting on big maps
  • merged lightmaps (atlases)
  • multitexturing optimizations
  • static world surfaces cached in VBO (\r_vbo 1)
  • useful debug markers for tools like RenderDoc
  • fixed framebuffer corruption on some Intel iGPUs
  • offscreen rendering, enabled with \r_fbo 1, all following requires it enabled:
  • screenMap texture rendering - to create realistic environment reflections
  • multisample anti-aliasing (\r_ext_multisample)
  • supersample anti-aliasing (\r_ext_supersample)
  • per-window gamma-correction which is important for screen-capture tools like OBS
  • you can minimize game window any time during \video|\video-pipe recording
  • high dynamic range render targets (\r_hdr 1) to avoid color banding
  • bloom post-processing effect
  • arbitrary resolution rendering
  • greyscale mode

In general, not counting offscreen rendering features you might expect from 10% to 200%+ FPS increase comparing to KE's original version

Highly recommended to use on modern systems

OpenGL renderer

Based on classic OpenGL renderers from idq3/ioquake3/cnq3/openarena, features:

  • OpenGL 1.1 compatible, uses features from newer versions whenever available
  • high-quality per-pixel dynamic lighting, can be triggered by \r_dlightMode cvar
  • merged lightmaps (atlases)
  • static world surfaces cached in VBO (\r_vbo 1)
  • all set of offscreen rendering features mentioned in Vulkan renderer, plus:
  • bloom reflection post-processing effect

Performance is usually greater or equal to other opengl1 renderers

OpenGL2 renderer

Original ioquake3 renderer, performance is very poor on non-nvidia systems, unmaintained

Contacts

Discord channel: https://discordapp.com/invite/X3Exs4C

Links

quake3e's People

Contributors

alex20129 avatar aufau avatar bidybiddle avatar bishop-333 avatar bluestang2006 avatar briancullinan2 avatar calinou avatar chomenor avatar cucook avatar dbeef avatar ec- avatar ensiform avatar kg7x avatar krsh732 avatar newbrict avatar ottob avatar perlence avatar q3superman avatar r-a-sattarov avatar razor85 avatar ryan-sg avatar sarg avatar suburbski avatar ypsvlq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quake3e's Issues

fullscreen issues Linux

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.

Feature Request: QL-style r_picmip

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.

Vulkan renderer fails to start on Linux

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.

Minor compiler warnings under Linux

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 );
    ^

Compatible with Arch Linux?

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.

Brightness resets itself after a few seconds

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.

Feature request: Demo recording renaming fail safe

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.

Failure to compile with USE_RENDERER_DLOPEN=1 on Linux

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

r_lodcurveerror not working

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

SIGILL: Illegal Instruction OpenBSD/amd64

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

compile crash, then game crash

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 $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
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 $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
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:
quakee crash

Consider outsourcing dependencies

Last I remember, ioQuake3 has been keeping local copies of the following libraries in binary format:

  • libjpeg
  • libSDL2
  • libcurl
  • probably more but I can't think of any more examples

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:

  1. These dependencies are included as git submodules.
  2. Solutions for MSVC are reworked to rely on NuGet to pull these dependencies.

Vulkan crashes after a while.

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:

ERROR: vk_bind_attr: geometry buffer overflow on attr 0
----- Server Shutdown (Server crashed: vk_bind_attr: geometry buffer overflow on attr 0) -----
...

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 )

Github Releases

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

New Feature: Auto-Nudge

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.

Potential issue with persistant powerups when using Quake3e + missionpack(a)

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

Feature Request: OpenAL backend

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

CVAR_PROTECTED doesn't mean much to a QVM :)

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

  • rename .zip extension to .pk3
  • create some test directory for mod in your q3 directory (ie. test)
  • put the pk3 in there
  • launch the engine on the mod (ie. +set fs_game test +set vm_cgame 2)
  • launch a map so cgame can load (ie. /map q3dm1)
  • watch 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");
}

Cannot connect to even a local dedicated server, I thought I am not doing enough udp to tcp to ssh tcp tunnelling to udp magic with my vps, but it just doesn't work at all.

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

Reported ping in score stats view

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.

  • Why does external frame capping cause this issue?
  • Does it affect input lag or is it correlated with this in any way?

Feature request: New filesystem

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.

ID Pak Precedence

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.

Other Precedence Changes

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.

Performance Improvements

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:

  • Reboot test system
  • Run test application, record time to menu (cold start)
  • Exit and run test application again, record time to menu (warm start)
  • Run 'map q3dm17' command twice, record map load times
  • Run 'map q3dm7' command twice, record map load times

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:

  • Test system: Windows 10, Intel Core i7-4700mq, Samsung 850 Pro SSD
  • The map pk3s come from a random set of maps from lvlworld.com and ws.q3df.org.
  • For my filesystem I created an updated index cache (fscache.dat) file before each test. This file is automatically created on startup whenever a certain number of new pk3s are added, so it would exist in normal usage.
  • If the cold start times seem strange, I suspect it is because the primary load time driver for my filesystem is the UI loading arena files. It appears to be hitting limits and only parsing the first 500-600 arena files (this is using pak8a from quake3e) hence the load time not increasing past that point.

Other features

Functional features:

  • Ability to use missionpack maps and textures in other mods without special workarounds
  • File lookup tracing commands to assist content and engine development
  • Download folder support and safer downloading options
  • Better handling and recovery of pk3 download errors
  • Ability to customize pure/download lists on the server
  • Case-insensitive pk3dir support
  • Several new cvar controlled options

Implementation features:

  • Multiple source files instead of single files.c for better organization
  • Core file indexing system has no dependency on rest of game code; can be compiled, tested, and used separately
  • More abstract file source types, to support use of 'files' that aren't part of a physical pk3 or directory
  • Centralized path creation function and sanity checks
  • Wide character API compatibility on Windows

Conclusion

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.

Feature Request: '/tell' bound to selfID

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.

How do you build this thing?

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?

Support of another CPU architectures (e.g. MCST e2k)?

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:

Release versions

Are they going to stay the same for the foreseeable future? I'm about to package this engine for Gentoo in src_prepare-overlay :)

Feature request: Follow IP command

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!

Disconnected bots on respawn?

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:
shot-20200130-002950-3

Website

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!

Drop Back to UI vm when trying to load map "zeel-exzeel_slick"

this is the condump:

iDFe RC+1591 win_mingw-x86_64 Jan 19 2020
----- FS_Startup -----
...found 80 cached paks
...loaded in 23 milliseconds

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.

Renderers: Both renderers miss 'videoMap'.

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:
shot-20200130-194841
...and here is how 'videoMaps' look in Vulkan:
shot-20200131-013526
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.

Quake3e requires jack (audioserver) running? Is that intentional?

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

Buffer overflow in cmd.c

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.

strcat( cmd_args, cmd_argv[i] );

This variable has allotted 1024 bytes for characters as displayed below:

#define MAX_STRING_CHARS 1024 // max length of a string passed to Cmd_TokenizeString

If we provide arguments with length > 2000, this variable should overflow and cause a crash.

cl_autonudge does not work well

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

Vulkan: Game freezes after loading many bots.

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.

Feature request: Only picmip worldspawn textures

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.

Feature request: /minimize command like ioq3

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.

dynamic light problem on lightmapped alpha-blended brushes

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.