To fully emulate a game environment for some games, IPackage instances need to be added as sources to a CompositeFileResolver. Add a PackageFileResolver to the Sledge.Formats.Packages library that will accept an IPackage as its source.
Also consider cases where a package (or just a different folder) might need to be added to CompositeFileResolver with a different root - not sure if any games actually require that, but would be good for extensibility. I think this could be solved by having something like a VirtualSubdirectoryFileResolver that wraps another IFileResolver and prefixes all its files with a subfolder path.
For example:
GameName/ModName/models/abc.mdl
GameName/ModName/models.pak -> def.mdl
Root would be GameName/ModName, and models.pak should be added with a prefix of models/. Like so:
var modelsPak = new PakPackage("GameName/ModName/models.pak");
var environment = new CompositeFileResolver(new IFileResolver[]
{
new DiskFileResolver("GameName/ModName/"),
new VirtualSubdirectoryFileResolver("models/", new PackageFileResolver(modelsPak))
});
To fully emulate a game environment for some games,
IPackage
instances need to be added as sources to aCompositeFileResolver
. Add aPackageFileResolver
to theSledge.Formats.Packages
library that will accept anIPackage
as its source.Also consider cases where a package (or just a different folder) might need to be added to
CompositeFileResolver
with a different root - not sure if any games actually require that, but would be good for extensibility. I think this could be solved by having something like aVirtualSubdirectoryFileResolver
that wraps anotherIFileResolver
and prefixes all its files with a subfolder path.For example:
Root would be GameName/ModName, and models.pak should be added with a prefix of models/. Like so: