Skip to content
/ eu4save Public

Library to ergonomically work with EU4 saves (ironman + mp)

License

Notifications You must be signed in to change notification settings

rakaly/eu4save

Repository files navigation

ci Version

EU4 Save

EU4 Save is a library to ergonomically work with EU4 saves (ironman + mp).

use eu4save::{Eu4File, Encoding, CountryTag, EnvTokens};
let data = std::fs::read("assets/saves/eng.txt.compressed.eu4")?;
let file = Eu4File::from_slice(&data)?;
let save = file.parse_save(&EnvTokens)?;
assert_eq!(file.encoding(), Encoding::TextZip);
assert_eq!(save.meta.player, "ENG".parse()?);

Querying

Even once decoded, the data might be too low level. For example a country can have an income ledger that looks like:

income = { 1.000 0 2.000 0.000 1.500 }

While the structure will decoded successfully into a vector, the context of what each index means is missing. What value represents the income from trade?

To help solve questions like these, the Query API was created

use eu4save::{Eu4Extractor, Encoding, CountryTag, query::Query};

let data = std::fs::read("assets/saves/eng.txt.compressed.eu4")?;
let file = Eu4File::from_slice(&data)?;
let save = file.parse_save(&EnvTokens)?;
let save_query = Query::from_save(save);
let trade = save_query.country(&"ENG".parse()?)
    .map(|country| save_query.country_income_breakdown(country))
    .map(|income| income.trade);
assert_eq!(Some(17.982), trade);

Ironman

Ironman saves are supported, but not by default, as the token resolver can't be distributed, per PDS counsel.

You may look to other projects EU4 ironman projects like ironmelt or paperman for inspiration.

About

Library to ergonomically work with EU4 saves (ironman + mp)

Topics

Resources

License

Stars

Watchers

Forks

Languages