* Sync pl.po to source code.
* Fix "U.S. Sales" translation.
* Change "żywotność" to "witalność" so it flows better in character stats screen.
* Button combo bindings translation.
* Player inspection translations.
* Debug commands translations.
* Inventory sorting translations.
* Quick spell translations.
* Chat log translations.
* Consistent translations for "armor" and "armor class".
* Update store label translations.
* Different take on resists translation on character screen.
* Shorten Experience translation to avoid overflowing.
* Improve the validate_translations.py script.
1. Do not draw foliage with the pause trn.
2. Display the number of steps.
3. If the tile is not walkable (allowed for destination tile), display
the number of steps in yellow.
1. Updates the Dockerfile to the same image and flags as the CI.
2. Sets `-O2` as the default CMake Release flag rather than passing it
in a custom way.
Our implementation has a more modern interface and only
supports the features that we care about.
It always outputs `\n` as newlines and does not output BOM.
The modern interface eliminates awkward `c_str()/data()` conversions.
This implementation preserves comments and the file order of sections
and keys. New keys are written in insertion order.
We now also support modifying and adding default comments,
which may be a useful thing to do for the especially tricky
ini options (this PR doesn't add any but adds the ability to do so).
Sadly, this increases the RG99 binary size by 24 KiB.
I'm guessing this is because the map implementation generates
quite a bit of code.
Note that while it might seem that using `std::string` for every key and
value would do a lot of allocations, most of these strings are
small and thus benefit from Small String Optimization (= no allocations).
Looks like the KallistiOS Dreamcast SDK disables double support
by default: 495e77fd60/environ_dreamcast.sh (L16)
We don't really need doubles in this code.
The one place where we might have needed them is the SMK video
decoder, handled in a separate PR.
SMK format actually defines frame durations in units that are 0.01ms:
91e732bb69/src/SmackerDecoder.cpp (L329-L334)
That's great because it means we can do everything using integer math.