Add overlay extraction for multi-expansion asset deduplication

Extracts each expansion's assets as a CRC-compared overlay against a
base manifest, storing only files that differ. Auto-detects overlay mode
when a base manifest already exists. Adds --as-overlay, --full-base
flags and manifest merge for partial extractions.
This commit is contained in:
Kelsi 2026-02-14 03:09:17 -08:00
parent 03013e751a
commit a67dca5787
37 changed files with 139303 additions and 73847 deletions

View file

@ -1,28 +1,28 @@
# fields=15 strings=0,1,11,13,14
"cement","Elemental",0,0,0,0,0,0,0,4128894,1137,"adow",64,"","ShamanElementalCombat"
"nt","Balance",0,0,0,0,0,0,0,4128894,62,"adow",1024,"","DruidBalance"
"ology","Holy",0,0,0,0,0,0,0,4128894,70,"adow",2,"","PaladinHoly"
"eArcane","Arcane",0,0,0,0,0,0,0,4128894,122,"adow",128,"","MageArcane"
"ffliction","Assassination",0,0,0,0,0,0,0,4128894,498,"adow",8,"","RogueAssassination"
"DruidBalance","Fire",0,0,0,0,0,0,0,4128894,11,"adow",128,"","MageFire"
"rses","Discipline",0,0,0,0,0,0,0,4128894,555,"adow",16,"","PriestDiscipline"
"ne","Arms",0,0,0,0,0,0,0,4128894,1462,"adow",1,"","WarriorArms"
"at","Affliction",0,0,0,0,0,0,0,4128894,150,"adow",256,"","WarlockCurses"
"ship","Beast Mastery",0,0,0,0,0,0,0,4128894,255,"adow",4,"","HunterBeastMastery"
"Arms","Fury",0,0,0,0,0,0,0,4128894,456,"adow",1,"Elemental","WarriorFury"
"ment","Enhancement",0,0,0,0,0,0,0,4128894,312,"adow",64,"Elemental","ShamanEnhancement"
"Affliction","Combat",0,0,0,0,0,0,0,4128894,1501,"adow",8,"Elemental","RogueCombat"
"logy","Protection",0,0,0,0,0,0,0,4128894,291,"adow",2,"Elemental","PaladinProtection"
"ip","Marksmanship",0,0,0,0,0,0,0,4128894,126,"adow",4,"Elemental","HunterMarksmanship"
"ses","Holy",0,0,0,0,0,0,0,4128894,79,"adow",16,"Elemental","PriestHoly"
"t","Demonology",0,0,0,0,0,0,0,4128894,692,"adow",256,"Elemental","WarlockSummoning"
"ment","Feral Combat",0,0,0,0,0,0,0,4128894,201,"adow",1024,"Elemental","DruidFeralCombat"
"","Protection",0,0,0,0,0,0,0,4128894,1463,"adow",1,"lemental","WarriorProtection"
"ement","Restoration",0,0,0,0,0,0,0,4128894,963,"adow",64,"lemental","ShamanRestoration"
"nology","Retribution",0,0,0,0,0,0,0,4128894,555,"adow",2,"lemental","PaladinCombat"
"es","Shadow",0,0,0,0,0,0,0,4128894,98,"adow",16,"lemental","PriestShadow"
"hip","Survival",0,0,0,0,0,0,0,4128894,257,"adow",4,"lemental","HunterSurvival"
"ladinHoly","Frost",0,0,0,0,0,0,0,4128894,56,"adow",128,"lemental","MageFrost"
"fliction","Subtlety",0,0,0,0,0,0,0,4128894,103,"adow",8,"lemental","RogueSubtlety"
"bat","Destruction",0,0,0,0,0,0,0,4128894,937,"adow",256,"lemental","WarlockDestruction"
"ent","Restoration",0,0,0,0,0,0,0,4128894,962,"adow",1024,"lemental","DruidRestoration"
# fields=15 strings=0,1,4,5,7,8,11,12,13,14
"ms","Arcane",0,0,"Arkan","奥术",0,"Arcano","Arcanos",4128894,122,"nProtection","ssinato","","MageArcane"
"line","Arms",0,0,"Waffen","武器",0,"Armas","Armas",4128894,1462,"nProtection","Arcane","","WarriorArms"
"","Assassination",0,0,"Meucheln","刺æ<EFBFBD>",0,"Asesinato","Assassinato",4128894,498,"nProtection","Arkan","","RogueAssassination"
"iscipline","Discipline",0,0,"Disziplin","戒律",0,"Disciplina","Disciplina",4128894,555,"nProtection","¥æœ¯","","PriestDiscipline"
"alance","Elemental",0,0,"Elementar","元素",0,"Elemental","Elemental",4128894,1137,"nProtection","¨","","ShamanElementalCombat"
"¹³è¡¡","Balance",0,0,"Gleichgewicht","平衡",0,"Equilibrio","Equilíbrio",4128894,62,"nProtection","Protection","","DruidBalance"
"uilíbrio","Affliction",0,0,"Gebrechen","痛苦",0,"Aflicción","Aflição",4128894,150,"nProtection","bat","","WarlockCurses"
"³n","Beast Mastery",0,0,"Tierherrschaft","野兽控制",0,"Maestría de Bestias","Mestre das Bestas",4128894,255,"nProtection","ane","","HunterBeastMastery"
"urses","Holy",0,0,"Heilig","神圣",0,"Sagrado","Sagrado",4128894,70,"nProtection","rcane","","PaladinHoly"
"rcane","Fire",0,0,"Feuer","ç<EFBFBD>«ç„°",0,"Fuego","Fogo",4128894,11,"nProtection","ssinato","Arcane","MageFire"
"e","Fury",0,0,"Furor","狂怒",0,"Furia","Fúria",4128894,456,"nProtection","Arcane","Arcane","WarriorFury"
"","Combat",0,0,"Kampf","战斗",0,"Combate","Combate",4128894,1501,"nProtection","Arkan","Arcane","RogueCombat"
"scipline","Holy",0,0,"Heilig","神圣",0,"Sagrado","Sagrado",4128894,79,"nProtection","¥æœ¯","Arcane","PriestHoly"
"ance","Enhancement",0,0,"Verstärkung","增强",0,"Mejora","Aprimoramento",4128894,312,"nProtection","¨","Arcane","ShamanEnhancement"
"","Feral Combat",0,0,"Wilder Kampf","野性战斗",0,"Combate Feral","Combate Selvagem",4128894,201,"nProtection","Protection","Arcane","DruidFeralCombat"
"ilíbrio","Demonology",0,0,"Dämonologie","æ<EFBFBD>¶é­”学识",0,"Demonología","Demonologia",4128894,692,"nProtection","bat","Arcane","WarlockSummoning"
"","Marksmanship",0,0,"Treffsicherheit","射击",0,"Puntería","Marcial",4128894,126,"nProtection","ane","Arcane","HunterMarksmanship"
"rses","Protection",0,0,"Schutz","防护",0,"Protección","Proteção",4128894,291,"nProtection","rcane","Arcane","PaladinProtection"
"¦å™¨","Frost",0,0,"Frost","冰霜",0,"Hielo","Gelo",4128894,56,"nProtection","ssinato","rcane","MageFrost"
"ne","Protection",0,0,"Schutz","防护",0,"Protección","Proteção",4128894,1463,"nProtection","Arcane","rcane","WarriorProtection"
"Disciplina","Subtlety",0,0,"Täuschung","æ•<EFBFBD>é”<EFBFBD>",0,"Sutileza","Sutileza",4128894,103,"nProtection","Arkan","rcane","RogueSubtlety"
"cipline","Shadow",0,0,"Schatten","æš—å½±",0,"Sombras","Sombra",4128894,98,"nProtection","¥æœ¯","rcane","PriestShadow"
"lance","Restoration",0,0,"Wiederherst.","æ<EFBFBD>¢å¤<EFBFBD>",0,"Restauración","Restauração",4128894,963,"nProtection","¨","rcane","ShamanRestoration"
"平衡","Restoration",0,0,"Wiederherst.","æ<EFBFBD>¢å¤<EFBFBD>",0,"Restauración","Restauração",4128894,962,"nProtection","Protection","rcane","DruidRestoration"
"quilíbrio","Destruction",0,0,"Zerstörung","æ¯<EFBFBD>ç<EFBFBD>­",0,"Destrucción","Destruição",4128894,937,"nProtection","bat","rcane","WarlockDestruction"
"n","Survival",0,0,"Überleben","生存",0,"Supervivencia","Sobrevivência",4128894,257,"nProtection","ane","rcane","HunterSurvival"
"Curses","Retribution",0,0,"Vergeltung","惩戒",0,"Retribucion","Vingança",4128894,555,"nProtection","rcane","rcane","PaladinCombat"

Can't render this file because it has a wrong number of fields in line 2.