- Update to support melting Vic3 1.8 saves
- Update to support melting HOI4 1.15 saves
- Support melting CK3 compressed metadata
- Update to support CK3 1.13 saves
- All games now use a constant memory melter
- Update to support VIC3 1.7 saves
- Update to support EU4 1.37 saves
- Update to support HOI4 1.14 saves
- Update to support CK3 1.12 saves
- Update to support VIC3 1.6 saves
- Improve support for VIC3 1.5 saves
- Update to support CK3 1.11 saves
- Update to support VIC3 1.5 saves
- Update to support EU4 1.36 saves
- Update to support HOI4 1.13 saves
- Update to support VIC3 1.4.2
- Update to support VIC3 1.4
- Update to support CK3 1.10
- Additional accuracy for melted vic3 output
- Improve vic3 melt accuracy for pop_statistsics
- Update EU4 tokens to 1.35.3
- Update CK3 tokens to 1.9
- Update vic3 tokens to 1.3
- Update hoi4 melter to exclude ironman key from output
- Update EU4 tokens to 1.35
Rework API so that it is no longer geared towards parsing and melting the input in a single step. Instead, there are now a few steps where the API can cheaply load the file and from there the downstream developer can decide what they want to do: melt the metadata first or go straight to melting the main data.
See updated sample.cpp
for new usage.
- Fix human friendly error messages not being written to provided buffer when the buffer had exactly enough room for it.
- Support converting compressed plaintext saves to uncompressed
- Add
rakaly_melt_binary_unknown_tokens
to know if unknown binary tokens were encountered in the input - Add
rakaly_melt_is_verbatim
to know if no work was required to convert to uncompressed plaintext - Add
rakaly_melt_binary_translated
to know if the input required binary translation - Add
rakaly_melt_error_length
andrakaly_melt_error_write_data
so one can show a human readable error messages
The C++ wrapper has been updated to take advantage of these new C APIs and has
been rewritten. Please see the README or sample.cpp
to see new usage.
- Consolidate separate c++ helper functions into main header
- Initial support for melting Vic3 saves
- Fix incorrect CK3 1.7 melted format for floats
- Update to CK3 1.7 tokens
- Update to EU4 1.34 tokens
- Sizeable performance improvements for zipped save formats
- Support CK3 1.6
- Update EU4 melted output to be compatible with loading the save from the in game menu by not containing a terminating newline
- Support EU4 1.33
- Support CK3 1.5
- Support HOI4 1.11
- Update tokens to support new EU4 1.32 additions
- Fix improper melted output when a name ended with a quote
- EU4 dates prior to 5000 BC can now be melted properly and not cause an error (only an issue for EU4 mods)
- Fix obscenely large CK3 melted output (introduced in v0.8.8) due to not accounting for hidden objects
- Fix some array values not being properly indented
- Melt with tabs instead of spaces
- Melted quoted values are now escaped as needed. A quoted value that contained quotes didn't have the inner quotes escaped, leading to output that could fail to parse.
- Melted output now only uses newlines for line endings
- eu4: correct number of decimal points are always used
- eu4: fixed the possibility of melted ids being detected as dates
- ck3: rewrite save header line with new metadata size
- ck3: omit certain ironman fields (
ironman
andironman_manager
) from melted output
- Update tokens to support EU4 1.31.2
- Increase accuracy for melted EU4 64bit floats by up to a 10,000th
- Significant update to CK3 melting output:
- Fix melted output containing quotes when plaintext has no quotes
- Rewrite save header to declare the melted output is uncompressed plaintext
- Increase accuracy of decoding 64 bit floats (alternative format) from ironman format
- Write numbers as integers when ignoring the fractional component would not result in a loss of accuracy just like the plaintext format
- Identified additional tokens that use the alternative float format
- Fixed more numbers being interpreted as dates
- Update tokens to support EU4 1.31.1
- Fix regression introduced in v0.8.4 where ck3 and imperator would melt all numbers as dates
- Update melting to more accurately decode 64 bit floats (in rare cases large positive numbers could be interpreted as negative)
- Update melting to support Eu4 Leviathan prehistoric dates
- Update melting to support alternative Ck3 floating point format
- Update tokens to support Eu4 Leviathan
- Update CK3 tokens to support the 1.3 update
- Update Imperator tokens to support the 2.0 update
- Improved melting support. Won't quote values that aren't quoted in plaintext
- Support for melting HOI4 saves
- Updated CK3 tokens to latest patch (1.2)
Correctly melt seed properties as integers instead of dates
Negative dates can now be melted into the equivalent plaintext
Skipped release
Skipped release
Support parsing saves that contain empty containers:
history = {
{}
1689.10.2={
decision="abc123"
}
}
It is known that this format can occur in EU4 but it could also occur in others.
rakaly_imperator_melt
added to melt imperator saves- CK3 saves now melt
levels = { 10 0=1 1=2 }
losslessly
A couple of small, but nevertheless breaking changes:
rakaly_melt_write_data
now returns asize_t
to indicate how many bytes were written. If the given melted buffer is null or if the given length isn't long enough to write into, then a 0 instead of -1 is returned.rakaly_melt_write_data
no longer writes a trailing null terminator into the buffer
- Melt CK3 autosaves, ironman, and binary data into utf-8 plaintext
- Add c++ wrapper:
rakaly_wrapper.h
- The c header,
rakaly.h
, is now c++ compatible
This is a rewrite to the API so that one can properly deallocate the melted data that librakaly allocates. This is how the use the new API:
MeltedBuffer *melt = rakaly_eu4_melt(buf_in, buf_in_len);
if (rakaly_melt_error_code(melt)) {
rakaly_free_melt(melt);
return 1;
}
size_t melted_len = rakaly_melt_data_length(melt);
size_t melted_str_len = melted_len + 1;
char *melted_buf = malloc(melted_str_len);
if (melted_buf == NULL) {
rakaly_free_melt(melt);
return 1;
}
size_t wrote_len = rakaly_melt_write_data(melt, melted_buf, melted_str_len);
if (wrote_len < 0) {
free(melted_buf);
rakaly_free_melt(melt);
return 1;
}
rakaly_free_melt(melt);
// now do whatever you want with melted_buf
free(melted_buf);
eu4save is updated from 0.1.2 to 0.2.2. The only noticeable differences should be dates prior to 1000.1.1 will now have leading zeros removed, so the melted output will now correctly contain 1.1.1 instead of 0001.1.1
- First open source release
- Fixed unknown ironman key when encountering a save with a revolution center
- Instead of raising an error on unknown binary tokens found in ironman saves, skip these values if the tokens are part of an object's key, else write out an "__unknown_0x" string.
- Write only one checksum instance per melt operation (previously melting a zip would result in each file contributing a checksum in the output).
- Remove limit to how nested the binary parser can recurse. This will allow rakaly to melt modded saves that rely heavily on recursive events.
- Fix failure to parse heavily nested events like Great Britain's symposium event (flavor_eng.9880). Previous parser could only handle this event nested about 15 times. I recently have come across a save where it exceeds this limit, so the fix was to increase the max to 30 layers of nesting.
- Fix melting failure to properly skip
is_ironman
property when it is a non-scalar (whileis_ironman
has always been a scalar, the melter is flexible enough to handle any format) - (Not visible): a fuzzing suite has been added to the melter to ensure that malicious input can't cause undesirable effects (out of memory, stack overflows, seg faults, etc).
Initial Release