This release we focused on our spring cleaning effort, fixing showstoppers and improving the user experience of the game; read on for what’s new!
With the extensive changes we have been making to the game since the beginning of the year, a number of issues have arisen, some of which completely prevented players to run the game on some platforms. This was unacceptable so we declared a feature-freeze while the most critical issues were not fixed. Some difficult crashes appeared late in the cycle so we took one extra week to iron them out, and this is way Alpha 39 comes a bit later than usual.
Apart from the bug-squashing, the major code features were the cleaning of many warnings and Quake C-isms (for example, the removal of qbooleans) and moving the computation of vertex deforms on the GPU to save CPU time.
Interesting GPU driver bugs
One of the hardest parts of working on the renderer is to track down and fix renderer bugs, as they are specific to one hardware/driver combination. We’ve had a few this release:
- The Gallium r300 driver crashed the program with an LLVM error after we moved vertex deforms on the GPU. It was the result of the driver inefficiently allocating arrays in registers and no proper error reporting instead of a hard crash. With the kind help of the #radeon@Freenode developers we worked around that problem by generating a shader for each deform.
- On Mac we started seeing huge FPS drops from 100 to 5 in some cases. Unvanquished was going over the uniform limit for the bone data and the Mac Nvidia driver, instead of giving us an error as it should, resorted to software rendering. The one character fix for this was to reduce the number of available uniforms for bone data.
Other works in progress
The feature-freeze was only for the release branches but new projects have been worked on too:
- Our gamelogic code has been very difficult to work with so we are experimenting with a new architecture based on components; early results are promising and show that it will make it very easy to tweak the gamelogic.
- We have been working on an updater and launcher for the game so that player always get to play the latest version of the game. This will also allow us to push fixes in the middle of the release cycle.
- Having CGame run in NaCl, we are moving our UI to the gamelogic so that it is closer to the data it shows; a quick benchmark showed an FPS gain from 90 to 200 FPS (!) in some situations.
- Finally we have been providing support to another game investigating a port to our engine. We are strongly hoping it succeeds as it would mean we join forces to make FOSS FPS games better.
Here’s the list of commits:
- 216d7a2 Remove the unused TWOSIDED compile macro.
- 98ea7a9 Reset all vertex attributes on RE_Shutdown.
- 05c32f4 Use Q_snprintf instead of snprintf because the latter doesn’t exist on windows
- b74e9ec Make unvanquished compile with VS2015. Note SDL2 will need to be compiled with VS2015 too.
- 6c445d3 Don’t include property type suffix in the value passed to sscanf as it can confuse it. Seems sensible anyway but makes VS2015 work.
- fd9a63e Add a flag for when the process is terminating
- 01fb67b Do not dispatch logs when the process is terminating
- 0a8898c Fix VM compilation
- 8ed6f59 Bind the new world VBO after R_CreateWorldVBO.
- 0b61c25 Proper fix for 8ed6f598.
- 4f7fb33 Fix deforms being applied to all following shaders.
- 6a35b0f Reintroduce /me and /me_team, fixes #391
- 241ff9e Set the number of bones in null_renderer, should fix #503
- db9f9bb Fix wrong sorted aray order in 6a35b0f7
- d35b42e Don’t print a warning if the default pak path doesn’t contain a pkg directory. Fixes #702
- b908f6a Mark OSExit as NORETURN
- e882322 Remove the qboolean enum
- 8b3bc27 Simplify bool uses
- 841fac3 Fix “Taking boolean from pointer ‘FS::PakInfo const *’ without a cast”
- d8df70f Fix “Return type of function ‘trap_FS_Write’ declaration (void) differs from the return type of function definition (int)”
- 67c97fe Mark Sys::Drop as noreturn
- 11cad33 Fix “Returning ‘gentity_t *’ from a function returning ‘bool'”
- ba78530 Remove redundant casts
- 657e646 Replace NULL with nullptr in code
- 62cab2d Replace NULL with nullptr in comments
- 26fb278 Replace func(void) with func()
- 53fe4d2 Fix “Variable ‘foundToken’ is reassigned a value before the old one has been used” in bg_voice.cpp Make trap_Parse_ReadToken return bool
- ccfcb9d Fix “Parameter ‘define’ is passed by value. It could be passed as a (const) reference which is usually faster”
- b7ccb02 Fix “The expression ‘enableNetworking’ is of type ‘bool’ and it is compared against an integer value”
- e4a9d06 Fix “Same expression on both sides of ‘|'”
- 2a57b98 Enable -Wextra and make the build pass with -Werror
- 5546d24 Try ninja -j8
- a82059b Suppress many instances of writable-strings
- 7f51eac Add a missing override
- c138957 Configure appveyor
- 43324fc Fix MSVC C4805
- 098a7bb Don’t print color strings if we are not on running a tty console
- bff6225 Fix type of fields in unlockable_t.
- d80a312 Reduce local compile verbosity to show only the warnings people actually care about
- bbea53b Fix remaining writable strings warnings
- 6c563be Fix remaining absolute value warnings
- 55cd307 Remove unused warning suppressions
- 0d5c425 Fix AppVeyor
- cbd731f Improve build and launch instructions.
- 46fa390 Fix VM compatibility broken in e882322
- 32039c7 Pass index -1 for the global colorgrading configstring.
- 6237280 Disable vsync by default, it causes performance issues for some people
- d3beb7b Fix incorrect usage of memset found by GM2
- ea1345d Replace some exceptions with error codes to help debug performance on MSVC
- 81c87d1 Fix file error handling
- b983c76 Update README to note that BUILD_GAME_NACL should be disabled when cross-compiling
- 566a3e3 Automatically disable BUILD_GAME_NACL when cross-compiling. Fixes #713
- ed8ca2c Generate GLSL for shaders with deforms.
- a12c4ca Fix “too many dependent texture reads” error on mesa/r300g.
- a503ca0 Fix #688.
- 832cd81 Fix #686.
- a614288 Fix games.log format breaking after 999:59 (issue #539).
- 55b58ff Orient missiles along their actual velocity (fixes #586).
- 82e0d17 Remove unnecessary draw command in tr_model.c
- 36a07e0 Group project and source files for our Visual Studio friends
- 88755cf Increase the number of reserved vertex uniforms to avoid software rendering on Mac
- efcac1f Fix a couple MSVC warnings
- b50ba9a Use a stringified deformVertexes shader to keep compatibility with old pk3s.
- 0f1d7da Create script to stringify all shaders in the glsl directory.
- 8b4f2c2 Only load RSA keys once during CL_Init
- a114f8e Remove unnecessary dependencies from CMakeLists.txt
- 3379a4e Clear deform shaders state to stop crashing on vid_restart
- 9922b21 Only provide a UI for selecting supported resolutions
- 7eb1292 Fix spectator spacing again
- 9fb3085 Don’t draw numspawns if intermission has started
- ed582ca Remove cvar attrib from the resolution dataselect. It is not used.
- 2024c0f Remove comments from stringified shaders.
- 351633b Store shaders as const char arrays.
- 9dea2b8 Always show vote binds in the vote dialog
- cd011ff No need to set pseudo class on element being deconstructed.
- a3794f9 Make rocketChatField UCS2 aware.
- d6e00c7 Fix order of functions in displaying translated spawn count
- 9c9db73 Make the previous fix in the right place
- f673ea9 Don’t use P_() because Travis complains. Expand it into multiple branches.
- 6479f08 Nvm. Use P_() again and don’t hardcode the 1
- 7790159 Fix MSVC warnings
- f4aafe3 Stop all sounds when asked, fix #533
- 181940f Revert “Fix VM compatibility broken in e882322”
- a6226ad Make SendServerCommandMsg a SyncMessage because it can call back into the VM when a client is dropped.
- 246394d Let instant building be enabled/disabled with a cvar (issue #718).
- 8cd12b6 Use default deform for shaders with zero stages.
- 5f38999 Version bump to Alpha 39
Can you tell us what the other game your joining forces with is? I’m interested in checking it out.
That would be Xonotic!
Bug fixes, performance optimizations & the great Xonotic interested in migrating to the Deamon engine… very good news!
Keep up the good work guys!