Crate ck3save

Source
Expand description

§CK3 Save

CK3 Save is a library to ergonomically work with Crusader Kings 3 (CK3) saves (ironman + regular).

use ck3save::{
    models::{Gamestate, HeaderBorrowed},
    Ck3File, Encoding, EnvTokens,
};

let data = std::fs::read("assets/saves/Jarl_Ivar_of_the_Isles_867_01_01.ck3")?;
let file = Ck3File::from_slice(&data)?;
assert_eq!(file.encoding(), Encoding::TextZip);

let meta = file.parse_metadata()?;
let header: HeaderBorrowed = meta.deserializer().build(&EnvTokens)?;

let mut zip_sink = Vec::new();
let parsed_file = file.parse(&mut zip_sink)?;
let save: Gamestate = parsed_file.deserializer().build(&EnvTokens)?;
assert_eq!(save.meta_data.version, String::from("1.0.2"));
assert_eq!(header.meta_data.version, String::from("1.0.2"));

§Ironman

By default, ironman saves will not be decoded properly.

To enable support, one must supply an environment variable (CK3_IRONMAN_TOKENS) that points to a newline delimited text file of token descriptions. For instance:

0xffff my_test_token
0xeeee my_test_token2

In order to comply with legal restrictions, I cannot share the list of tokens. I am also restricted from divulging how the list of tokens can be derived.

Modules§

file
models

Structs§

Ck3Date
A date without a time component
Ck3Error
A Ck3 Error
Ck3File
Entrypoint for parsing CK3 saves
Ck3Melter
Convert a binary save to plaintext
EnvTokens
Builtin token resolver based on CK3_IRONMAN_TOKENS
MeltedDocument
Output from melting a binary save to plaintext
SaveHeader
The first line of the save file

Enums§

Ck3ErrorKind
Specific type of error
Encoding
Describes the format of the save before decoding
FailedResolveStrategy
Customize how the deserializer reacts when a token can’t be resolved
SaveHeaderKind
The kind of save file

Traits§

PdsDate
Common set of methods between all the date components