Merge branch 'develop'
This commit is contained in:
commit
088d4e77f0
|
@ -0,0 +1,2 @@
|
||||||
|
# always normalise line endings
|
||||||
|
* text=auto
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Visual Studio cache/options
|
||||||
|
.vs/
|
||||||
|
|
||||||
|
# NuGet packages
|
||||||
|
*.nupkg
|
85
README.md
85
README.md
|
@ -9,7 +9,6 @@ The package...
|
||||||
only_).
|
only_).
|
||||||
* packages the mod automatically into the game's mod folder when you build the code (_optional_).
|
* packages the mod automatically into the game's mod folder when you build the code (_optional_).
|
||||||
|
|
||||||
|
|
||||||
## Contents
|
## Contents
|
||||||
* [Install](#install)
|
* [Install](#install)
|
||||||
* [Simplify mod development](#simplify-mod-development)
|
* [Simplify mod development](#simplify-mod-development)
|
||||||
|
@ -32,54 +31,43 @@ The package...
|
||||||
3. Compile on any platform.
|
3. Compile on any platform.
|
||||||
|
|
||||||
## Simplify mod development
|
## Simplify mod development
|
||||||
### Package your mod into the game directory automatically
|
### Package your mod into the game folder automatically
|
||||||
During development, it's helpful to have the mod files packaged into your `Mods` directory automatically each time you build. To do that:
|
You can copy your mod files into the `Mods` folder automatically each time you build, so you don't
|
||||||
|
need to do it manually:
|
||||||
|
|
||||||
1. Edit your mod's `.csproj` file.
|
1. Edit your mod's `.csproj` file.
|
||||||
2. Add this block of code at the bottom, right above the closing `</Project>` tag:
|
2. Add this block under the `<Project` line:
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<Target Name="AfterBuild">
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ModPath>$(GamePath)\Mods\$(TargetName)</ModPath>
|
<DeployModFolderName>$(MSBuildProjectName)</DeployModFolderName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll" DestinationFolder="$(ModPath)" />
|
|
||||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).pdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).pdb')" />
|
|
||||||
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll.mdb" DestinationFolder="$(ModPath)" Condition="Exists('$(TargetDir)\$(TargetName).dll.mdb')" />
|
|
||||||
<Copy SourceFiles="$(ProjectDir)manifest.json" DestinationFolder="$(ModPath)" />
|
|
||||||
</Target>
|
|
||||||
```
|
```
|
||||||
3. Optionally, edit the `<ModPath>` value to change the name, or add any additional files your mod needs.
|
|
||||||
|
|
||||||
That's it! Each time you build, the files in `<game path>\Mods\<mod name>` will be updated.
|
That's it! Each time you build, the files in `<game path>\Mods\<mod name>` will be updated with
|
||||||
|
your `manifest.json`, build output, and any `i18n` files.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* To add custom files, just [add them to the build output](https://stackoverflow.com/a/10828462/262123).
|
||||||
|
* To customise the folder name, just replace `$(MSBuildProjectName)` with the folder name you want.
|
||||||
|
* If your project references another mod, make sure the reference is [_not_ marked 'copy local'](https://msdn.microsoft.com/en-us/library/t1zz5y8c(v=vs.100).aspx).
|
||||||
|
|
||||||
### Debug into the mod code
|
### Debug into the mod code
|
||||||
Stepping into your mod code when the game is running is straightforward, since this package injects the configuration automatically. To do it:
|
Stepping into your mod code when the game is running is straightforward, since this package injects
|
||||||
|
the configuration automatically. To do it:
|
||||||
|
|
||||||
1. [Package your mod into the game directory automatically](#package-your-mod-into-the-game-directory-automatically).
|
1. [Package your mod into the game folder automatically](#package-your-mod-into-the-game-folder-automatically).
|
||||||
2. Launch the project with debugging in Visual Studio or MonoDevelop.
|
2. Launch the project with debugging in Visual Studio or MonoDevelop.
|
||||||
|
|
||||||
This will deploy your mod files into the game directory, launch SMAPI, and attach a debugger automatically. Now you can step through your code, set breakpoints, etc.
|
This will deploy your mod files into the game folder, launch SMAPI, and attach a debugger
|
||||||
|
automatically. Now you can step through your code, set breakpoints, etc.
|
||||||
|
|
||||||
## Troubleshoot
|
## Troubleshoot
|
||||||
### "Failed to find the game install path"
|
### "Failed to find the game install path"
|
||||||
That error means the package couldn't figure out where the game is installed. You need to specify
|
That error means the package couldn't figure out where the game is installed. You need to specify
|
||||||
the game location yourself. There's two ways to do that:
|
the game location yourself. There's two ways to do that:
|
||||||
|
|
||||||
* **Option 1: set the path in the project file.**
|
* **Option 1: set the path globally.**
|
||||||
_(You'll need to do it for every project that uses the package.)_
|
|
||||||
1. Get the folder path containing the Stardew Valley `.exe` file.
|
|
||||||
2. Add this to your `.csproj` file under the `<Project` line:
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<PropertyGroup>
|
|
||||||
<GamePath>PATH_HERE</GamePath>
|
|
||||||
</PropertyGroup>
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Replace `PATH_HERE` with your custom game install path.
|
|
||||||
|
|
||||||
* **Option 2: set the path globally.**
|
|
||||||
_This will apply to every project that uses version 1.5+ of package._
|
_This will apply to every project that uses version 1.5+ of package._
|
||||||
|
|
||||||
1. Get the full folder path containing the Stardew Valley executable.
|
1. Get the full folder path containing the Stardew Valley executable.
|
||||||
|
@ -102,30 +90,21 @@ the game location yourself. There's two ways to do that:
|
||||||
|
|
||||||
4. Replace `PATH_HERE` with your custom game install path.
|
4. Replace `PATH_HERE` with your custom game install path.
|
||||||
|
|
||||||
|
* **Option 2: set the path in the project file.**
|
||||||
|
_(You'll need to do it for every project that uses the package.)_
|
||||||
|
1. Get the folder path containing the Stardew Valley `.exe` file.
|
||||||
|
2. Add this to your `.csproj` file under the `<Project` line:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<PropertyGroup>
|
||||||
|
<GamePath>PATH_HERE</GamePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Replace `PATH_HERE` with your custom game install path.
|
||||||
|
|
||||||
The configuration will check your custom path first, then fall back to the default paths (so it'll
|
The configuration will check your custom path first, then fall back to the default paths (so it'll
|
||||||
still compile on a different computer).
|
still compile on a different computer).
|
||||||
|
|
||||||
## Versions
|
## Versions
|
||||||
1.5 (upcoming):
|
See [release notes](release-notes.md).
|
||||||
* Added support for setting a custom game path globally.
|
|
||||||
* Added default GOG path on Mac.
|
|
||||||
|
|
||||||
1.4:
|
|
||||||
* Fixed detection of non-default game paths on 32-bit Windows.
|
|
||||||
* Removed support for SilVerPLuM (discontinued).
|
|
||||||
* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically).
|
|
||||||
|
|
||||||
1.3:
|
|
||||||
* Added support for non-default game paths on Windows.
|
|
||||||
|
|
||||||
1.2:
|
|
||||||
* Exclude game binaries from mod build output.
|
|
||||||
|
|
||||||
1.1:
|
|
||||||
* Added support for overriding the target platform.
|
|
||||||
|
|
||||||
1.0:
|
|
||||||
* Initial release.
|
|
||||||
* Added support for detecting the game path automatically.
|
|
||||||
* Added support for injecting XNA/MonoGame references automatically based on the OS.
|
|
||||||
* Added support for mod builders like SilVerPLuM.
|
|
||||||
|
|
|
@ -101,5 +101,33 @@
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
<!-- if game path is invalid, show one user-friendly error instead of a slew of reference errors -->
|
<!-- if game path is invalid, show one user-friendly error instead of a slew of reference errors -->
|
||||||
<Error Condition="!Exists('$(GamePath)')" Text="Failed to find the game install path. See https://github.com/Pathoschild/Stardew.ModBuildConfig#troubleshoot for help." />
|
<Error Condition="!Exists('$(GamePath)')" Text="Failed to find the game install path. See https://github.com/Pathoschild/Stardew.ModBuildConfig#troubleshoot for help." />
|
||||||
|
<Error Condition="'$(GamePlatform)' == 'Windows' AND !Exists('$(GamePath)\Stardew Valley.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain Stardew Valley. You should delete this folder if it's empty." />
|
||||||
|
<Error Condition="'$(GamePlatform)' != 'Windows' AND !Exists('$(GamePath)\StardewValley.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain Stardew Valley. You should delete this folder if it's empty." />
|
||||||
|
<Error Condition="!Exists('$(GamePath)\StardewModdingAPI.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain SMAPI." />
|
||||||
|
</Target>
|
||||||
|
|
||||||
|
<!--######
|
||||||
|
## deploy mod files
|
||||||
|
#######-->
|
||||||
|
<Target Name="AfterBuild" Condition="'$(DeployModFolderName)' != ''">
|
||||||
|
<!--generate paths-->
|
||||||
|
<PropertyGroup>
|
||||||
|
<ModDeployPath>$(GamePath)\Mods\$(DeployModFolderName)</ModDeployPath>
|
||||||
|
<FallbackManifestPath>$(ProjectDir)\manifest.json</FallbackManifestPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BuildFiles Include="$(TargetDir)\**\*.*" />
|
||||||
|
<FallbackTranslationFiles Include="$(ProjectDir)\i18n\*.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<!--validate-->
|
||||||
|
<Error Text="Could not deploy mod automatically because no build output was found." Condition="'@(BuildFiles)' == ''" />
|
||||||
|
<Error Text="Could not deploy mod automatically because no manifest.json was found in the project or build output." Condition="!Exists('$(TargetDir)\manifest.json') AND !Exists('$(FallbackManifestPath)')" />
|
||||||
|
|
||||||
|
<!-- copy mod files -->
|
||||||
|
<Message Text="Deploying mod to $(ModDeployPath)..." Importance="high" />
|
||||||
|
<Copy SourceFiles="@(BuildFiles)" DestinationFolder="$(ModDeployPath)\%(RecursiveDir)" SkipUnchangedFiles="true" />
|
||||||
|
<Copy SourceFiles="$(FallbackManifestPath)" DestinationFolder="$(ModDeployPath)" Condition="!Exists('$(TargetDir)\manifest.json')" />
|
||||||
|
<Copy SourceFiles="@(FallbackTranslationFiles)" DestinationFolder="$(ModDeployPath)\i18n\%(RecursiveDir)" Condition="!Exists('$(TargetDir)\i18n')" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
|
@ -2,16 +2,16 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>Pathoschild.Stardew.ModBuildConfig</id>
|
<id>Pathoschild.Stardew.ModBuildConfig</id>
|
||||||
<version>1.5</version>
|
<version>1.6</version>
|
||||||
<title>MSBuild config for Stardew Valley mods</title>
|
<title>MSBuild config for Stardew Valley mods</title>
|
||||||
<authors>Pathoschild</authors>
|
<authors>Pathoschild</authors>
|
||||||
<owners>Pathoschild</owners>
|
<owners>Pathoschild</owners>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
<licenseUrl>https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.5/LICENSE.txt</licenseUrl>
|
<licenseUrl>https://github.com/Pathoschild/Stardew.ModBuildConfig/blob/1.6/LICENSE.txt</licenseUrl>
|
||||||
<projectUrl>https://github.com/Pathoschild/Stardew.ModBuildConfig</projectUrl>
|
<projectUrl>https://github.com/Pathoschild/Stardew.ModBuildConfig#readme</projectUrl>
|
||||||
<iconUrl>https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.5/assets/nuget-icon.png</iconUrl>
|
<iconUrl>https://raw.githubusercontent.com/Pathoschild/Stardew.ModBuildConfig/1.6/assets/nuget-icon.png</iconUrl>
|
||||||
<description>Automates the build configuration for crossplatform Stardew Valley SMAPI mods.</description>
|
<description>Automates the build configuration for crossplatform Stardew Valley SMAPI mods.</description>
|
||||||
<releaseNotes>Added support for setting a custom game path globally; added default GOG path on Mac.</releaseNotes>
|
<releaseNotes>SMAPI mods are now deployed automatically to your game folder if you set the 'DeployModFolderName' property; added a build error if a game folder is found, but it doesn't contain Stardew Valley or SMAPI.</releaseNotes>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
<file src="build/smapi.targets" target="build/Pathoschild.Stardew.ModBuildConfig.targets" />
|
<file src="build/smapi.targets" target="build/Pathoschild.Stardew.ModBuildConfig.targets" />
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
## Release notes
|
||||||
|
### 1.6
|
||||||
|
* Added support for deploying mod files into `Mods` automatically.
|
||||||
|
* Added a build error if a game folder is found, but doesn't contain Stardew Valley or SMAPI.
|
||||||
|
|
||||||
|
### 1.5
|
||||||
|
* Added support for setting a custom game path globally.
|
||||||
|
* Added default GOG path on Mac.
|
||||||
|
|
||||||
|
### 1.4
|
||||||
|
* Fixed detection of non-default game paths on 32-bit Windows.
|
||||||
|
* Removed support for SilVerPLuM (discontinued).
|
||||||
|
* Removed support for overriding the target platform (no longer needed since SMAPI crossplatforms mods automatically).
|
||||||
|
|
||||||
|
### 1.3
|
||||||
|
* Added support for non-default game paths on Windows.
|
||||||
|
|
||||||
|
### 1.2
|
||||||
|
* Exclude game binaries from mod build output.
|
||||||
|
|
||||||
|
### 1.1
|
||||||
|
* Added support for overriding the target platform.
|
||||||
|
|
||||||
|
### 1.0
|
||||||
|
* Initial release.
|
||||||
|
* Added support for detecting the game path automatically.
|
||||||
|
* Added support for injecting XNA/MonoGame references automatically based on the OS.
|
||||||
|
* Added support for mod builders like SilVerPLuM.
|
Loading…
Reference in New Issue