Ensure that there is no coroutine yield between confirmation of login
and update of player_connections_. Otherwise another login under same
name could succeed if it happened before handle_player() which resulted
in an assert later.
Makes all the cache management functions local to the cache class. There's no reason
to publicly expose it through locator given that the actual cache objects which that
API needs to function are local to this translation unit anyway.
This also cleans up the cache implementation in order to take advantage of the switch
from a vector to map awhile back. `copy_from_cache` was removed in favor of bounds-
checked access.
Add two maintenance scripts, to help transition from external copyright tracking to putting all info in the file metadata.
- One script to read read copyrights.csv and write data to Exif tags.
- One script to read the image Exif tags, and write to a CSV
This comment existed when the unit was still in EI campaign. It's been moved to core ages ago and yet, the comment, now no longer relevant outside of EI still persisted...
The code was moved to abilities.cpp so that it can be called from the units or attack_type functions, the attack_type function state necessary for the tags [filter_special_active] and [remove_specials] which I plan to implement when the code for filter_ability] is validated in its final form.
This allows permanently hiding the obnoxious help text tooltip that
constantly dances between the top and bottom of the screen depending
on what you're doing in the editor.
Icons provided by babaissarkar.
It's honestly not entirely clear what the right behavior is here. The way it is, to_bool is implicitly being invoked, which, given that this is supposed to hold an int, would always return false. And checking the int value doesn't seem to make sense either, since that would only exclude turns=0 (which would be a dumb value, but I'm not sure that's what this is for. So I figured a 'has attribute' check is best.