Splits the FPS viewer out of the display class and into its own modeless dialog. This serves as a proof-of-concept for further modeless GUI in-game dialogs. Admittedly, it only works because I explicitly disconnect it from the UI event context, since it doesn't need to receive events.
This also introduces a new tracked_drawable interface that encapsulates the fps logic. Any class that inherits from it can have its render stats displayed using the new fps_report dialog.
Previously, `--log-debug='*'` would not match all domains.
Similarly, `conf*` would not be a correct pattern, etc.
With this change, special handling of top-level domains is removed.
For example, the config domain will not be matched by `conf*`.
All domains can be matched by the magic string "all" as before,
or by using `*`.
Basic manual testing was performed for this PR:
* broken domain patterns that do not match anything
result in an error, as expected.
* patterns containing a comma (delimiter)
are handled "correctly", that is, individual components
are understood and processed separately.
* patterns "all" and "*" were tested.
* specifying "conf*" correctly enables the config domain.
* specifying "gui/*" does not enable the config domain.
Fixes#10052
As pointed out by @Wedge009 / @stevecotton in #9682, this string may need to be translated differently depending on the type of unit being attacked.
Also removes the message when attacking a Thief - Rogues (which IIRC are the only thief-line unit you fight in this campaign) have a ranged attack.
* Stops table from growing beyond the max width due to padding.
* <table width='full'> causes table to grow to available width.
* Add a `padding` key to `[rich_label]` that allows setting the internal padding to a custom value.
This pull request separates TDG's magic system and its spells, making it easier to create your own sets. I also fixed a bug with spell unlocking that I reported to @Dalas121 last year.
Turns out we can use a unique_ptr after all, we just need to define the dtor out-of-line once function_symbol_table is a complete type.
Also adds a move ctor and assignment operator. This is necessary since the unique_ptr makes the class non-copyable, and also fixes a case in unit_filter_attribute_literal where a move was attempted but no move ctor provided.
This allows defining an [game_presets] tag which contains [game] tags describing how to show the game in the lobby and what settings the game should use.
Functionally this adds an entry per [game] into the Matchmaking section of the MP lobby:
* If a player clicks Join and there are no previously created games from this "queue" that are open, then the server instead responds telling the client to create the game. The game is created directly using the settings defined in its [game] tag, so for the player it looks like they clicked join and then go straight to the MP staging screen.
* If a player clicks Join and there is an open game created from this "queue", then the server instead responds telling the client the actual ID of the game to join and the client then joins that game just as if they had clicked Join on a normal game.
Currently only implemented for mainline.
In order to properly distinguish the overloads, the second takes the keywords instead of the filter text. This was confusing, so now `translation::ci_search` properly handles vector input. Removes the need for the second overload.