Finally figured out the extraction, I think. Here's the new exe.
Couple of layers of complexity here:
1) fads contain YKCMP archives with textures.
2) The textures are either compressed with bc1_unorm, bc3_unorm, or contain uncompressed RGBA. At least that's true for the three fads you gave me. All three are supported by dds, so we don't need to uncompress the data; we just have to change the dds header accordingly.
3) Furthermore, the textures are swizzled (rearranged). People have already reverse-engineered the algorithm for Switch, so I basically just adapted this code
for the final step. In the fads you gave me I saw three different kinds of this swizzling.
Now, before I start working on reimporting, I want you to test that every
texture is extracted properly. We don't want to have any surprises later. After all, there might be other compressions/swizzles in the rest of fad files; I can only say it works for the three fads I have.
If the extractor gives an error or just crashes, please give me the fad that broke it - you'll know which one that is.
Even if it doesn't crash, please look at all textures yourself to make sure they aren't weird or anything.
Once again, you can put fadEx.exe in the folder with all fads and just run it - it will extract everything. You can also do "fadEx 10000.fad" to just extract that one fad.
Be aware that fadEx will overwrite results of previous extractions, so copy the textures to some other location before modifying them, just in case.
For reimporting I'm planning to use the same folder structure fadEx uses, and it will also expect the same filenames. So please don't change the filenames
Also, I don't know which program you use to modify the dds files, but you might want to check if it preserves the compression. I expect it would, but better be safe
If you open one of the extracted dds files in a hex editor, you will likely see DXT5 at offset 0x54 (meaning it's compressed with bc3_unorm). You can then modify the dds and see if that DXT5 is still there after modification. If it is, everything's good.
(I say "might", but please do check and tell me if the compression stays the same)