Adds simple string / integer concatenation functions.
Many of the uses of `fmt::format` are simply concatenation
of a few strings and integers.
`StrCat` is an easier-to-read alternative to such uses of `fmt`.
Looks like vsync doesn't work on NXDK at the moment.
Defaults it to false and hides it from the menu.
It is still possible to manually enable it via `diablo.ini` for testing.
1. Store all key data and all values data as 2 char arrays.
2. Change map keys to char pointers.
3. Change map values to offsets into the values array.
Example savings for Russian: 460 KiB -> 374.2 KiB (-85.8 KiB)
* Map: 68.5 KiB (with `string_view` keys it would be 101.5 KiB)
* Keys array: 108.7 KiB
* Values array: 197.0 KiB
The version in Ubuntu 22.04 comes without `ConvertUTF.{h,c}`.
We actually do not need `ConvertUTF.{h,c}` and starting from
v4.19 it is possible to tell SimpleIni to not include it
by setting `SI_NO_CONVERSION`.
Sets `SI_NO_CONVERSION` and raises the minimum required SimpleIni
version to 4.19.
This variable is controlled/set by the code in that file, this also lets other files have more specific/relevant includes instead of the monolith that is diablo.h
This constant is defined as 1 when building for iphone, 0 for MacOS, and undefined on other platforms. To get the expected behaviour we need to check it's defined and non-zero.
clang-tidy warns about the unnecessary copy for these params
Could also potentially use std::make_unique if the Action constructor wasn't declared private?
The gamepad cursor (inventory, spells etc) no longer relies on warping a
real mouse cursor. This should make things work better on platforms that
do not support this, like Wayland.