User CVARs can be stored in member variables for quicker access
Unconditional call to G_CheckDemoStatus() destructs and recreates such CVARs
Dangling pointers could be accessed during the last game tick, e.g. from event handlers
https://forum.zdoom.org/viewtopic.php?t=65150
Add 'useowncoloradd_{top,mid,bottom}' sidedef properties to the UDMF
spec
Only use side's additive colors if 'useowncoloradd_(top|mid|bottom)' is
set.
Rename UseOwnColors flag to UseOwnSpecialColors
Add UseOwnAdditiveColor flag to side_t::part
Add EnableAdditiveColor to side_t
Add Side.EnableAdditiveColor to ZScript API
Sector.SetAdditiveColor actually called Sector.SetSpecialColor
Add use boolean property, used to determine whether or not to override the sector's additive wall colour with the side's additive colour.
The new specification is more flexible, and allows assigning additive
colors to individual parts of a sector (walls, sprites, flats) and even
individual parts of a side (top, middle, bottom)
Add AdditiveColors arrays to sector_t and side_t::part
Initialize AdditiveColors arrays to 0
Export AdditiveColors to ZScript
Save AdditiveColors in saved game files
Use colors from AdditiveColors arrays when setting the additive color
for the render state
Add code to parse the new UDMF additive color properties
Remove additive color slot from sector color/part enum
Add SetAdditiveColor to sector_t and side_t
Add GetAdditiveColor to side_t
Export new methods and additive color arrays to ZScript
# Conflicts:
# src/hwrenderer/scene/hw_sprites.cpp
# src/hwrenderer/scene/hw_walls.cpp
# src/hwrenderer/scene/hw_weapon.cpp
# Conflicts:
# src/gl/scene/gl_walls_draw.cpp
# src/gl/scene/gl_weapon.cpp
# src/hwrenderer/scene/hw_flats.cpp
# src/r_defs.h
Also, make sure the alpha for the additive colour is 255.
# Conflicts:
# src/hwrenderer/scene/hw_sprites.cpp
# src/hwrenderer/scene/hw_walls.cpp
# src/hwrenderer/scene/hw_weapon.cpp
# Conflicts:
# src/gl/scene/gl_weapon.cpp
Rename ColorAdd to AddColor
Add AddColor to FRenderState
Tweak SpecialColors array in ZScript to include the additive color
Add uAddColor to the shader compiler
Add uAddColor to the texel
# Conflicts:
# src/gl/shaders/gl_shader.cpp
# src/hwrenderer/scene/hw_flats.cpp
# src/hwrenderer/scene/hw_renderstate.h
# src/hwrenderer/utility/hw_draw2d.cpp
# Conflicts:
# src/gl/scene/gl_flats.cpp
# src/hwrenderer/scene/hw_flats.cpp
Exit_Normal and Exit_Secret specials imply addition conditions to make a decision about proceeding to the next map
A few scriptified actors require a bypass of these conditions in order to work properly
src/posix/cocoa/i_main.mm:225:12: error: Objective-C declarations may only appear in global scope
src/posix/cocoa/i_main.mm:247:17: error: Objective-C declarations may only appear in global scope
src/posix/cocoa/i_main.mm:545:2: error: expected '}'
* Right/middle clicking no longer cancels out the mouse motion events
* The events for the side mouse buttons (EV_GUI_BackButtonDown/Up, EV_GUI_FwdButtonDown/Up) were never fired
* The EV_GUI_WheelRight/Left events were never fired
* The key bindings for mouse buttons above 3 (from 4-8) were broken - pressing MOUSE4 would bind to MOUSE6, for example
With JIT enabled, an implicit test for null self pointer is added to generated code
This has no effect without JIT as VM verifies a pointer before calling a native method
https://forum.zdoom.org/viewtopic.php?t=64961
IWAD wasn't detected properly, and wrong texture can be picked as a hires replacement (e.g., SLADRIP1 from Ultimate Doom instead of TNT)
https://forum.zdoom.org/viewtopic.php?t=64915
To ensure that no broken relations occur, any change in the list must be handled by a write barrier, not just the single message that gets added.
# Conflicts:
# src/g_statusbar/shared_sbar.cpp
'last line needs update' flag cannot be set when console is empty as there are no lines at all in this case
https://forum.zdoom.org/viewtopic.php?t=64909
# Conflicts:
# src/c_consolebuffer.cpp
Old graphics, like mine (Intel Sandybridge Mobile, GL 3.0 Mesa) do not support this, therefore most of the time RFL_SHADER_STORAGE_BUFFER wasn't unset (I found no consequence of this on my machine, but better safe than sorry).
Found out by Valgrind. (patch by edward-san)
The message is always printed for any use of deprecated global variable
If such variable is accessed inside a deprecated function from a core script lump, the message is printed only when verbosity level is set to highest
https://forum.zdoom.org/viewtopic.php?t=64830
# Conflicts:
# src/scripting/backend/codegen.cpp
Script position is now initialized at the very beginning of decorate parsing process
Script position no longer contains uninitialized file name
https://forum.zdoom.org/viewtopic.php?t=64836
This is done by putting a font.inf file into the folder.
Current options are "Kerning", "Scale", "FontHeight" and "SpaceWidth"
# Conflicts:
# src/textures/textures.h
# src/v_font.cpp
# Conflicts:
# src/v_font.cpp
To make things easier, DBIGFONT, SBIGFONT and HBIGFONT will now be renamed in the lump directory to make things a bit easier to handle.
Another change is to make font folders atomic units to prevent cross-pollution between incompatible fonts. The only exception to this are the def* folders because they need to piece together their fonts from both zd_extra.pk3 and the IWADs.
A multi-lump font can be created by putting all characters into a subdirectory of fonts/ with the intended name. Each character needs to be named by its character index as hex number.
So far this is only active for the predefined small fonts
# Conflicts:
# src/v_font.cpp
There was no read barrier inserted for AActor object while it's a subject of garbage collection
Pointer stored in TObjPtr<> was reinterpreted as void* because of vararg function
https://forum.zdoom.org/viewtopic.php?t=64771
# Conflicts:
# src/dobjgc.h
# src/p_acs.cpp
The lowercase Sigma letter in Greek has two different forms (σ and ς), which changes depending on its placement in a word, but in uppercase and smallcaps contexts, it only has one look regardless of word positioning. If the character ς is missing, it should fall back to σ.
(patch by Graf & Nemrtvi)
* - Added support for monospacing alignment modes to HUDFont / BaseStatusBar.DrawString
* - added underlying type declaration for EMonospacing
* - replaced "#include v_video.h" with a declaration of EMonospacing
The counter variable was not only used incorrectly, it was completely redundant.
This still has a byte limit due to how the network code works so for non-Latin languages may result in shorter strings.
This deprecated CharAt and CharCodeAt for being unsuitable for text processing and in the case of CharCodeAt also for being buggy.
A new replacement, ByteAt has been added that reads a string byte by byte, as well as CodePointCount, which counts the amount of Unicode code points in a string and GetNextCodePoint which reads the string code point by code point.
Note that while this woll work as intended with the currently supported languages as a means to read single characters, there is no guarantee that this will remain so if Unicode support gets extended to things which break the "one code point == one character" assumption.
At least under MSVC this function reports 0x85 as whitespace, but it is a continuation byte for UTF-8 sequences and may not be treated as whitespace.
(patch by Graf)
This function was written for already validated UTF-8 but not for text that can be mixed with ISO-8859-1.
To handle that properly it needs to do a bit more validation to avoid mangling its output and instead reject invalid input.
* prefer accent-less lower case over uppercase letters if an accented lower case letter cannot be found.
* added accent-less mappings for Latin Extended 1 (0x100-0x17f) and some easy to handle characters between 0x200 and 0x220. This should allow to display all Eastern European text without empty gaps for missing letters.
# Conflicts:
# src/v_font.cpp
* the window class name was still ASCII, thanks to some totally pointless and ultimately dangerous type cast to LPCTSTR which rendered all type checks ineffective.
* use wWinMain instead of WinMain so that a Unicode argv gets created. For whatever reason, the ANSI startup leaves this variable empty.
* added a 'disablecrashlog' CCMD for Windows. It is a lot more useful with a debugger present to get the standard crash notification from the system which allows opening a debugger than the crash log and no option to open a debugger.
This still contained pieces where a multibyte string was passed through SendMessage and WM_SETTEXT. All these have been replaced with SetWindowTextW.
This commit also removes the never used crash log upload code and all associated assets because it is extremely unlikely that such a feature will ever be implemented.
This was broken by several small unicode-incompatible code fragments.
This commit also removes the input limit for the player name and the savegame description. With multibyte encoding, limiting them to a fixed length did not work right.
Currently these will just overflow the fields if the text becomes too long, this needs some additional work.
Also changed this to use the console font because it is far better equipped with special characters than the small font.
# Conflicts:
# src/ct_chat.cpp
# Conflicts:
# src/ct_chat.cpp
This also necessitated some character remapping in the console font to move the Windows-1252 extra characters to their proper Unicode code points.
# Conflicts:
# src/CMakeLists.txt
# src/posix/sdl/i_input.cpp
# src/scripting/backend/codegen.cpp
# src/v_font.cpp
# Conflicts:
# src/c_console.cpp
With localization for non-Latin languages on the support list the multibyte API doesn't cut it anymore. It neither can handle system text output outside the local code page nor can an ANSI window receive text input outside its own code page.
Similar problems exist for file names. With the multibyte API it is impossible to handle any file containing characters outside the active local code page.
So as of now, everything that may pass along some Unicode text will use the Unicode API with some text conversion functions. The only places where calls to the multibyte API were left are those where known string literals are passed or where the information is not used for anything but comparing it to other return values from the same API.
# Conflicts:
# src/rendering/hwrenderer/postprocessing/hw_postprocess.h
# src/win32/base_sysfb.cpp
# src/win32/i_main.cpp
# src/win32/win32basevideo.cpp
# src/win32/win32glvideo.cpp
# Conflicts:
# src/version.h
# src/win32/i_main.cpp
# src/win32/i_system.cpp
# src/win32/optwin32.h
# src/win32/win32gliface.cpp
# wadsrc/static/language.enu
The Linux backend looked like it didn't handle anything non-ASCII at all, but this all needs to be tested.
Windows will be a bit more work because it requires using the Unicode API for creating the main window.
The added table may be overkill but this way the font engine is prepared for things to come.
Currently the text placement in the menu seems a bit broken, that's a task for later.
(patch by Graf)
# Conflicts:
# src/v_font.cpp
* Fixes for Door_AnimatedClose
- Fixing that Door_AnimatedClose would be activated on an already closed door (playing the sound and the 1st frame of the animation)
- There was no check if the Door is already Animated when a tag was used with Door_AnimatedClose
* Removed doubled "door->StartClosing();".
Now it's no longer possible to manipulate TID hash from arbitrary location
For example, this prevents linking of destroyed object into the hash
TID member is still public but writing to it is limited to a few very specific cases like serialization and player traveling between levels
https://forum.zdoom.org/viewtopic.php?t=64476
# Conflicts:
# src/actor.h
# src/maploader/maploader.cpp
It's "doom.id.doom1/2" instead of "doom.doom1/2" now.
The config file's content will be renamed and for lump filtering a fallback has been added - note that you cannot combine both naming schemes! The old one has to be considered deprecated now.
This also removes the duplicated content necessitated by the old naming scheme.
# Conflicts:
# src/version.h
If this is done within the intermission code, both intermission and menu will write to the same global variables and destroy their data, this became very apparent when it altered the screen scale for the conversation.
# Conflicts:
# src/g_game.cpp
GCC 8 complains that it can't find relevant functions:
/wrkdirs/usr/ports/games/gzdoom/work/gzdoom-g3.7.2/src/m_png.cpp:669:42: error: call of overloaded 'BigLong(uint32_t)' is ambiguous
chunklen = BigLong((unsigned int)x[1]);
^
In file included from /wrkdirs/usr/ports/games/gzdoom/work/gzdoom-g3.7.2/src/m_png.cpp:44:
/wrkdirs/usr/ports/games/gzdoom/work/gzdoom-g3.7.2/src/m_swap.h:212:15: note: candidate: 'long unsigned int BigLong(long unsigned int)' <deleted>
unsigned long BigLong(unsigned long) = delete;
^~~~~~~
/wrkdirs/usr/ports/games/gzdoom/work/gzdoom-g3.7.2/src/m_swap.h:213:6: note: candidate: 'long int BigLong(long int)' <deleted>
long BigLong(long) = delete;
This is on FreeBSD/powerpc64.
These can cause highly dangerous recursions and execute play code deep inside the renderer and since the hardware renderer does not have these, there is very little point for the software renderer to retain them.
# Conflicts:
# src/polyrenderer/poly_renderer.cpp
# src/rendering/swrenderer/line/r_walldraw.cpp
# Conflicts:
# src/swrenderer/line/r_renderdrawsegment.cpp
The side effects here broke other maps and this is really too glitchy to be turned on unless really necesasary.
# Conflicts:
# src/gamedata/g_mapinfo.h
# src/gamedata/stringtable.cpp
# src/maploader/maploader.cpp
# src/p_map.cpp
# src/p_udmf.cpp
There are two options here - one only disables the vertical thrust and the other goes back fully to the original non-z-aware code.
Both options are settable through MAPINFO.
For the compatibility presets, the normal ones only disable the vertical thrust, the strict ones force use of the old code entirely.
# Conflicts:
# wadsrc/static/language.csv
Now, all menus will use the same scale, i.e. it only depends on the screen width and a base size of 640. This nearly universally yields better results than trying to make a 320x200 screen fit.
The only exceptions to this are the intermission screens and the level summary. These, unlike the menu need to try to make a 320x200 screen fit, but without all the hackery that was present to adjust the menu display.
Note that since this affects globally visible script variables, both the intermission and summary drawers will not use their own set but instead temporarily override the global setting as long as they run their own code.
Changing the use of variables here might cause much worse problems with menu code so it wasn't attempted
# Conflicts:
# src/v_video.cpp
Default language is now always American English, just like on Linux and macOS.
# Conflicts:
# src/g_cvars.cpp
# src/gamedata/stringtable.cpp
# src/textures/texturemanager.cpp
# Conflicts:
# src/win32/i_system.cpp
The most important one is the autosave tagging. This was done because the old printout was missing the year and printed the month as a 3 character English string, sabotaging any attempt to sort the autosaves by anything meaningful.
This didn't behave like an assignment operator so it shouldn't be one, especially since the two places where it got called need different functionality.
8 bytes is the minimum header size for DMX, so for one byte of sample data it has to be 9 bytes.
This was causing access to invalid memory when trying to read the header of something too short.
For other file formats this is of no concern because none has a header this short.