I just pushed a commit that completes the transition of the entire music playback code as a separate DLL. This was done to avoid maintaining this code in separate project, both public and private.
The new project will still out of the box on Windows but you will now need to get the DLL from here, until these are available in GZDoom release packages. For Linux and Mac users the following needs to be run before compiling GZDoom:
I just made a final change to the newly added ZScript sound API for unlimited sound channels:
A_StartSound had two boolean parameters that are now folded into the flag word. - the looping flag is identical with passing 'CHANF_LOOP|CHANF_NOSTOP', so now these two flags need to be set instead. There's a convenience definition of CHANF_LOOPING that does this with one value - the local flag must now be specifed as CHANF_LOCAL.
As a result of this change, all code from the last two weeks that used A_StartSound needs to be reviewed! If optional parameters are omitted this is very likely to produce incorrect results without a compiler error! In addition, all internal code still using A_PlaySound has been converted to A_StartSound and A_PlaySound officially been deprecated.
To verify the extent of how some engine features have been used by mods I need to get hold on all projects currently featured in the Projects section of the forum. There's just one huge problem here: It's over 5000 threads that need checking, I simply cannot do this alone.
So I just set up a private cloud storage where these things can be uploaded. If someone is interested in helping me out, here's the procedure:
1) get the login info for the cloud storage I set up, I'll send them via PM to interested persons. 2) Once set up ask for a range of threads to check. To make things manageable, ranges are thread titles in alphabetic order, you can arrange the forum display for that by going to the bottom of the page, select "Sort by", set it to "Subject" and "Ascending". I will generally hand out ranges by the first letter, e.g. "Get everything starting with 'H" from the "Levels" forum. 3) Download everything that has actual content and is not hosted on /idgames. Since I can batch download from /idgames without issues I do not need anything hosted there. 4) Upload to the cloud storage I provide.
I think if I can get help from maybe 10 people we can handle all those 5000 threads in a few days, I already started with the levels forum and will continue on it.
The main reason for this undertaking is that I really would like to fix the texture scaling feature, but have no good numbers of how many mods depend on ZDoom's old per-texel-panning feature that needs to be disabled for the feature to be fixed. The content on /idgames depending on it is virtually non-existent and could be handled with compatibility patches but many high profile mods are not present there.
Also, if someone knows of mods on ModDB that may need checking, those are of course also appreciated.
As some of you may have noticed on Discord, QZDoom devbuilds have begun to roll out recently.
These contain a selected 'batch' of features that have been merged into QZDoom for testing, and they certainly could use it. The sooner they're tested, the sooner bugs can be culled and the feature can be certified as ready for GZDoom itself.
Since they're in batches, not all of them have been pulled in yet to ensure QZDoom can keep up with changes made by GZDoom. This post will continuously be updated with information pertaining to what features are in and how they work. ----- ***NOTICE*** Please bear in mind, QZDoom is an experimental testing ground. Therefor, changes to anything can happen at any given time with each new DRD build being released. This is much more volatile and can certainly break the new features.
I will post updates when something changes and detail all you need to know. ----- Here is what's in so far:
----- PSPF_PLAYERTRANSLATED Overlay Flag A flag for A_OverlayFlags, used to colorize the player's overlay/weapon sprites based on the user's color settings. For the ZScript savvy, this is known as bPlayerTranslated flag inside of the psprite class. ----- Clearscope Index() For the ZScript savvy, the Index() functions in Sector, SectorPortal, Line and Side structs have been given clearscope. ----- SetSlot and ClearPlayerClasses Override Introduces a new menu option for SetSlot and ClearPlayerClasses. If enabled, the default behavior applies: keyconf will wipe out all player classes and weapon slot settings. Otherwise, it will only clear out vanilla IWAD player classes, and keep all weapons assigned in keyconf.
If you find any issues or bugs, please make sure to include [QZDoom] in the title of the bug report for clarity.
Roughly 2000 users have reported by now, here's the first preliminary results, in parentheses the numbers from 3.5.0 with roughly 2000 users:
79% (67%) use Vulkan compatible hardware. 11% (17%) use hardware which can run OpenGL with all features enabled but cannot run Vulkan. 10.6% (12.6%) use legacy hardware which requires fallback solutions in the renderer and only has limited support for some features.
1.3% (3.3%) use a real 32 bit system. Mac numbers are not representative yet due to delayed availability of the binary. 5.7% (6.3%) use Linux.
69% use a system with 4 CPU cores and more - among the Vulkan compatible systems this is 82%.
The big things are obvious:
First, 32 bit systems are clearly on their way out. They have massively decreased since last year, but unlike last year where they started weak but picked up a bit as more numbers came in, this time the opposite happened: They started weak but only got weaker day after day. The writing on the wall is very clear. 32 Bit is dying - and dying fast. Projecting into the future I think we can assume that after the coming Christmas season it will drop even further into irrelevance as more old computers get retired. With this in mind, the current plan is to continue support until the end of the year, but then discontinuing it and adding some features incompatible with 32 bit that have been requested - the biggest one being 64 bit integer support in the VM, meaning there will only be 64 bit builds being made for all platforms from next year on. So far there have been no reports from 32 bit Linux systems, it has only been Windows and judging from the configurations, it is nearly all ancient systems from at least 8 years ago.
These numbers are very much in line with what Steam's hardware survey had been indicating all along.
The second thing is legacy graphics hardware support. Again, the trend is very clear: Old graphics cards are disappearing fast, and what is even worse, all manufacturers have already deprecated their non-Vulkan supporting hardware, no longer providing driver updates for it. Although the current numbers are still far too high to even think about discontinuing OpenGL, it is very clear that support for such hardware in general is evaporating a lot faster than the user share here declines. It is only a matter of time until operating system support for such hardware will get bad enough to force it out of the market. I think the final decision here will not be made by declining user share but by external factors forcing us to move on in the not so distant future. It's not that I expect OpenGL to disappear, but the legacy hardware to get squeezed out at which point supporting a legacy API becomes pointless.
The third important thing for GZDooom is the number of installed CPU cores. Right now, 70% of all users and 82% of users with Vulkan compatible hardware have 4 or more cores, meaning that for the Vulkan backend multithreaded optimizations are definitely a viable option.
Last, but not least, Windows 10 currently has a user share of 75%, Windows 7+8 together have 13%. This won't have any impact on GZDoom itself, because GZDoom does not use any post-Windows 7 features for anything, but should be a clear warning sign to Windows 7 holdouts: The system is disappearing from the market A LOT quicker than Windows XP when it reached the end of its life!
I recently installed Visual Studio 2019 and found out that it only supports compiling for Windows XP via legacy toolsets from older compilers. Yes, that is correct: Microsoft has finally dropped XP support from their current line of compiler tools.
This has an important implication: Going forward and using newer C++ language features in the source means that none of these will be backported to work with the XP compatible toolset.
Checking the database from the 3.5 survey. The survey contains 31480 distinct users not requiring the vintage build. Of these 31480 users there were 41 users on Windows XP, meaning we are left with roughly 0.13% of our users on Windows XP.
Under these circumstances there is little point to continue XP support, the user base is simply too small to justify shutting ourselves off from future C++ versions and having to install a large package of legacy build tools and SDKs, so with the next release Windows XP support will be dropped from the official releases and no attempts will be made anymore to keep the code compatible with such older toolsets.
GZDoom is in the transition of its localized string handling right now. The goal is to have the language resources in a place where it can be edited by external contributors that do not use the GZDoom Github project directly - they are hosted on Google Docs so that anyone with interest to contribute can request access to edit.
In the future the language.enu lump will no longer exist, instead, all texts will be read from a spreadsheet file within gzdoom.pk3 which is periodically updated from the public versions mentioned above.
This has a few implications on how text content needs to be handled - editing the language files within the GZDoom project is no longer possible because they no longer represent the master version of the text resources. For pull requests this means that they have to do a minor bit of added work to get the newly added strings to where they belong: Instead of editing language.enu, the new texts will have to be added to the PR as a comment, outside the actual changeset so that if the PR gets merged they can be added to the spreadsheet easily.
Please note that since the text data in the Github repo is not the master resource, any alteration of it by a PR needs to be rejected without exception.
My hopes are that there's some interest here to help fill in some gaps. If you want to contribute, please continue reading.
This Google spreadsheet will serve as the master text list for GZDoom in the future. What gets in here will get into the next release. Any contributions should be submitted in spreadsheet form and formatted so that they can be easily copied into this master list.
This means, you should download this sheet, and depending on whether you want to complete an existing language or add a new one, either edit the column for your language or add a new one. If you start working on something please post a quick note here. Alternatively you may ask to get write access to this one. For that, please send me a PM.
Also, please make intermediate submissions of your work if parts are complete so it can be reviewed by other users.
If someone is interested in contributing some graphics work but not actually translating, there are still some characters to be added to the fonts. Here's a spreadsheet with the current status:
Disregarding Chex Quest's BigFont which is already being worked on, the entries marked red are missing for the current set of languages, and the ones marked orange are missing for languages that are currently being translated. Yellow ones would be an extra, but right now no language requiring these characters has seen any work. All other colors mark characters that won't be needed or are already done.
People using the git repo to self compile or those using devbuilds may have noticed that the binaries from the master branch have become somewhat unstable.
This was the result of some bad refactoring that turned out harder to fix than expected. Unfortunately there is no easy solution to fix this code on short notice. It would require a lot of time to straighten things out so in order to get back a stable master branch I decided to roll back the abovementioned refactoring and then reconstruct a new branch, only containing the clean commits. But due to the extent of the changes - we are talking about 140 commits here from which 50 had to be re-applied this cannot be done without actually resetting master to a different branch in the repo.
This means that everybody working directly with the repo will have to do a rebase of master, once the changeover has been made. I have to apologize for this but the alternative would be a prolonged period of extreme instability that would be detrimental to the project itself.
Roughly 2000 users have reported by now, here's the first preliminary results:
67% use Vulkan compatible hardware 17% use hardware which can run OpenGL with all features enabled 12.6% can run the modern render path (i.e. they are OpenGL 3.3 compatible) 3.4% run the legacy (OpenGL 2.x) render path.
3.3% use a real 32 bit system. There really was 1% of users which only ran the legacy build on modern hardware! 2.7% use a Mac 6.3% use Linux 3.3% used a real 32 bit system 5 users reported Windows XP
So what does this mean? Obviously for Mac and Linux the numbers are still too small to make any conclusions why they have changed.
Overall, Vulkan capability went from 57% to 67% in a mere 4 months! I think this trend is more than obvious. Non-Vulkan but modern OpenGL-capable cards went from 34% to 29%, unfortunately this wasn't split like here in the old survey so it's hard to say how this really developed. This is even more obvious for real legacy hardware which was nearly halved in user share over the last couple of months.
I believe the trend this shows is very evident: The legacy segments are declining rapidly. I am quite certain that, if we do another survey at the beginning of 2019, after this year's Christmas business has run its course, that OpenGL 2.x will have been reduced to a little more than background noise, and this should be a clear warning to anyone still running such hardware: Support for this will end rather sooner than later. The same may be true for 32 bit. This has also nearly shrunk in half over the last 4 months.