Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Account for BSA asset override as sorting criterion #3

Closed
Ortham opened this issue Feb 10, 2017 · 5 comments
Closed

Account for BSA asset override as sorting criterion #3

Ortham opened this issue Feb 10, 2017 · 5 comments
Assignees

Comments

@Ortham
Copy link
Member

Ortham commented Feb 10, 2017

Suggested by Lojack. If two non-conflicting plugins load BSAs that conflict, the BSAs' path lists could be compared to decide their load order so that the larger BSA loads first.

Moved from loot/loot#157.

@Freso
Copy link
Member

Freso commented Jun 17, 2017

If it can be made to work for BA2s too, that would be great.

@Ortham Ortham self-assigned this Dec 14, 2022
@Ortham
Copy link
Member Author

Ortham commented Dec 15, 2022

I'm finally picking this up, as the changes to adding tie-break edges for loot/loot#1370 change the way that ties may be broken, and this shouldn't be a problem, except that LOOT is blind to the impact that might have on assets loaded through BSAs that get pulled into the game by plugins, so sorting cannot be stable with respect to that.

Adding support for taking BSA conflicts into account won't necessarily avoid the tie-breaking causing changes, but at least those conflicts will be taken into account.

The bsa-overlap branch currently contains a spike adding support for parsing a subset of BSA files and using the results when adding overlap edges during sorting. BSA files that use big-endian numbers aren't supported, and neither are BA2 files - I don't think I've got any BSAs that use big-endian numbers, so I've got nothing to test that against, and I haven't looked into the BA2 file format yet but plan to add support for it next.

There also aren't many tests yet, and those that do exist use official game BSAs I've got installed, so the tests will fail in CI. I've manually verified sorting completes without errors logged for Skyrim SE, but haven't checked the impact of the new sorting logic.

@Ortham
Copy link
Member Author

Ortham commented Dec 16, 2022

I've added support for BA2 archives and a bunch of tests. I still need to add tests for the sorting changes.

Unfortunately I'm seeing unexpected duplicates across several of Fallout 4's BA2 archives: because BSAs/BA2s include hash values I'm checking for overlap using them rather than path strings, but BA2s use 32-bit hashes vs. BSA's 64-bit hashes so have a much greater chance of collision. However, I'm not sure if the duplicates I'm seeing are due to multiple BA2s containing the same file path or different file paths with hash collisions, I need to do more debugging...

@Ortham
Copy link
Member Author

Ortham commented Dec 16, 2022

I switched to calculating 64-bit hashes for BA2 archives and those duplicates were still logged, so I think they must be due to multiple BA2s containing the same file path. I'll stick with the 64-bit hashes though, as some plugins load enough assets that a collision is more likely than not when using a 32-bit hash.

I've also finished adding tests, so this is basically done - I'm only holding off merging because it potentially changes the outcome of LOOT's load order sorting, so I'm treating it as a breaking change. The changes now live in the new-tie-break-logic branch until they're merged.

@Ortham
Copy link
Member Author

Ortham commented Jan 6, 2023

Done as of bdd5f8d.

@Ortham Ortham closed this as completed Jan 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

2 participants