GithubHelp home page GithubHelp logo

unvanquished / unvanquished Goto Github PK

View Code? Open in Web Editor NEW
947.0 54.0 151.0 184.59 MB

An FPS/RTS hybrid game powered by the Daemon engine (a combination of ioq3 and XreaL)

Home Page: https://unvanquished.net

License: Other

Shell 0.53% CMake 1.44% C++ 89.31% C 2.33% Perl 0.02% PowerShell 0.08% Batchfile 0.09% Python 0.89% GLSL 4.96% ShaderLab 0.24% Lua 0.11%
game game-development librocket idtech3 xreal tremulous fps-game rts-game sci-fi-game science-fiction

unvanquished's Introduction

Unvanquished

Unvanquished is an arena game with RTS elements (you can build) in which two very different factions fight.

GitHub tag GitHub release Github universal zip release Github updater release Flatpak release Sourceforge files

IRC Matrix Discord

Windows macOS Linux
AppVeyor branch Azure branch Azure branch

ℹ️ We provide ready-to-use downloads for the Unvanquished game on the download page.

ℹ️ This repository contains the source code for the game logic of Unvanquished.

💡️ If you only want to play the game or run a server and want to rebuild, you only need to build the Dæmon engine and download the game's assets.

💡️ You need to build this repository if you want to contribute to the game logic or make a mod with custom game logic binaries.

See below for build and launch instructions.

Translating the game

Weblate

The Unvanquished game is translated on the Weblate platform, this is the easier way to contribute translations since it offers a central place were people can contribute and review translations while reducing risks of merge conflicts. Weblate preserves authorship and automatically produces commits that can be associated with your GitHub account.

Requirements to build the game binaries

To fetch and build Unvanquished, you'll need: git, cmake, python ≥ 2, python-yaml, python-jinja, and a C++14 compiler. The following are actively supported: gcc ≥ 8, clang ≥ 3.5, Visual Studio/MSVC (at least Visual Studio 2019).

Dependencies

Required: zlib, libgmp, libnettle, libcurl, SDL2, GLEW, libpng, libjpeg ≥ 8, libwebp ≥ 0.2.0, Freetype, Lua, OpenAL, libogg, libvorbis, libopus, libopusfile.

Optional: ncurses.

MSYS2

MSYS2 is the recommended way to build using MinGW on a Windows host.

Required packages for 64-bit: mingw-w64-x86_64-gcc, mingw-w64-x86_64-cmake, make
Required packages for 32-bit: mingw-w64-i686-gcc, mingw-w64-i686-cmake, make

See the wiki for more detailed instructions.

Downloading the sources for the game binaries

Unvanquished requires several sub-repositories to be fetched before compilation. If you have not yet cloned this repository:

git clone --recurse-submodules https://github.com/Unvanquished/Unvanquished.git

If you have already cloned:

cd Unvanquished/
git submodule update --init --recursive

ℹ️ If cmake complains about missing files in daemon/ folder or similar issue then you have skipped this step.

Downloading the game's assets

If you don't have the assets, you can download them first. You can download an universal zip from the download page, here is the link to the latest version. The pkg/ folder can be stored in the homepath.

Otherwise you can use the package downloader script. This script can use aria2c, curl or wget.aria2c is recommended.

You can do ./download-paks --help for more options.

./download-paks build/pkg

The above snippet places the pkg directory in the libpath of the Daemon engine that you are building, so it will only be automatically found from this build directory. If you prefer the paks to be found by from all installations/build directories, consider downloading to the pkg/ subdirectory of the homepath.

Building the game binaries

ℹ️ This will build both the game engine and the game logic. Building both makes things more convenient for testing and debugging.

💡️ Instead of -j4 you can use -jN where N is your number of CPU cores to distribute compilation on them. Linux systems usually provide a handy nproc tool that tells the number of CPU core so you can just do -j$(nproc) to use all available cores.

Enter the directory before anything else:

cd Unvanquished/

Visual Studio

  1. Run CMake.
  2. Choose your compiler.
  3. Open Unvanquished.sln and compile.

Linux, macOS

Produced files will be stored in a new directory named build.

mkdir build; cd build
cmake ..
make -j4

MSYS2

mkdir build; cd build
cmake .. -G "MSYS Makefiles"
make -j4

Linux cross-compile to Windows

💡️ For a 32-bit build use the cross-toolchain-mingw32.cmake toolchain file instead.

mkdir build-win64; cd build-win64
cmake .. -DCMAKE_TOOLCHAIN_FILE=../daemon/cmake/cross-toolchain-mingw64.cmake
make -j4

Running the game

ℹ️ On Windows you'll have to use daemon.exe and daemonded.exe instead of ./daemon and ./daemonded, everything else will be the same.

First, enter the build/ folder:

cd build

Running the client

Assuming the pkg/ folder is stored next to the daemon binary:

./daemon

You can also use -pakpath to load assets from a pkg/ folder stored somewhere else, <PATH> stands for the path to the pkg/ folder.

./daemon -pakpath <PATH>

Running the server

If you want to run a server, you may prefer to use the non-graphical daemonded server binary instead of daemon and start the first map (here, plat23 is used as an example) from the command line.

Assuming the pkg/ folder is stored next to the daemonded binary:

./daemonded +map plat23

You can use -pakpath to load assets from a pkg/ folder stored somewhere else (see above).

Configuring the server

You may want to copy and extend some configuration samples, they must be stored in your user home directory, for details see the game locations wiki page and the page about running a server.

Running a modified game as a developer

ℹ️ This is not a tutorial to distribute a modified game usable by players. See the wiki for mod building and hosting tutorials.

ℹ️ This is not needed to run the released game or a server.

As a developer, you may want to run the game logic as a shared library and load modified assets from the pkg/unvanquished_src.dpkdir submodule.

Assuming you already have a release pkg/ folder, you can do it this way:

./daemon -pakpath ../pkg -set vm.sgame.type 3 -set vm.cgame.type 3

Note that only the basic unvanquished_src.dpkdir asset package is provided that way, and running Unvanquished only with that package will bring you some warnings about other missing packages and you will miss soundtrack and stuff like that.

ℹ️ If you are looking for the sources of the whole assets, have a look at the UnvanquishedAssets repository. Beware that unlike the unvanquished_src.dpkdir package most of them can't be loaded correctly by the engine without being built first.

Dealing with submodules

Please don't commit submodules in pull requests, as the submodule references may not exist after the pull requests are rebased and merged.

When a feature is split across more than one repository, submodules are expected to be committed after each pull requests has been merged.

ℹ️ More details can be found in the wiki: wiki:Dealing with submodules.

unvanquished's People

Contributors

amanieu avatar caldazar-at avatar cmf028 avatar cu-kai avatar dimhotepus avatar dolcetriade avatar dsalt avatar emily82 avatar enneract avatar gimhael avatar gireen avatar gmcode avatar grise3 avatar illwieckz avatar jaytersen avatar kangz avatar kharnov avatar mbasaglia avatar necessarily-equal avatar neumond avatar sixthly avatar slipher avatar sweet235 avatar t4im avatar thetheodor avatar timepath avatar trinitrotoluene- avatar veyrdite avatar viech avatar zturtleman 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  avatar  avatar  avatar  avatar

unvanquished's Issues

cg_shadows makes objects invisible

OS: Windows Vista 32 bit
Renderer: GL3

On the new renderer (GL3), cg_shadows 2 makes the renderer spazz and things flicker all over the place, making the game unplayable. on cg_shadows 3, all the walls, floors, and ceilings of maps become invisible and see-through. On 4, all the alien player models are invisible, on 6, only the Dragoon, Basilisk, and Marauder models are invisible.

cg_shadows 3: http://i42.tinypic.com/514hs1.jpg
Replicate:
cg_shadows 3

`````` vid_restart```

I don't have a screenshot of cg_shadows 2 messing up the renderer, how to reproduce:
cg_shadows 2
vid_restart
I also don't have a screenshot of what cg_shadows 4, and 6 do, however just replicate, obviously, but changing them to 4 or 6.

Server disconnects on alt-tab

System: Windows 7 64bit, Core i7, AMD HD 6770m GPU.

When i alt-tab out of a game, first of all I can't use my mouse, but if I stay alt-tabbed for more than a minute or so I get an error on the client (not console or crash) that says the server unexpectedly disconnected. When I try to reconnect, I get "awaiting gamestate" and then the game goes straight back to the main menu. To fix you have to restart the client.

not a major issue but something worth mentioning once everything else is running smoothly.

MD zoom

Its bugged. I can't really describe what it does, but i'll try.
As i press the right button, it starts zooming animation. Looks perfectly normal. But then it zooms too far, and the image flips. The FOV becomes negative and then it flips back to normal, but then the view is upside down, and mirrored. The animation repeats.
Every now and then the character nudges to a different angle, usually directly up or down.
This client is 3.0 of source forge. I am using windows xp if thats any use.

I also got another person using the same build, to test it out to make sure. (S)He (not sure about the name being a female or male) said that (s)he couldn't turn the mouse afterwards. I got the same bug as well, and it isn't fixed by doing vid_restart. Mine got fixed when i lagged out and reconnected.

VoIP

While it works, the quality is terrible. We need to find a superior method of using ingame voip. Using external programs is difficult for public games.

r_showSkeleton is broken

r_showSkeleton does not properly show a skeleton.

It is worth noting that although the skeleton is shown wrong, the vertex shader responsible for bone-based models appears to be working just fine.

How it should look: http://imgur.com/mOBwN

How it does look: http://imgur.com/m55FD

Steps to reproduce:

  1. Do the following:
    \sv_pure 0
    \devmap atcs
    \r_showSkeleton 1
    \g_alienStage 2
    
  2. Spawn as an advanced granger and build a trapper. Observe the skeleton appearing wrong.

MAX_TRAIL_SYSTEMS

Trails don't seem to die. cg_debugTrails 1 and fire 2 clips of the rifle.

Colors are corrupted on Mac build

Regardless of renderer used or build type (i.e., release or debug), colors are corrupted on the Mac build. This has been confirmed by several other users on different machines and architectures (both x86 and x86_64).

Hooking up another display to the Mac (which causes the displays to reset) or changing resolutions in Mac OS X (which does likewise) fixes the issue momentarily; if the gamma is changed in-game, the issue presents itself again.

This has been found to relate to calling both SDL_SetGamma and SDL_SetGammaRamp (the latter calls the former). These are called in GLimp_SetGamma and GLimp_RestoreGamma in sdl_gamma.c and GLimp_Init in sdl_glimp.c. There is also a call to such in GLimp_Init in sdl_vid.c, which is evidently for Windows systems.

Particle effects are not properly z-ordered

Steps to reproduce

Have another player stand on the other side of a wall and fire the blaster. This may only work in certain areas or only with certain weapons, I do not know. The video below demonstrates the problem in the hallway of ATCS.

Expected result

The firing effect cannot be seen.

Actual result

The effect can be seen through the wall.

Notes

If I had to guess, I'd say this is because of the particles having an alpha mask, and to make alpha blending work properly, the engine probably just does its own depth-sorting but for some reason the BSP is not being taken into account.

This video demonstrates the problem:
http://home.comcast.net/~chet102103/projects/tremz/bugs/issue_007_z-order.ogv

Another player is standing behind the wall and shooting at it with the blaster. The firing effect can be seen on the other side of the wall. Note that in that video, the splash effect of the blaster (i.e., when a particle hits the wall) cannot be seen, but using the older .pak did show this (it must just be missing).

Resolutions do not work in the options menu

Problems noticed:

  • Setting the resolution with the options menu does not work. I am referring to the main options menu, not the in-game one (which I have not tested). Set the resolution, hit apply, and the video subsystem evidently restarts because the window disappears and reappears as expected, but the same resolution as before; it does not change. Once in game, even though the resolution did not change, the combo box will indicate whatever was selected before clicking apply.
  • Changing the resolution with r_mode and calling vid_restart does not change the value displayed in the menu.
  • If the resolution is set to custom, (i.e., r_mode is -1), the resolution will display improperly. (See below)

Steps to reproduce problem #3:

  1. Set r_customwidth and r_customheight to whatever, and r_mode to -1.
  2. Do vid_restart.
  3. Look at the options menu in the main screen. It should say "Custom (0x0)" in the combo box.

UI Bindings

In the main menu / game menu, the UI won't respond to bind settings.

The ??? wil stay in place, and doesn't bind your setting for example:

Strafe = ???

Press "+Button4"

Strafe = ??? (instead of: Strafe Button4).

No way to reverse Make install

Need to include some code to uninstall the game if compiled from sources. As it is currently there is no way to do that automagically. Which means everyone would need to hunt down stuff manually. Would make it much more convenient if you could simply $make uninstall and be able to remove the game if something messes up and it needs to be removed.

Client Crash on change map.

As the title says, the client appears to crash for a lot of people when the map is changed due to "overflow"

Freeze on death

Several people have reported that their game freezes on death. This occurs with both GL and GL3 renderer. It seems to only occur on Linux systems. It does not occur with a Debug build, only a Release build.

Excessive Lag in Human Base

Hello, live bug report from latest Alpha version 2. Fps is as low as 5 in the human base in some maps, and progressively gets higher as I leave. And please don't tell me it's a hardware issue, I have i7 and 6770 AMD graphics.

Sensitivity Occasionally drops back to 5.

Many people experiencing this bug where the sensitivity acts as if it was set to default no matter what they have it set to. It appears to happen to everyone at the exact same time and sometimes fixes itself after a little bit. Depending on when this bug occurs and how long it lasts for this can make the game unplayable.

Using /video with a keybind does not work.

Affects 067165e

Steps to reproduce:

  1. Record a demo with /record.
  2. Stop recording with /stoprecord/
  3. Disconnect with /disconnect.
  4. Bind /video to a key. (I used the 9 button, not on the numpad.)
  5. Load the demo with /demo.
  6. Begin recording with the key you bound /video.

Expected result:

A demo is recorded, then played back, and the video begins recording.

Actual result:

Everything works as expected until /video is invoked with the keybind, at which point the user is disconnected. Note that manually typing /video at the console at step 6 works fine.

Blue lighting / Blue walls

The title is very deceptive, but while i was spectator and playing i saw the lighting was blue, but across the whole room.

I tried to screenshot it, but it just renders perfectly then.
It looks like a lighting problem, where there is a blue 'wall' across the room like |----|.
Or it looks like an orb.

This also happens with building, only this glow is orange and only with the turret.
It's some sort of housing the turret.

I will make a photo of these effect with my phone later this evening.

QVMs fail to build under Xcode

QVMs fail to build under xcode due to a cmake error. I believe this is due to the custom commands expecting a different directory structure then is created for Xcode.

Need more robust selection of renderer

Currently, if a computer can't use the default OpenGL3 renderer, the game will automatically shutdown without any indication of failure outside of console logs.

This is a problem for people who have machines with GPUs that don't support OpenGL3 or with drivers that don't support OpenGL3 well enough to not crash or some other who hah.

We maintain support for the Vanilla renderer (OpenGL 1.x) just for these people.
Unfortunately, to use it the user must use the command line flag: +set cl_renderer GL.
This is obviously not ideal.

We should be able to detect hardware that can't use the OpenGL3 renderer, and automatically select the Vanilla renderer on start-up.
We will still keep the cl_renderer cvar for flexibility purposes.

Linux: Compiling from git sources leaves you with messed up control settings

The default control settings seem messed up on a fresh compile from git and require that you fix them yourself. For example the bind for mouse2 is set to Enemy Territory's binding "weapalt" but it should be set under Unvanquished conventions "+attack2".

This can be found in the

<Unvanquished_Dir>/main/default.cfg

file on line 18.

Easy fix.

BG_ParseBuildableFile uses magic numbers

BG_ParseBuildableFile in src/gamelogic/gpp/src/game/bg_misc.c clamps the 'index' parameter to the "model" configuration string to the range [0,3]. This parameter is used to set the file path of the corresponding model in the 'models' array of 'buildableConfig_t', which has MAX_BUILDABLE_MODELS number of elements. Rather than clamping index to the range [0,3], it should be clamped to [0,MAX_BUILDABLE_MODELS] to avoid any possible headaches in the future.

Backspace does not work in the console

At the console, pressing backspace does not delete characters as is normal. The backspace key, however, may be bound to an action and works. This was tested with commit 4d40ef1.

Running Mac OS X 10.6.8 on a 32-bit Intel processor.

Compilation error on linux, gcc 4.6.2

A lot of errors

expected «=», «,», «;», «asm» or «__attribute__» before «OF»

in files src/engine/qcommon/unzip.h and src/engine/qcommon/ioapi.h

Increase direct (UDP-based) file transfer speed

The advantages of a fast, internal file transferring system (compared to an HTTP-based one) is:

  • there is no need to set up a web server to guarante (timely) serving of files on your server.
  • there is no need to synchronize the distributed paks between the game server and the web server.
  • a transfer rate limiting functionality is integrated.
  • the system does not require "yet another" external library.

NOTE: Writing this up on behalf of DevHC.

Messed-up HUD

I'm seeing various problems with the HUD. (Using gpp.)

Seems somewhat messed up, and there are missing textures.

(There's also a rendering issue – some blocks not rendered, top left to bottom right – but that's an issue with either Mesa or Linux, both of which are a little bit patched.)

system gets very laggy after quitting the game

I have to wait like one, two or more minutes after game closes to get my system working as fast as it worked before. Lags look like I wouldn't install video drivers: windows appears very slow being drawn from top to bottom line by line, responses on my actions are slowed too. Hope description helps somehow.

I use archlinux x86_64 with kde4, tremz is compiled from sources(from last commit for now). Video card is geforce 9600 with nvidia blob(295.20)

Client Crashes After Changing Graphics Settings

Well, I dunno if it's crashing, but it's certainly gone. When I change my settings (e.g. change the resolution), the game just... goes. Flickers a bit. Makes a screaming sound (in my head). And then disappears. No "Daemon.exe" has stopped working or something like that.

Settings are changed after I start up however, so the problem's not so bad.

Crash on map startup

Backtrace:

#0  0x00007fffad8df35f in BG_InventoryContainsWeapon (weapon=1, stats=0xfc)
    at src/gamelogic/gpp/src/game/bg_misc.c:3091
#1  0x00007fffad8e091f in BG_PrimaryWeapon (stats=0xfc)
    at src/gamelogic/gpp/src/game/bg_misc.c:3842
#2  0x00007fffad8ff6f4 in CG_DrawPlayerClipsStack (rect=0x7fffffff4970, 
    backColor=0x7fffb0329184, foreColor=0x7fffffff49d0, textalign=0, 
    textvalign=0)
    at src/gamelogic/gpp/src/cgame/cg_draw.c:3139
#3  0x00007fffad8ffa6b in CG_OwnerDraw (x=311, y=11, w=320, h=240, text_x=0, 
    text_y=0, ownerDraw=34, ownerDrawFlags=0, align=0, textalign=0, 
    textvalign=0, borderSize=1, scale=0.550000012, foreColor=0x7fffffff49d0, 
    backColor=0x7fffb0329184, shader=0, textStyle=0)
    at src/gamelogic/gpp/src/cgame/cg_draw.c:3238
#4  0x00007fffad94214f in Item_OwnerDraw_Paint (item=0x7fffb03290f0)
    at src/gamelogic/gpp/src/ui/ui_shared.c:5722
#5  0x00007fffad942900 in Item_Paint (item=0x7fffb03290f0)
    at src/gamelogic/gpp/src/ui/ui_shared.c:5931
#6  0x00007fffad94365c in Menu_Paint (menu=0x7fffb7fae4b0, forcePaint=qtrue)
    at src/gamelogic/gpp/src/ui/ui_shared.c:6312
#7  0x00007fffad8fafe7 in CG_DrawLoadingScreen ()
    at src/gamelogic/gpp/src/cgame/cg_draw.c:1463
#8  0x00007fffad91fda0 in CG_DrawActiveFrame (serverTime=0, 
    stereoView=STEREO_CENTER, demoPlayback=qfalse)
    at src/gamelogic/gpp/src/cgame/cg_view.c:1404
#9  0x00007fffad8d818e in vmMain (command=3, arg0=0, arg1=0, arg2=0, 
    arg3=-45632, arg4=-44144, arg5=4991567, arg6=-45664, arg7=4627534, 
    arg8=-45632, arg9=4485707, arg10=-45648, arg11=4627860)
    at src/gamelogic/gpp/src/cgame/cg_main.c:67
#10 0x00000000004e43af in VM_Call (vm=0x208f1e0, callnum=3)
    at src/engine/qcommon/vm.c:792
#11 0x000000000044a355 in CL_CGameRendering (stereo=STEREO_CENTER)
    at src/engine/client/cl_cgame.c:1499
#12 0x0000000000469c4e in SCR_DrawScreenField (stereoFrame=STEREO_CENTER)
    at src/engine/client/cl_scrn.c:644
#13 0x0000000000469d94 in SCR_UpdateScreen ()
    at src/engine/client/cl_scrn.c:716
#14 0x00000000004477df in CL_CgameSystemCalls (args=0x7fffffff4f60)
    at src/engine/client/cl_cgame.c:753
#15 0x00000000004e3668 in VM_DllSyscall (arg=24)
    at src/engine/qcommon/vm.c:373
#16 0x00007fffad9573b4 in trap_UpdateScreen ()
    at src/gamelogic/gpp/src/cgame/cg_api.c:187
#17 0x00007fffad8fafb0 in CG_UpdateMediaFraction (newFract=0.0500000007)
    at src/gamelogic/gpp/src/cgame/cg_draw.c:1448
#18 0x00007fffad8dc296 in CG_Init (serverMessageNum=3, 
    serverCommandSequence=0, clientNum=0)
    at src/gamelogic/gpp/src/cgame/cg_main.c:2103
#19 0x00007fffad8d8148 in vmMain (command=0, arg0=3, arg1=0, arg2=0, arg3=0, 
    arg4=-44208, arg5=28998528, arg6=29817989, arg7=4573568, arg8=-44144, 
    arg9=4579635, arg10=-44144, arg11=4991567)
    at src/gamelogic/gpp/src/cgame/cg_main.c:52
#20 0x00000000004e43af in VM_Call (vm=0x208f1e0, callnum=0)
    at src/engine/qcommon/vm.c:792
#21 0x000000000044a256 in CL_InitCGame ()
    at src/engine/client/cl_cgame.c:1418
#22 0x000000000045e133 in CL_DownloadsComplete ()
    at src/engine/client/cl_main.c:2807
#23 0x000000000045e582 in CL_InitDownloads ()
    at src/engine/client/cl_main.c:2966
#24 0x000000000046858a in CL_ParseGamestate (msg=0x7fffffff5aa0)
    at src/engine/client/cl_parse.c:752
#25 0x0000000000468d40 in CL_ParseServerMessage (msg=0x7fffffff5aa0)
    at src/engine/client/cl_parse.c:1245
#26 0x000000000045febb in CL_PacketEvent (from=..., msg=0x7fffffff5aa0)
    at src/engine/client/cl_main.c:3628
#27 0x00000000004bf57f in Com_EventLoop ()
    at src/engine/qcommon/common.c:2766
#28 0x00000000004c08ee in Com_Frame ()
    at src/engine/qcommon/common.c:3632
#29 0x0000000000477533 in main (argc=7, argv=0x7fffffffe0c8)
    at src/engine/sys/sys_main.c:896

Reason: cg.snap == NULL.

Patch:

diff --git a/src/gamelogic/gpp/src/cgame/cg_draw.c b/src/gamelogic/gpp/src/cgame/cg_draw.c
index 7be5560..357f4ed 100644
--- a/src/gamelogic/gpp/src/cgame/cg_draw.c
+++ b/src/gamelogic/gpp/src/cgame/cg_draw.c
@@ -3192,130 +3192,170 @@ void CG_OwnerDraw( float x, float y, float w, float h, float text_x,
   rect.w = w;
   rect.h = h;

+  // cg.snap == NULL has been observed to cause segfaults
   switch( ownerDraw )
   {
     case CG_PLAYER_CREDITS_VALUE:
-      CG_DrawPlayerCreditsValue( &rect, foreColor, qtrue );
+      if (cg.snap)
+        CG_DrawPlayerCreditsValue( &rect, foreColor, qtrue );
       break;
     case CG_PLAYER_CREDITS_FRACTION:
-      CG_DrawPlayerCreditsFraction( &rect, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerCreditsFraction( &rect, foreColor, shader );
       break;
     case CG_PLAYER_CREDITS_VALUE_NOPAD:
-      CG_DrawPlayerCreditsValue( &rect, foreColor, qfalse );
+      if (cg.snap)
+        CG_DrawPlayerCreditsValue( &rect, foreColor, qfalse );
       break;
     case CG_PLAYER_ALIEN_EVOS:
-      CG_DrawPlayerAlienEvos( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
+      if (cg.snap)
+        CG_DrawPlayerAlienEvos( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
       break;
     case CG_PLAYER_STAMINA:
-      CG_DrawPlayerStaminaBar( &rect, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerStaminaBar( &rect, foreColor, shader );
       break;
     case CG_PLAYER_STAMINA_VALUE:
-      CG_DrawPlayerStaminaValue( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerStaminaValue( &rect, foreColor );
       break;
     case CG_PLAYER_STAMINA_1:
     case CG_PLAYER_STAMINA_2:
     case CG_PLAYER_STAMINA_3:
     case CG_PLAYER_STAMINA_4:
-      CG_DrawPlayerStamina( ownerDraw, &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerStamina( ownerDraw, &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_STAMINA_BOLT:
-      CG_DrawPlayerStaminaBolt( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerStaminaBolt( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_AMMO_VALUE:
-      CG_DrawPlayerAmmoValue( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerAmmoValue( &rect, foreColor );
       break;
     case CG_PLAYER_TOTAL_AMMO_VALUE:
-      CG_DrawPlayerTotalAmmoValue( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerTotalAmmoValue( &rect, foreColor );
       break;
     case CG_PLAYER_CLIPS_VALUE:
-      CG_DrawPlayerClipsValue( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerClipsValue( &rect, foreColor );
       break;
     case CG_PLAYER_AMMO_STACK:
-      CG_DrawPlayerAmmoStack( &rect, backColor, foreColor, textalign,
-                              textvalign );
+      if (cg.snap)
+        CG_DrawPlayerAmmoStack( &rect, backColor, foreColor, textalign,
+                                textvalign );
       break;
     case CG_PLAYER_CLIPS_STACK:
-      CG_DrawPlayerClipsStack( &rect, backColor, foreColor, textalign,
-                              textvalign );
+      if (cg.snap)
+        CG_DrawPlayerClipsStack( &rect, backColor, foreColor, textalign,
+                                textvalign );
       break;
     case CG_PLAYER_BUILD_TIMER:
-      CG_DrawPlayerBuildTimer( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerBuildTimer( &rect, foreColor );
       break;
     case CG_PLAYER_HEALTH:
-      CG_DrawPlayerHealthValue( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerHealthValue( &rect, foreColor );
       break;
     case CG_PLAYER_HEALTH_CROSS:
-      CG_DrawPlayerHealthCross( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawPlayerHealthCross( &rect, foreColor );
       break;
     case CG_PLAYER_CHARGE_BAR_BG:
-      CG_DrawPlayerChargeBarBG( &rect, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerChargeBarBG( &rect, foreColor, shader );
       break;
     case CG_PLAYER_CHARGE_BAR:
-      CG_DrawPlayerChargeBar( &rect, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerChargeBar( &rect, foreColor, shader );
       break;
     case CG_PLAYER_CLIPS_RING:
-      CG_DrawPlayerClipsRing( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerClipsRing( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_BUILD_TIMER_RING:
-      CG_DrawPlayerBuildTimerRing( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerBuildTimerRing( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_WALLCLIMBING:
-      CG_DrawPlayerWallclimbing( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerWallclimbing( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_BOOSTED:
-      CG_DrawPlayerBoosted( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerBoosted( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_BOOST_BOLT:
-      CG_DrawPlayerBoosterBolt( &rect, backColor, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerBoosterBolt( &rect, backColor, foreColor, shader );
       break;
     case CG_PLAYER_POISON_BARBS:
-      CG_DrawPlayerPoisonBarbs( &rect, foreColor, shader );
+      if (cg.snap)
+        CG_DrawPlayerPoisonBarbs( &rect, foreColor, shader );
       break;
     case CG_PLAYER_ALIEN_SENSE:
-      CG_DrawAlienSense( &rect );
+      if (cg.snap)
+        CG_DrawAlienSense( &rect );
       break;
     case CG_PLAYER_HUMAN_SCANNER:
-      CG_DrawHumanScanner( &rect, shader, foreColor );
+      if (cg.snap)
+        CG_DrawHumanScanner( &rect, shader, foreColor );
       break;
     case CG_PLAYER_USABLE_BUILDABLE:
-      CG_DrawUsableBuildable( &rect, shader, foreColor );
+      if (cg.snap)
+        CG_DrawUsableBuildable( &rect, shader, foreColor );
       break;
     case CG_KILLER:
-      CG_DrawKiller( &rect, scale, foreColor, shader, textStyle );
+      if (cg.snap)
+        CG_DrawKiller( &rect, scale, foreColor, shader, textStyle );
       break;
     case CG_PLAYER_SELECT:
-      CG_DrawItemSelect( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawItemSelect( &rect, foreColor );
       break;
     case CG_PLAYER_WEAPONICON:
-      CG_DrawWeaponIcon( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawWeaponIcon( &rect, foreColor );
       break;
     case CG_PLAYER_SELECTTEXT:
-      CG_DrawItemSelectText( &rect, scale, textStyle );
+      if (cg.snap)
+        CG_DrawItemSelectText( &rect, scale, textStyle );
       break;
     case CG_SPECTATORS:
-      CG_DrawTeamSpectators( &rect, scale, textvalign, foreColor, shader );
+      if (cg.snap)
+        CG_DrawTeamSpectators( &rect, scale, textvalign, foreColor, shader );
       break;
     case CG_PLAYER_LOCATION:
-      CG_DrawLocation( &rect, scale, textalign, foreColor );
+      if (cg.snap)
+        CG_DrawLocation( &rect, scale, textalign, foreColor );
       break;
     case CG_FOLLOW:
-      CG_DrawFollow( &rect, text_x, text_y, foreColor, scale,
-                     textalign, textvalign, textStyle );
+      if (cg.snap)
+        CG_DrawFollow( &rect, text_x, text_y, foreColor, scale,
+                       textalign, textvalign, textStyle );
       break;
     case CG_PLAYER_CROSSHAIRNAMES:
-      CG_DrawCrosshairNames( &rect, scale, textStyle );
+      if (cg.snap)
+        CG_DrawCrosshairNames( &rect, scale, textStyle );
       break;
     case CG_PLAYER_CROSSHAIR:
-      CG_DrawCrosshair( &rect, foreColor );
+      if (cg.snap)
+        CG_DrawCrosshair( &rect, foreColor );
       break;
     case CG_STAGE_REPORT_TEXT:
-      CG_DrawStageReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
+      if (cg.snap)
+        CG_DrawStageReport( &rect, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
       break;
     case CG_ALIENS_SCORE_LABEL:
-      CG_DrawTeamLabel( &rect, TEAM_ALIENS, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
+      if (cg.snap)
+        CG_DrawTeamLabel( &rect, TEAM_ALIENS, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
       break;
     case CG_HUMANS_SCORE_LABEL:
-      CG_DrawTeamLabel( &rect, TEAM_HUMANS, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
+      if (cg.snap)
+        CG_DrawTeamLabel( &rect, TEAM_HUMANS, text_x, text_y, foreColor, scale, textalign, textvalign, textStyle );
       break;

     //loading screen

(There's probably a better fix.)

"Pubkey not authenticated" issue

Pubkey authentication on Windows is broken.
It works fine on *nix platforms so something is up.

I suspect a problem with nettle or gmp.

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.