Before

…lines 1–9 unchanged (9 lines)
10import com.unciv.logic.BackwardCompatibility.guaranteeUnitPromotions
11import com.unciv.logic.BackwardCompatibility.migrateGreatGeneralPools
12import com.unciv.logic.BackwardCompatibility.migrateToTileHistory
13import com.unciv.logic.BackwardCompatibility.removeMissingModReferences
14import com.unciv.logic.automation.civilization.BarbarianManager
15import com.unciv.logic.city.City
16import com.unciv.logic.civilization.Civilization
17import com.unciv.logic.civilization.CivilizationInfoPreview
18import com.unciv.logic.civilization.LocationAction
19import com.unciv.logic.civilization.MapUnitAction
20import com.unciv.logic.civilization.Notification
21import com.unciv.logic.civilization.NotificationCategory
22import com.unciv.logic.civilization.NotificationIcon
23import com.unciv.logic.civilization.PlayerType
24import com.unciv.logic.civilization.managers.TechManager
25import com.unciv.logic.civilization.managers.TurnManager
26import com.unciv.logic.civilization.managers.VictoryManager
27import com.unciv.logic.github.Github.repoNameToFolderName
28import com.unciv.logic.map.MapShape
29import com.unciv.logic.map.TileMap
30import com.unciv.logic.map.tile.Tile
31import com.unciv.logic.map.toVector2
32import com.unciv.models.Religion
33import com.unciv.models.metadata.GameParameters
34import com.unciv.models.ruleset.GlobalUniques
35import com.unciv.models.ruleset.Ruleset
36import com.unciv.models.ruleset.RulesetCache
37import com.unciv.models.ruleset.Speed
…lines 38–41 unchanged (4 lines)
42import com.unciv.ui.audio.MusicMood
43import com.unciv.ui.audio.MusicTrackChooserFlags
44import com.unciv.ui.screens.savescreens.Gzip
45import com.unciv.ui.screens.worldscreen.status.NextTurnProgress
46import com.unciv.utils.DebugUtils
47import com.unciv.utils.debug
48import yairm210.purity.annotations.Pure
49import yairm210.purity.annotations.Readonly
50import java.security.MessageDigest
51import java.util.UUID
52
53
54/**
55 * A class that implements this interface is part of [GameInfo] serialization, i.e. save files.
56 *
57 * ### Clarification: *only* for classes that are serialized and deserialized - *not* pure Ruleset files.
…lines 58–494 unchanged (437 lines)
495
496 private fun addEnemyUnitNotification(thisPlayer: Civilization, tiles: List<Tile>, inOrNear: String) {
497 // don't flood the player with similar messages. instead cycle through units by clicking the message multiple times.
498 if (tiles.size < 3) {
499 for (tile in tiles) {
500 val unitName = tile.militaryUnit!!.name
501 thisPlayer.addNotification("An enemy [$unitName] was spotted $inOrNear our territory", tile.position.toVector2(), NotificationCategory.War, NotificationIcon.War, unitName)
502 }
503 } else {
504 val positions = tiles.asSequence().map { it.position }
505 thisPlayer.addNotification("[${tiles.size}] enemy units were spotted $inOrNear our territory", LocationAction(positions.map { it }), NotificationCategory.War, NotificationIcon.War)
506 }
507 }
…lines 508–813 unchanged (306 lines)

After

…lines 1–9 unchanged (9 lines)
10import com.unciv.logic.BackwardCompatibility.guaranteeUnitPromotions
11import com.unciv.logic.BackwardCompatibility.migrateGreatGeneralPools
12import com.unciv.logic.BackwardCompatibility.migrateToTileHistory
13import com.unciv.logic.BackwardCompatibility.removeMissingModReferences
14import com.unciv.logic.automation.civilization.BarbarianManager
15import com.unciv.logic.city.City
16import com.unciv.logic.civilization.*
17import com.unciv.logic.civilization.managers.TechManager
18import com.unciv.logic.civilization.managers.TurnManager
19import com.unciv.logic.civilization.managers.VictoryManager
20import com.unciv.logic.github.Github.repoNameToFolderName
21import com.unciv.logic.map.MapShape
22import com.unciv.logic.map.TileMap
23import com.unciv.logic.map.tile.Tile
24import com.unciv.models.Religion
25import com.unciv.models.metadata.GameParameters
26import com.unciv.models.ruleset.GlobalUniques
27import com.unciv.models.ruleset.Ruleset
28import com.unciv.models.ruleset.RulesetCache
29import com.unciv.models.ruleset.Speed
30import com.unciv.models.ruleset.nation.Difficulty
31import com.unciv.models.ruleset.unique.LocalUniqueCache
32import com.unciv.models.ruleset.unique.UniqueType
33import com.unciv.models.translations.tr
34import com.unciv.ui.audio.MusicMood
35import com.unciv.ui.audio.MusicTrackChooserFlags
36import com.unciv.ui.screens.savescreens.Gzip
37import com.unciv.ui.screens.worldscreen.status.NextTurnProgress
38import com.unciv.utils.DebugUtils
39import com.unciv.utils.debug
40import yairm210.purity.annotations.Readonly
41import java.security.MessageDigest
42import java.util.*
43
44
45/**
46 * A class that implements this interface is part of [GameInfo] serialization, i.e. save files.
47 *
48 * ### Clarification: *only* for classes that are serialized and deserialized - *not* pure Ruleset files.
…lines 49–485 unchanged (437 lines)
486
487 private fun addEnemyUnitNotification(thisPlayer: Civilization, tiles: List<Tile>, inOrNear: String) {
488 // don't flood the player with similar messages. instead cycle through units by clicking the message multiple times.
489 if (tiles.size < 3) {
490 for (tile in tiles) {
491 val unitName = tile.militaryUnit!!.name
492 thisPlayer.addNotification("An enemy [$unitName] was spotted $inOrNear our territory", tile.position, NotificationCategory.War, NotificationIcon.War, unitName)
493 }
494 } else {
495 val positions = tiles.asSequence().map { it.position }
496 thisPlayer.addNotification("[${tiles.size}] enemy units were spotted $inOrNear our territory", LocationAction(positions.map { it }), NotificationCategory.War, NotificationIcon.War)
497 }
498 }
…lines 499–804 unchanged (306 lines)

Before

source_file
package_header
package "package"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "badlogic"
. "."
identifier "gdx"
. "."
identifier "Gdx"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "Constants"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "GUI"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "UncivGame"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "json"
. "."
identifier "json"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "convertFortify"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "ensureUnitIds"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "guaranteeUnitPromotions"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "migrateGreatGeneralPools"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "migrateToTileHistory"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "removeMissingModReferences"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "automation"
. "."
identifier "civilization"
. "."
identifier "BarbarianManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "city"
. "."
identifier "City"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "Civilization"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "CivilizationInfoPreview"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "LocationAction"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "MapUnitAction"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "Notification"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "NotificationCategory"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "NotificationIcon"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "PlayerType"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "TechManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "TurnManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "VictoryManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "github"
. "."
identifier "Github"
. "."
identifier "repoNameToFolderName"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "MapShape"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "TileMap"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "tile"
. "."
identifier "Tile"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "toVector2"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "Religion"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "metadata"
. "."
identifier "GameParameters"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "GlobalUniques"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "Ruleset"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "RulesetCache"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "Speed"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "nation"
. "."
identifier "Difficulty"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "unique"
. "."
identifier "LocalUniqueCache"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "unique"
. "."
identifier "UniqueType"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "translations"
. "."
identifier "tr"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "audio"
. "."
identifier "MusicMood"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "audio"
. "."
identifier "MusicTrackChooserFlags"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "screens"
. "."
identifier "savescreens"
. "."
identifier "Gzip"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "screens"
. "."
identifier "worldscreen"
. "."
identifier "status"
. "."
identifier "NextTurnProgress"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "utils"
. "."
identifier "DebugUtils"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "utils"
. "."
identifier "debug"
import
import "import"
qualified_identifier
identifier "yairm210"
. "."
identifier "purity"
. "."
identifier "annotations"
. "."
identifier "Pure"
import
import "import"
qualified_identifier
identifier "yairm210"
. "."
identifier "purity"
. "."
identifier "annotations"
. "."
identifier "Readonly"
import
import "import"
qualified_identifier
identifier "java"
. "."
identifier "security"
. "."
identifier "MessageDigest"
import
import "import"
qualified_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "UUID"
block_comment "/**\n * A class that implements this interface is part of [Ga"...
class_declaration
interface "interface"
identifier "IsPartOfGameInfoSerialization"
class_declaration (+76 nodes collapsed)
block_comment "/** The virtual world the users play in */"
class_declaration
class "class"
identifier "GameInfo"
: ":"
delegation_specifiers
delegation_specifier
user_type
identifier "IsPartOfGameInfoSerialization"
, ","
delegation_specifier
user_type
identifier "HasGameInfoSerializationVersion"
class_body
{ "{"
line_comment "//region Fields - Serialized"
block_comment "/** Version that saved the game, set in [UncivFiles.gameInfo"...
property_declaration
modifiers
member_modifier
override "override"
var "var"
variable_declaration
identifier "version"
= "="
navigation_expression
identifier "CompatibilityVersion"
. "."
identifier "FIRST_WITHOUT"
property_declaration
var "var"
variable_declaration
identifier "civilizations"
= "="
call_expression
identifier "ArrayList"
type_arguments
< "<"
type_projection
user_type
identifier "Civilization"
> ">"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "barbarians"
= "="
call_expression
identifier "BarbarianManager"
value_arguments
( "("
) ")"
property_declaration (+23 nodes collapsed)
property_declaration
var "var"
variable_declaration
identifier "difficulty"
= "="
string_literal
" "\""
string_content "Chieftain"
" "\""
line_comment "// difficulty is game-wide, think what would happen if 2 hum"...
property_declaration
var "var"
variable_declaration
identifier "tileMap"
: ":"
user_type
identifier "TileMap"
= "="
call_expression
identifier "TileMap"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "gameParameters"
= "="
call_expression
identifier "GameParameters"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "turns"
= "="
number_literal "0"
property_declaration
var "var"
variable_declaration
identifier "oneMoreTurnMode"
= "="
identifier "false"
property_declaration
var "var"
variable_declaration
identifier "currentPlayer"
= "="
string_literal
" "\""
" "\""
property_declaration
var "var"
variable_declaration
identifier "currentTurnStartTime"
= "="
call_expression
navigation_expression
identifier "System"
. "."
identifier "currentTimeMillis"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "gameId"
= "="
call_expression
navigation_expression
call_expression
navigation_expression
identifier "UUID"
. "."
identifier "randomUUID"
value_arguments
( "("
) ")"
. "."
identifier "toString"
value_arguments
( "("
) ")"
line_comment "// random string"
property_declaration
var "var"
variable_declaration
identifier "checksum"
= "="
string_literal
" "\""
" "\""
property_declaration
var "var"
variable_declaration
identifier "lastUnitId"
= "="
number_literal "0"
property_declaration
var "var"
variable_declaration
identifier "victoryData"
: ":"
nullable_type
user_type
identifier "VictoryData"
? "?"
= "="
identifier "null"
block_comment "/** Maps a civ to the civ they voted for - `null` on the val"...
property_declaration (+22 nodes collapsed)
line_comment "// Set to false whenever the results still need te be proces"...
property_declaration
var "var"
variable_declaration
identifier "diplomaticVictoryVotesProcessed"
= "="
identifier "false"
block_comment "/** The turn the replay history started recording.\n *\n "...
property_declaration
var "var"
variable_declaration
identifier "historyStartTurn"
= "="
unary_expression
- "-"
number_literal "1"
block_comment "/**\n * Keep track of a custom location this game was sav"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Volatile"
var "var"
variable_declaration
identifier "customSaveLocation"
: ":"
nullable_type
user_type
identifier "String"
? "?"
= "="
identifier "null"
block_comment "/** List of unit names that have been taken in this game fro"...
property_declaration
var "var"
variable_declaration
identifier "unitNamesTaken"
= "="
call_expression
identifier "ArrayList"
type_arguments
< "<"
type_projection
user_type
identifier "String"
> ">"
value_arguments
( "("
) ")"
line_comment "//endregion"
line_comment "//region Fields - Transient"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
visibility_modifier
private "private"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "difficultyObject"
: ":"
user_type
identifier "Difficulty"
line_comment "// Since this is static game-wide, and was taking a large pa"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "speed"
: ":"
user_type
identifier "Speed"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
visibility_modifier
private "private"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "combinedGlobalUniques"
: ":"
user_type
identifier "GlobalUniques"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "currentPlayerCiv"
: ":"
user_type
identifier "Civilization"
line_comment "// this is called thousands of times, no reason to search fo"...
block_comment "/** This is used in multiplayer games, where I may have a sa"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "isUpToDate"
= "="
identifier "false"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "ruleset"
: ":"
user_type
identifier "Ruleset"
block_comment "/** Simulate until any player wins,\n * or turns exceeds"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "simulateMaxTurns"
: ":"
user_type
identifier "Int"
= "="
number_literal "1000"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "simulateUntilWin"
= "="
identifier "false"
property_declaration (+21 nodes collapsed)
line_comment "//endregion"
line_comment "//region Pure functions"
function_declaration (+257 nodes collapsed)
function_declaration (+160 nodes collapsed)
property_declaration (+33 nodes collapsed)
block_comment "/** Get a civ by name\n * @throws NoSuchElementException"...
function_declaration (+41 nodes collapsed)
line_comment "// This is for spectators who are added in later, artificial"...
function_declaration (+41 nodes collapsed)
function_declaration
fun "fun"
identifier "getCurrentPlayerCivilization"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "currentPlayerCiv"
function_declaration (+32 nodes collapsed)
block_comment "/** Get barbarian civ\n * @throws NoSuchElementException"...
function_declaration (+23 nodes collapsed)
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "getDifficulty"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "difficultyObject"
block_comment "/** Access a cached `GlobalUniques` that combines the [rules"...
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "getGlobalUniques"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "combinedGlobalUniques"
block_comment "/** @return Sequence of all cities in game, both major civil"...
function_declaration (+33 nodes collapsed)
function_declaration (+36 nodes collapsed)
function_declaration (+40 nodes collapsed)
block_comment "/** Gets civilizations in their commonly used order - City-s"...
function_declaration (+226 nodes collapsed)
block_comment "/** Returns the first spectator for a [playerId] or creates "...
function_declaration (+61 nodes collapsed)
function_declaration (+107 nodes collapsed)
function_declaration (+76 nodes collapsed)
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "isEspionageEnabled"
function_value_parameters
( "("
) ")"
: ":"
user_type
identifier "Boolean"
function_body
= "="
navigation_expression
identifier "gameParameters"
. "."
identifier "espionageEnabled"
function_declaration (+69 nodes collapsed)
function_declaration (+44 nodes collapsed)
function_declaration (+95 nodes collapsed)
line_comment "//endregion"
line_comment "//region State changing functions"
line_comment "// Do we automatically simulate until N turn?"
function_declaration (+32 nodes collapsed)
function_declaration (+696 nodes collapsed)
function_declaration (+326 nodes collapsed)
function_declaration (+52 nodes collapsed)
function_declaration (+60 nodes collapsed)
block_comment "/** @return `true` if someone has won - checks existing [vic"...
function_declaration (+63 nodes collapsed)
function_declaration
modifiers
visibility_modifier
private "private"
fun "fun"
identifier "addEnemyUnitNotification"
function_value_parameters (+26 nodes collapsed)
function_body
block
{ "{"
line_comment "// don't flood the player with similar messages. instead cyc"...
if_expression
if "if"
( "("
binary_expression
navigation_expression
identifier "tiles"
. "."
identifier "size"
< "<"
number_literal "3"
) ")"
block
{ "{"
for_statement
for "for"
( "("
variable_declaration
identifier "tile"
in "in"
identifier "tiles"
) ")"
block
{ "{"
property_declaration
val "val"
variable_declaration
identifier "unitName"
= "="
navigation_expression
unary_expression
navigation_expression
identifier "tile"
. "."
identifier "militaryUnit"
!! "!!"
. "."
identifier "name"
call_expression
navigation_expression
identifier "thisPlayer"
. "."
identifier "addNotification"
value_arguments
( "("
value_argument
string_literal
" "\""
string_content "An enemy ["
string_content "$"
string_content "unitName] was spotted "
string_content "$"
string_content "inOrNear our territory"
" "\""
, ","
value_argument
call_expression
navigation_expression
navigation_expression
identifier "tile"
. "."
identifier "position"
. "."
identifier "toVector2"
value_arguments
( "("
) ")"
, ","
value_argument
navigation_expression
identifier "NotificationCategory"
. "."
identifier "War"
, ","
value_argument
navigation_expression
identifier "NotificationIcon"
. "."
identifier "War"
, ","
value_argument
identifier "unitName"
) ")"
} "}"
} "}"
else "else"
block (+81 nodes collapsed)
} "}"
function_declaration (+180 nodes collapsed)
block_comment "/** Generate and show a notification pointing out resources."...
function_declaration (+95 nodes collapsed)
block_comment "/** Generate a notification pointing out resources. Only res"...
function_declaration (+651 nodes collapsed)
line_comment "// All cross-game data which needs to be altered (e.g. when "...
line_comment "// will be done here, and not in Civilization.setTransients "...
function_declaration (+834 nodes collapsed)
function_declaration (+61 nodes collapsed)
function_declaration (+300 nodes collapsed)
function_declaration (+90 nodes collapsed)
line_comment "//endregion"
function_declaration (+21 nodes collapsed)
} "}"
block_comment "/**\n * Reduced variant of GameInfo used for load preview and"...
class_declaration (+234 nodes collapsed)

After

source_file
package_header
package "package"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "badlogic"
. "."
identifier "gdx"
. "."
identifier "Gdx"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "Constants"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "GUI"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "UncivGame"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "json"
. "."
identifier "json"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "convertFortify"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "ensureUnitIds"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "guaranteeUnitPromotions"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "migrateGreatGeneralPools"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "migrateToTileHistory"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "BackwardCompatibility"
. "."
identifier "removeMissingModReferences"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "automation"
. "."
identifier "civilization"
. "."
identifier "BarbarianManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "city"
. "."
identifier "City"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
* "*"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "TechManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "TurnManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "civilization"
. "."
identifier "managers"
. "."
identifier "VictoryManager"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "github"
. "."
identifier "Github"
. "."
identifier "repoNameToFolderName"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "MapShape"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "TileMap"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "logic"
. "."
identifier "map"
. "."
identifier "tile"
. "."
identifier "Tile"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "Religion"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "metadata"
. "."
identifier "GameParameters"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "GlobalUniques"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "Ruleset"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "RulesetCache"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "Speed"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "nation"
. "."
identifier "Difficulty"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "unique"
. "."
identifier "LocalUniqueCache"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "ruleset"
. "."
identifier "unique"
. "."
identifier "UniqueType"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "models"
. "."
identifier "translations"
. "."
identifier "tr"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "audio"
. "."
identifier "MusicMood"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "audio"
. "."
identifier "MusicTrackChooserFlags"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "screens"
. "."
identifier "savescreens"
. "."
identifier "Gzip"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "ui"
. "."
identifier "screens"
. "."
identifier "worldscreen"
. "."
identifier "status"
. "."
identifier "NextTurnProgress"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "utils"
. "."
identifier "DebugUtils"
import
import "import"
qualified_identifier
identifier "com"
. "."
identifier "unciv"
. "."
identifier "utils"
. "."
identifier "debug"
import
import "import"
qualified_identifier
identifier "yairm210"
. "."
identifier "purity"
. "."
identifier "annotations"
. "."
identifier "Readonly"
import
import "import"
qualified_identifier
identifier "java"
. "."
identifier "security"
. "."
identifier "MessageDigest"
import
import "import"
qualified_identifier
identifier "java"
. "."
identifier "util"
. "."
* "*"
block_comment "/**\n * A class that implements this interface is part of [Ga"...
class_declaration
interface "interface"
identifier "IsPartOfGameInfoSerialization"
class_declaration (+76 nodes collapsed)
block_comment "/** The virtual world the users play in */"
class_declaration
class "class"
identifier "GameInfo"
: ":"
delegation_specifiers
delegation_specifier
user_type
identifier "IsPartOfGameInfoSerialization"
, ","
delegation_specifier
user_type
identifier "HasGameInfoSerializationVersion"
class_body
{ "{"
line_comment "//region Fields - Serialized"
block_comment "/** Version that saved the game, set in [UncivFiles.gameInfo"...
property_declaration
modifiers
member_modifier
override "override"
var "var"
variable_declaration
identifier "version"
= "="
navigation_expression
identifier "CompatibilityVersion"
. "."
identifier "FIRST_WITHOUT"
property_declaration
var "var"
variable_declaration
identifier "civilizations"
= "="
call_expression
identifier "ArrayList"
type_arguments
< "<"
type_projection
user_type
identifier "Civilization"
> ">"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "barbarians"
= "="
call_expression
identifier "BarbarianManager"
value_arguments
( "("
) ")"
property_declaration (+23 nodes collapsed)
property_declaration
var "var"
variable_declaration
identifier "difficulty"
= "="
string_literal
" "\""
string_content "Chieftain"
" "\""
line_comment "// difficulty is game-wide, think what would happen if 2 hum"...
property_declaration
var "var"
variable_declaration
identifier "tileMap"
: ":"
user_type
identifier "TileMap"
= "="
call_expression
identifier "TileMap"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "gameParameters"
= "="
call_expression
identifier "GameParameters"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "turns"
= "="
number_literal "0"
property_declaration
var "var"
variable_declaration
identifier "oneMoreTurnMode"
= "="
identifier "false"
property_declaration
var "var"
variable_declaration
identifier "currentPlayer"
= "="
string_literal
" "\""
" "\""
property_declaration
var "var"
variable_declaration
identifier "currentTurnStartTime"
= "="
call_expression
navigation_expression
identifier "System"
. "."
identifier "currentTimeMillis"
value_arguments
( "("
) ")"
property_declaration
var "var"
variable_declaration
identifier "gameId"
= "="
call_expression
navigation_expression
call_expression
navigation_expression
identifier "UUID"
. "."
identifier "randomUUID"
value_arguments
( "("
) ")"
. "."
identifier "toString"
value_arguments
( "("
) ")"
line_comment "// random string"
property_declaration
var "var"
variable_declaration
identifier "checksum"
= "="
string_literal
" "\""
" "\""
property_declaration
var "var"
variable_declaration
identifier "lastUnitId"
= "="
number_literal "0"
property_declaration
var "var"
variable_declaration
identifier "victoryData"
: ":"
nullable_type
user_type
identifier "VictoryData"
? "?"
= "="
identifier "null"
block_comment "/** Maps a civ to the civ they voted for - `null` on the val"...
property_declaration (+22 nodes collapsed)
line_comment "// Set to false whenever the results still need te be proces"...
property_declaration
var "var"
variable_declaration
identifier "diplomaticVictoryVotesProcessed"
= "="
identifier "false"
block_comment "/** The turn the replay history started recording.\n *\n "...
property_declaration
var "var"
variable_declaration
identifier "historyStartTurn"
= "="
unary_expression
- "-"
number_literal "1"
block_comment "/**\n * Keep track of a custom location this game was sav"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Volatile"
var "var"
variable_declaration
identifier "customSaveLocation"
: ":"
nullable_type
user_type
identifier "String"
? "?"
= "="
identifier "null"
block_comment "/** List of unit names that have been taken in this game fro"...
property_declaration
var "var"
variable_declaration
identifier "unitNamesTaken"
= "="
call_expression
identifier "ArrayList"
type_arguments
< "<"
type_projection
user_type
identifier "String"
> ">"
value_arguments
( "("
) ")"
line_comment "//endregion"
line_comment "//region Fields - Transient"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
visibility_modifier
private "private"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "difficultyObject"
: ":"
user_type
identifier "Difficulty"
line_comment "// Since this is static game-wide, and was taking a large pa"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "speed"
: ":"
user_type
identifier "Speed"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
visibility_modifier
private "private"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "combinedGlobalUniques"
: ":"
user_type
identifier "GlobalUniques"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "currentPlayerCiv"
: ":"
user_type
identifier "Civilization"
line_comment "// this is called thousands of times, no reason to search fo"...
block_comment "/** This is used in multiplayer games, where I may have a sa"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "isUpToDate"
= "="
identifier "false"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
member_modifier
lateinit "lateinit"
var "var"
variable_declaration
identifier "ruleset"
: ":"
user_type
identifier "Ruleset"
block_comment "/** Simulate until any player wins,\n * or turns exceeds"...
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "simulateMaxTurns"
: ":"
user_type
identifier "Int"
= "="
number_literal "1000"
property_declaration
modifiers
annotation
@ "@"
user_type
identifier "Transient"
var "var"
variable_declaration
identifier "simulateUntilWin"
= "="
identifier "false"
property_declaration (+21 nodes collapsed)
line_comment "//endregion"
line_comment "//region Pure functions"
function_declaration (+257 nodes collapsed)
function_declaration (+160 nodes collapsed)
property_declaration (+33 nodes collapsed)
block_comment "/** Get a civ by name\n * @throws NoSuchElementException"...
function_declaration (+41 nodes collapsed)
line_comment "// This is for spectators who are added in later, artificial"...
function_declaration (+41 nodes collapsed)
function_declaration
fun "fun"
identifier "getCurrentPlayerCivilization"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "currentPlayerCiv"
function_declaration (+32 nodes collapsed)
block_comment "/** Get barbarian civ\n * @throws NoSuchElementException"...
function_declaration (+23 nodes collapsed)
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "getDifficulty"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "difficultyObject"
block_comment "/** Access a cached `GlobalUniques` that combines the [rules"...
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "getGlobalUniques"
function_value_parameters
( "("
) ")"
function_body
= "="
identifier "combinedGlobalUniques"
block_comment "/** @return Sequence of all cities in game, both major civil"...
function_declaration (+33 nodes collapsed)
function_declaration (+36 nodes collapsed)
function_declaration (+40 nodes collapsed)
block_comment "/** Gets civilizations in their commonly used order - City-s"...
function_declaration (+226 nodes collapsed)
block_comment "/** Returns the first spectator for a [playerId] or creates "...
function_declaration (+61 nodes collapsed)
function_declaration (+107 nodes collapsed)
function_declaration (+76 nodes collapsed)
function_declaration
modifiers
annotation
@ "@"
user_type
identifier "Readonly"
fun "fun"
identifier "isEspionageEnabled"
function_value_parameters
( "("
) ")"
: ":"
user_type
identifier "Boolean"
function_body
= "="
navigation_expression
identifier "gameParameters"
. "."
identifier "espionageEnabled"
function_declaration (+69 nodes collapsed)
function_declaration (+44 nodes collapsed)
function_declaration (+95 nodes collapsed)
line_comment "//endregion"
line_comment "//region State changing functions"
line_comment "// Do we automatically simulate until N turn?"
function_declaration (+32 nodes collapsed)
function_declaration (+696 nodes collapsed)
function_declaration (+326 nodes collapsed)
function_declaration (+52 nodes collapsed)
function_declaration (+60 nodes collapsed)
block_comment "/** @return `true` if someone has won - checks existing [vic"...
function_declaration (+63 nodes collapsed)
function_declaration
modifiers
visibility_modifier
private "private"
fun "fun"
identifier "addEnemyUnitNotification"
function_value_parameters (+26 nodes collapsed)
function_body
block
{ "{"
line_comment "// don't flood the player with similar messages. instead cyc"...
if_expression
if "if"
( "("
binary_expression
navigation_expression
identifier "tiles"
. "."
identifier "size"
< "<"
number_literal "3"
) ")"
block
{ "{"
for_statement
for "for"
( "("
variable_declaration
identifier "tile"
in "in"
identifier "tiles"
) ")"
block
{ "{"
property_declaration
val "val"
variable_declaration
identifier "unitName"
= "="
navigation_expression
unary_expression
navigation_expression
identifier "tile"
. "."
identifier "militaryUnit"
!! "!!"
. "."
identifier "name"
call_expression
navigation_expression
identifier "thisPlayer"
. "."
identifier "addNotification"
value_arguments
( "("
value_argument
string_literal
" "\""
string_content "An enemy ["
string_content "$"
string_content "unitName] was spotted "
string_content "$"
string_content "inOrNear our territory"
" "\""
, ","
value_argument
navigation_expression
identifier "tile"
. "."
identifier "position"
, ","
value_argument
navigation_expression
identifier "NotificationCategory"
. "."
identifier "War"
, ","
value_argument
navigation_expression
identifier "NotificationIcon"
. "."
identifier "War"
, ","
value_argument
identifier "unitName"
) ")"
} "}"
} "}"
else "else"
block (+81 nodes collapsed)
} "}"
function_declaration (+180 nodes collapsed)
block_comment "/** Generate and show a notification pointing out resources."...
function_declaration (+95 nodes collapsed)
block_comment "/** Generate a notification pointing out resources. Only res"...
function_declaration (+651 nodes collapsed)
line_comment "// All cross-game data which needs to be altered (e.g. when "...
line_comment "// will be done here, and not in Civilization.setTransients "...
function_declaration (+834 nodes collapsed)
function_declaration (+61 nodes collapsed)
function_declaration (+300 nodes collapsed)
function_declaration (+90 nodes collapsed)
line_comment "//endregion"
function_declaration (+21 nodes collapsed)
} "}"
block_comment "/**\n * Reduced variant of GameInfo used for load preview and"...
class_declaration (+234 nodes collapsed)