Comments (5)
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.
from libloot.
If it can be made to work for BA2s too, that would be great.
from libloot.
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...
from libloot.
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.
from libloot.
Done as of bdd5f8d.
from libloot.
Related Issues (20)
- libloot fails to find master on Linux because of case-sensitivity HOT 6
- Replace std::set usage in public API with std::vector HOT 1
- Consider introducing a new API type to represent case-insensitive filenames HOT 1
- Plugin::LoadsArchive() logic doesn't account for more recent games HOT 1
- File::GetDisplayName() falls back to file name HOT 2
- Error message for incorrect use of % HOT 1
- Cyclic interaction detected between ccbgssse002-exoticarrows.esl and ccbgssse002-exoticarrows.esl HOT 7
- Allow matching locale codes against just language code HOT 3
- Update location.rst
- Update localised_content.rst
- Add support for a "detail" property on File objects HOT 1
- Add API function to serialise a given plugin's metadata HOT 1
- Cache plugin name regex objects HOT 2
- Document support for not-expressions HOT 1
- libloot release archive naming HOT 2
- Migrate from using boost::format to std::format (via fmt) HOT 1
- Rework how group edges are added HOT 5
- Add GameInterface::GetType() and GameInterface::GetDatabase() const methods HOT 1
- Use plugins' masters to inform sorting HOT 2
- Allow creation of game handles with local paths that do not exist HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libloot.