mirror of
https://github.com/Strongleong/ScrapModLoader.git
synced 2024-08-15 00:03:19 +00:00
Added support for different files for different versions in mod
This commit is contained in:
parent
02d9df8160
commit
515aa519a4
4 changed files with 54 additions and 29 deletions
35
README.md
35
README.md
|
@ -1,4 +1,4 @@
|
|||
WIP ScrapModLoader
|
||||
WIP ScrapModLoader
|
||||
==============
|
||||
|
||||
This applications is for managing mods for Scrapland.
|
||||
|
@ -24,11 +24,29 @@ ScrapModLoader supports both original and remastered versions of Scrapland.
|
|||
|
||||
For now mod for Scrapland is a *.sm file that basically is a zip arhive with following content:
|
||||
|
||||
| Filename | Description |
|
||||
|--------------------|----------------------------------------------|
|
||||
| icon.png | Icon for mod that will show up in mod loader |
|
||||
| config.toml | Information about mod |
|
||||
| <filename\>.packed | Container with all mod game assets |
|
||||
| Filename | Description |
|
||||
|------------------------|--------------------------------------------------|
|
||||
| icon.png | Icon for mod that will show up in mod loader |
|
||||
| config.toml | Information about mod |
|
||||
| <game_version\>\ | Folder that named as game version mod made for |
|
||||
| <filename\>.packed | Container with all mod game assets |
|
||||
|
||||
You can have as many .packed files as you want. Mod loader will load everything.
|
||||
|
||||
.packed files in the root of mod will be copied to the `Mods` folder of Scrapland.
|
||||
|
||||
.pakced files under game version folder will load only to the appopriate game version.
|
||||
|
||||
### .sm structure sample
|
||||
```
|
||||
│ icon.png
|
||||
│ config.toml
|
||||
│ mod_assets.packed
|
||||
├──1.0/
|
||||
│ only_for_original.packed
|
||||
└──1.1/
|
||||
only_for_remastered.packed
|
||||
```
|
||||
|
||||
### config.toml sample
|
||||
```toml
|
||||
|
@ -37,7 +55,7 @@ description = "Mod description"
|
|||
category = "Mod category"
|
||||
version = "1.0"
|
||||
requiredLauncher = "1.0"
|
||||
requiredGame = "1.0"
|
||||
supportedGameVersions = ["1.0", "1.1"]
|
||||
|
||||
authors = [
|
||||
{ name = "Author 1" },
|
||||
|
@ -64,9 +82,10 @@ credits = [
|
|||
|
||||
- [X] Support for custom *.packed
|
||||
- [X] Supoprt for Scrapland Remastered
|
||||
- [ ] Support for both Scrapland versions in single .sm file
|
||||
- [ ] Support for custom game files (i.e. `\Traslation\` files or custom `QuickConsole.py`)
|
||||
- [ ] Recompiling *.py to *.pyc
|
||||
- [ ] Mod settings.
|
||||
- [ ] More meta info in `config.xml`
|
||||
- [ ] More meta info in `config.toml`
|
||||
- [ ] Multilanguage support
|
||||
- [ ] More mods :wink:
|
|
@ -34,8 +34,9 @@
|
|||
</DataTemplate>
|
||||
</GridViewColumn.CellTemplate>
|
||||
</GridViewColumn>
|
||||
<GridViewColumn Header="Category" DisplayMemberBinding="{Binding Category}" />
|
||||
<GridViewColumn Header="Mod Version" DisplayMemberBinding="{Binding Version}" />
|
||||
<GridViewColumn Header="Game Version" DisplayMemberBinding="{Binding RequiredGame}" />
|
||||
<GridViewColumn Header="Game Version" DisplayMemberBinding="{Binding SupportedGameVersionsDisplay}" />
|
||||
</GridView>
|
||||
</ListView.View>
|
||||
<ListView.ItemContainerStyle>
|
||||
|
|
|
@ -86,19 +86,16 @@ namespace ScrapModLoader
|
|||
|
||||
foreach (ScrapMod mod in Mods)
|
||||
{
|
||||
if (mod.RequiredGame != SelectedGameVersion)
|
||||
// TODO: Warning about not loading mods that not supports selected version
|
||||
if (!mod.SupportedGameVersions.Contains(SelectedGameVersion))
|
||||
continue;
|
||||
|
||||
if (mod.Checked)
|
||||
{
|
||||
if (!mod.IsEnabled(gamePath))
|
||||
mod.Enable(gamePath);
|
||||
}
|
||||
mod.Enable(gamePath, SelectedGameVersion);
|
||||
else
|
||||
{
|
||||
if (mod.IsEnabled(gamePath))
|
||||
mod.Disable(gamePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,16 @@ namespace ScrapModLoader
|
|||
public String Category { get; private set; }
|
||||
public String Version { get; private set; }
|
||||
public String RequiredLauncher { get; private set; }
|
||||
public String RequiredGame { get; private set; }
|
||||
public List<String> SupportedGameVersions { get; private set; }
|
||||
public String SupportedGameVersionsDisplay {
|
||||
get
|
||||
{
|
||||
String result = String.Empty;
|
||||
foreach (String version in SupportedGameVersions)
|
||||
result += version + ", ";
|
||||
return result.TrimEnd(',', ' ');
|
||||
}
|
||||
}
|
||||
public List<String> Authors { get; private set; }
|
||||
public Dictionary<String, List<String>> Credits { get; private set; }
|
||||
|
||||
|
@ -34,7 +43,7 @@ namespace ScrapModLoader
|
|||
Category = String.Empty;
|
||||
Version = String.Empty;
|
||||
RequiredLauncher = String.Empty;
|
||||
RequiredGame = String.Empty;
|
||||
SupportedGameVersions = new List<String>();
|
||||
Authors = new List<String>();
|
||||
Credits = new Dictionary<String, List<String>>();
|
||||
LoadFromFile(path);
|
||||
|
@ -58,19 +67,17 @@ namespace ScrapModLoader
|
|||
return false;
|
||||
}
|
||||
|
||||
public void Enable(String gamePath)
|
||||
public void Enable(String gamePath, String gameVersion)
|
||||
{
|
||||
if (!IsLoaded(gamePath))
|
||||
LoadModToGame(gamePath);
|
||||
LoadModToGame(gamePath, gameVersion);
|
||||
|
||||
if (IsEnabled(gamePath))
|
||||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name))
|
||||
{
|
||||
if (Path.GetExtension(file) == ".disabled")
|
||||
File.Move(file, Path.ChangeExtension(file, null));
|
||||
}
|
||||
}
|
||||
|
||||
public void Disable(String gamePath)
|
||||
|
@ -79,13 +86,11 @@ namespace ScrapModLoader
|
|||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name))
|
||||
{
|
||||
if (Path.GetExtension(file) == ".packed")
|
||||
File.Move(file, file + ".disabled");
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadModToGame(String gamePath)
|
||||
private void LoadModToGame(String gamePath, String gameVersion)
|
||||
{
|
||||
gamePath += @"Mods\" + Name;
|
||||
Directory.CreateDirectory(gamePath);
|
||||
|
@ -94,10 +99,11 @@ namespace ScrapModLoader
|
|||
{
|
||||
foreach (ZipEntry zipEntry in zipFile)
|
||||
{
|
||||
if (!Path.GetFullPath(zipEntry.FileName).Contains(gameVersion))
|
||||
continue;
|
||||
|
||||
if (Path.GetExtension(zipEntry.FileName) == ".packed")
|
||||
{
|
||||
zipEntry.Extract(gamePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -151,7 +157,9 @@ namespace ScrapModLoader
|
|||
Category = config["category"];
|
||||
Version = config["version"];
|
||||
RequiredLauncher = config["requiredLauncher"];
|
||||
RequiredGame = config["requiredGame"];
|
||||
|
||||
foreach (TomlNode version in config["supportedGameVersions"])
|
||||
SupportedGameVersions.Add(version);
|
||||
|
||||
foreach (TomlNode author in config["authors"])
|
||||
Authors.Add(author["name"]);
|
||||
|
@ -185,8 +193,8 @@ namespace ScrapModLoader
|
|||
if (!config.HasKey("requiredLauncher"))
|
||||
throw new FileFormatException("No 'name' key in 'config.toml'");
|
||||
|
||||
if (!config.HasKey("requiredGame"))
|
||||
throw new FileFormatException("No 'requiredGame' key in 'config.toml'");
|
||||
if (!config.HasKey("supportedGameVersions"))
|
||||
throw new FileFormatException("No 'supportedGameVersions' key in 'config.toml'");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue