Specifically, this commit only adds copies of licenses if we are
required to do so. For example, this commit adds a copy of libacm’s
license because libacm’s license requires that we include copies of
libacm’s license with binary copies of libacm. This commit does not add
a copy of zlib’s license because zlib’s license doesn’t require us to do
so.
Fixes#295.
Before this change, the CI script had a special step that would ensure
that CI artifacts contained a copy of Descent 3’s license. This change
replaces that special CI step with a CMake target.
The main motivation behind this change is to make it easier for people
to create packages for Descent 3. Before this change, if you wanted to
create a package for Descent 3, then you would have to manually ensure
that your package contained a copy of the GPL.
All functions, that uses cf_ReadBytes(), checks return size, but don't handle potential exceptions. That leads to segfaults on reading of damaged files (i.e. broken savegames).
The last library opened with cf_OpenLibrary() will be the first to be searched for DLLs. This way we make sure to load our x64 DLLs before the x86 versions from the original game data.
Functions declared in idmfc.h were prefixed by both macros `EXTERN` and `DLLEXPORT`. `EXTERN` expands to `extern "C"` for C++ code, and `DLLEXPORT` expands to `extern "C"` for C++ or `extern` for C code, making up two `extern` qualifiers for C++ code. We now only use DLLEXPORT macro.
D3 used to support Aureal 3-Dimensional sound cards, providing 3D spatial audio. The hardware and drivers is outdated, so all support in code has been removed, including UI mixer setting.
Read more about A3D here: https://en.wikipedia.org/wiki/Aureal_Semiconductor#A3D
This definition was used to control the accessibility of some class members, changing protected qualifiers to public. This introduced unnecessary coupling between components and headers.
All conditional access specifiers have been set to public, which should not be a problem given the low number of classes that actually used affected members. Another albeit more complex solution could have been to use friend classes.