Then, going back to reversing the K files, I noticed that, in the "tree of chunks", the top level of the tree always has exactly 15 chunks
This is how I discovered the relation between the first level of chunks and the category of classes.
And knowing that it mades things more clear

To check if my findings are correct, I always made a simple Python script to parse the file and keeps changing it until it works
And this scripts becomes the very first version of "XXL Editor": https://github.com/AdrienTD/elbtools/tree/master/pykedit
How do I find what the header is, exactly?
I can make some guesses based on the differences between the different KRV files
Yeah, checking for differences is also very helpful
I'm trying to get some hints from your file, and I think the configuration is in this block
``` if (this->version >= KVERSION_ARTHUR || (this->version == KVERSION_XXL2 && (this->platform != PLATFORM_PC || this->isRemaster)))
uint32_t headerSize = lvlFile.readUint32();
this->numSectors = lvlFile.readUint8();
kuuid lvlGameUuid;
lvlFile.read(lvlGameUuid.data(), 16);
assert(lvlGameUuid == this->gameManagerUuid);
this->lvlUnk2 = lvlFile.readUint32();```
I think the first if is fired since DotD came out after their Arthur game
Which would make sense based on file comparisons
And yeah, forgot to mention that, but the file begins with a big header that basically says the number of classes used and how many instances of the class there are (and some small info here and there)
I was about to ask, 0x799f seems like a very, very big header
So first 4 bytes are the header size in bytes, the next since byte is sector count (what are the sectors? LLC files appear to have more than the normal level file), a 16 byte game UUID, an unknown 4 byte value, and then the sector loop
Sectors are the STR files, so a sector count of 5 means there are 5 STR files for this level.
And these values are only in the LVL files, LLC files have a different format.
LLC contains localized data, so every level has a LLC file for each language