Save File

Ages of Conflict uses .aoc files for its saves and scenarios, they can be opened and manipulated through any text editor and are interchangeable with each other.

They can be found in the user folder under:

* Windows: `\AppData\LocalLow\JoySparkGames\Ages of Conflict`
* Mac: `/Library/Application Support/com.JoySparkGames.AgesOfConflict`
* Linux: `/.config/unity3d/JoySparkGames/Ages of Conflict`

## Structure

Save files are long strings of code-like text that encode everything about the game, from nations and their territory, map layout, wars and alliances to game time and the version the file was last saved in.

### **Game info**

First in the file is basic information about the save/scenario: the version it was saved in, map dimensions, starting year and game time (each month equals 0.5 in game time) as shown in the example below:

`"version":"3.0.5","width":950,"height":475,"startingYear":2023,"currentGameTime":24`

### **Nation Data**

It's a long list enclosed in square brackets opening with `"nations":` each entry is enclosed in curly brackets and separated with commas.

Nation data contains:

* Nation ID
* Name
* Color
* Capital location
* Whether or not it's dead
* Whether or not it has AI disabled
* Establishment and collapse year
* Who it seceded from
* Who it annexed
* Gold and combat efficiency
* Highest land area
* Total wars
* Revolt chance
* Income modifier
* Stress (hidden mechanic driving alliances)
* Lives (information about previous iterations of the nation)
	+ Establishment and collapse time (in game time, "s" and "e" respectively)
	+ Who it seceded from and who annexed it ("o" and "k" respectively)

example of what nation data looks like (in all following examples line breaks were added for reading convenience):

```
"nations":[
{"id":1,"name":"Iceland","destroyed":false,"color":{"r":0.48649999499320986,"g":0.5826490521430969,"b":0.699999988079071,"a":1.0},"pos":{"x":75,"y":561},"startYear":0.0,"endYear":0.0,"killerId":0,"originId":0,"revoltIds":[],"killedIds":[],"gold":2485.8310546875,"combatEfficiency":11.0,"landValue":10259,"maxArea":2533,"revoltPercent":0.0,"aiDisabled":false,"stress":0,"totalWars":1,"lives":[],"incomeModifier":1.0},

{"id":2,"name":"Ireland","destroyed":true,"color":{"r":0.15390002727508546,"g":0.5400000214576721,"b":0.25777456164360049,"a":1.0},"pos":{"x":138,"y":352},"startYear":0.0,"endYear":25.2001953125,"killerId":0,"originId":0,"revoltIds":[],"killedIds":[],"gold":0.0,"combatEfficiency":8.0,"landValue":0,"maxArea":1637,"revoltPercent":0.0,"aiDisabled":false,"stress":0,"totalWars":1,"lives":[{"s":0,"e":25,"o":0,"k":3}],"incomeModifier":1.0},

{"id":3,"name":"United Kingdom","destroyed":false,"color":{"r":0.8550000190734863,"g":0.2992500364780426,"b":0.42619776725769045,"a":1.0},"pos":{"x":190,"y":306},"startYear":0.0,"endYear":0.0,"killerId":0,"originId":0,"revoltIds":[],"killedIds":[2],"gold":3006.17529296875,"combatEfficiency":10.0,"landValue":57509,"maxArea":7358,"revoltPercent":13.135003089904786,"aiDisabled":false,"stress":0,"totalWars":3,"lives":[],"incomeModifier":1.0},
]
```

### Cities

This section contains a list of all non-capital cities, their location and who they rightfully belong to ("r")

```
"cities":[
{"x":22,"y":121,"o":0,"r":0,"f":0},
{"x":440,"y":442,"o":0,"r":0,"f":0},
{"x":439,"y":431,"o":0,"r":0,"f":0},
{"x":456,"y":350,"o":0,"r":0,"f":0},
{"x":255,"y":261,"o":0,"r":0,"f":0},
{"x":180,"y":148,"o":0,"r":0,"f":0},
{"x":321,"y":157,"o":0,"r":0,"f":0},
{"x":366,"y":190,"o":0,"r":0,"f":0},
{"x":733,"y":200,"o":0,"r":61,"f":0},
{"x":138,"y":352,"o":0,"r":0,"f":0},
{"x":236,"y":284,"o":0,"r":0,"f":0},
{"x":668,"y":0,"o":0,"r":0,"f":0},
{"x":44,"y":160,"o":0,"r":0,"f":0},
{"x":60,"y":60,"o":0,"r":3,"f":0},
{"x":13,"y":26,"o":0,"r":6,"f":0},
{"x":52,"y":56,"o":0,"r":6,"f":0},
{"x":53,"y":21,"o":0,"r":6,"f":0},
{"x":127,"y":35,"o":0,"r":7,"f":0}
]
```

### **Alliances**

A list of all alliances, their members (their IDs), stress (likelihood of collapsing) and whether its auto-generated name was changed.

```
"alliances":[
{"name":"Operation Iran","ids":[56,53,54],"stress":0,"ne":false},
{"name":"Baltic Commonwealth","ids":[23,20,21],"stress":1,"ne":true},
{"name":"Order of United Kingdom","ids":[3,1,4,22],"stress":0,"ne":false}
]
```

### **Wars**

List of all ongoing wars, their participants, start and (for some reason) end date and targeted length.

```
"wars":[
{"attackers":[28],"attackersLeft":[28],"defenders":[23],"defendersLeft":[23],"targetLength":42.67084884643555,"startTime":175.15313720703126,"endTime":0.0},
{"attackers":[13,33,36],"attackersLeft":[13,36],"defenders":[10],"defendersLeft":[10],"targetLength":34.056846618652347,"startTime":196.08883666992188,"endTime":0.0}
]
```

### **Terrain**

A long string of numbers, separated by commas, that encodes terrain in horizontal stripes from left to right, bottom to top.

Each number translates into terrain types as follows:

save file
terrain type
 1
 2
 3
 4
 5

### **Owner**

A list of numbers similar to terrain, where each number is the ID of the nation that owns a given pixel, if the number is 0, nobody owns that pixel.

## Trivia

* Because save and scenario files are interchangeable, converting a save into a scenario is as easy as moving the save file into the scenario folder. Some map makers use this trick to include alliances and wars in their scenarios.
* Maximum file size that AoC will read is 1GB, anything above that doesn't load.
* "o" and "f" values in cities data are currently unused.