* Linting
* Fix potential crash when having a multiplayer notification sound configured that is no longer available
* New media finder architecture
* Unit tests for new media finder architecture
* Apply new media finder architecture to solve "allow all mod sounds as multiplayer notifications" request
* Make DeveloperConsole callable from WorldScreenMenuPopup
* Better WorldScreenMenuPopup single/dual-column logic
* Allow developer console to stay open and persist history
* Fix console tab key closing onscreen keyboard
* Give the now persisted console history an upper size limit
* Ensure "up" always gives the new entry
* Fix merge leftovers
* Reviews
* Barbarian encampments are no longer a HashMap since #9374 so that old compat code is unreachable
* Rename SerializationTests to GameSerializationTests and add a barb camp to the game
* Add SerializationTests (roundtrip tests for classes with custom serialization)
* Convert setSerializer to implement Json.Serializable where possible
* Changed building construction priority to consider more possibilities
* Fixed addBuildingChoices taking into account non-buildable buildings
* Reduced first worker priority
* Fixed negative value buildings and changed the values of some buildings
* Aggressive personality wants to build experience buildings more
* Removed the unnecessary parameter in each of the apply.* methods
* Some UI architecture changes
* Some UI architecture changes - merge Kdoc update from another PR
* Remove experimental status of the key bindings UI
* Minor update to keyboard tutorials
* Minor readability linting: A few color names instead of hex codes
* Fix links from Options not working when called from MainMenuScreen
* Added behaviours
* Added the behaviours to the docs
* Fixed spelling
* Fixed references to PersonalityValue.Military
* Commented out Personality Behaviours docs and added a message
* Changed the names of some of the new personality behaviours
getCapital() already allows null values so all in all a pretty minor change
What this means is from a practical perspective is that
- getCapital() returns first city
- isCapital() returns false for all (for conditionals, UI indicators, etc)
This was a result of going through all the getCapital() references and adding 'false' to them until I saw the folly of my ways
* Reworked how city connection is calculated
* Fixed neighboringCities being saved
* Improved the A* road finding to work!
* Fixed railroad upgrading incorrectly
* Workers will now try to swap with lazy units blocking them
* Improved support for military worker units
* Worker checks if they can swap with the unit before trying to swap
* Added right click city selection to spy move button
* Fixed random indenting again
* Fixed city buttons moving back up
* Added esc binding to close move spy action
* Added spy selected panel
* Fixed not clicking on a city crash
* Fixed spy selection and deselection
* Made viable cities more visible
* Fixed accidental change
* Spy icons can now be right clicked to enter the map moving view
* Added an X button to close out of the moving spy screen easier.
* Removed extra white space
* Added coup success calculation
* Added a coup button
* Added a coup button functionality
* Improved coup chance calculation
* Added coup effects
* Fixed random value being too high
* Fixed percent chance roll
* Hid enemy spy factor from the chance text
* Added coup notifications
* Added translations
* Updated a notification
* Style changes
* Put some text onto multiple lines
* Fixed "failed staged" notification
* Added missing translation
* Finished fixing merge conflicts
* Added AI to city-state coups
* Coup notifications are now sent to the spectators as well
* Changed spy rank modifier to be additive
* AI doesn't settle locations with less than 50 value
* Settlers try and found cities at a distance of 7 more
* Reduced the value of being on the coast
* RankTile quits early if the tile is already owned