Skip to content

Commit

Permalink
2.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
amazingalek authored Oct 12, 2021
2 parents 178813e + 4a445dc commit 6553f7b
Show file tree
Hide file tree
Showing 125 changed files with 896 additions and 2,781 deletions.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2019 - 2021 Aleksander Waage (AmazingAlek), Ricardo Lopes (Raicuparta), Henry Pointer (_nebula / misternebula), and TAImatem.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
36 changes: 30 additions & 6 deletions OWML.sln
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SampleMods", "SampleMods", "{C447A599-2700-44E1-BBFA-52880B7BFFBA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.Launcher", "src\OWML.Launcher\OWML.Launcher.csproj", "{FEF4EC4E-3B1E-4501-9841-1902A98BD309}"
ProjectSection(ProjectDependencies) = postProject
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B} = {2E866A8D-1C5B-43C2-80D1-632E785A6F3B}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.GameFinder", "src\OWML.GameFinder\OWML.GameFinder.csproj", "{79B243D0-E526-4E43-9755-D5474D258AA4}"
EndProject
Expand Down Expand Up @@ -41,17 +44,28 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.EnableDebugMode", "src
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.LoadCustomAssets", "src\SampleMods\OWML.LoadCustomAssets\OWML.LoadCustomAssets.csproj", "{FAD6D4A0-5B49-4ABC-B11A-FF6D509FB77D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.GameFinder.Tests", "tests\OWML.GameFinder.Tests\OWML.GameFinder.Tests.csproj", "{B5F78317-9735-4B01-88EB-C288726CD69D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.GameFinder.Tests", "tests\OWML.GameFinder.Tests\OWML.GameFinder.Tests.csproj", "{B5F78317-9735-4B01-88EB-C288726CD69D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.Tests.Setup", "tests\OWML.Tests.Setup\OWML.Tests.Setup.csproj", "{4CEDEC69-8F13-495B-8866-9B2F6ACBE8BB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.Tests.Setup", "tests\OWML.Tests.Setup\OWML.Tests.Setup.csproj", "{4CEDEC69-8F13-495B-8866-9B2F6ACBE8BB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.ModLoader.Tests", "tests\OWML.ModLoader.Tests\OWML.ModLoader.Tests.csproj", "{ACDD836F-1A85-496A-826A-EB1865D355ED}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.ModLoader.Tests", "tests\OWML.ModLoader.Tests\OWML.ModLoader.Tests.csproj", "{ACDD836F-1A85-496A-826A-EB1865D355ED}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.Launcher.Tests", "tests\OWML.Launcher.Tests\OWML.Launcher.Tests.csproj", "{39F80A26-8DBB-43CE-89E2-2D148489D73C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.Launcher.Tests", "tests\OWML.Launcher.Tests\OWML.Launcher.Tests.csproj", "{39F80A26-8DBB-43CE-89E2-2D148489D73C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.ModFinder.Tests", "tests\OWML.ModFinder.Tests\OWML.ModFinder.Tests.csproj", "{65AC15AE-920A-4C98-B730-7CD20EA76310}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.ModFinder.Tests", "tests\OWML.ModFinder.Tests\OWML.ModFinder.Tests.csproj", "{65AC15AE-920A-4C98-B730-7CD20EA76310}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OWML.Utils.Tests", "tests\OWML.Utils.Tests\OWML.Utils.Tests.csproj", "{DA74E671-FA8A-4834-90B7-368054990690}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.Utils.Tests", "tests\OWML.Utils.Tests\OWML.Utils.Tests.csproj", "{DA74E671-FA8A-4834-90B7-368054990690}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.Temp", "src\OWML.Temp\OWML.Temp.csproj", "{2E866A8D-1C5B-43C2-80D1-632E785A6F3B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OWML.ExampleAPI", "src\SampleMods\OWML.ExampleAPI\OWML.ExampleAPI.csproj", "{F56A9B0D-420F-493F-9B53-0CCD218A895E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C7F76E72-1CF2-4C0D-8A39-3D13EB868119}"
ProjectSection(SolutionItems) = preProject
LICENSE = LICENSE
owmllogo.png = owmllogo.png
Readme.md = Readme.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -147,6 +161,14 @@ Global
{DA74E671-FA8A-4834-90B7-368054990690}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA74E671-FA8A-4834-90B7-368054990690}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA74E671-FA8A-4834-90B7-368054990690}.Release|Any CPU.Build.0 = Release|Any CPU
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B}.Release|Any CPU.Build.0 = Release|Any CPU
{F56A9B0D-420F-493F-9B53-0CCD218A895E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F56A9B0D-420F-493F-9B53-0CCD218A895E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F56A9B0D-420F-493F-9B53-0CCD218A895E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F56A9B0D-420F-493F-9B53-0CCD218A895E}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -175,6 +197,8 @@ Global
{39F80A26-8DBB-43CE-89E2-2D148489D73C} = {5F23B5A9-FEFC-4016-9A00-5DDE76798B85}
{65AC15AE-920A-4C98-B730-7CD20EA76310} = {5F23B5A9-FEFC-4016-9A00-5DDE76798B85}
{DA74E671-FA8A-4834-90B7-368054990690} = {5F23B5A9-FEFC-4016-9A00-5DDE76798B85}
{2E866A8D-1C5B-43C2-80D1-632E785A6F3B} = {CEAC0A30-FF6F-4618-9C55-E2A0D81B863A}
{F56A9B0D-420F-493F-9B53-0CCD218A895E} = {C447A599-2700-44E1-BBFA-52880B7BFFBA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0E767163-75F9-420A-80EB-320429543CAD}
Expand Down
93 changes: 37 additions & 56 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
![logo](owmllogo.png)
![GitHub](https://img.shields.io/github/license/amazingalek/owml?style=flat-square)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/amazingalek/owml?style=flat-square)
![GitHub Release Date](https://img.shields.io/github/release-date/amazingalek/owml?label=last%20release&style=flat-square)
![GitHub all releases](https://img.shields.io/github/downloads/amazingalek/owml/total?style=flat-square)
![GitHub release (latest by date)](https://img.shields.io/github/downloads/amazingalek/owml/latest/total?style=flat-square)

# Outer Wilds Mod Loader

OWML is the mod loader and mod framework for Outer Wilds. It patches Outer Wilds to load mods, and provides mods a framework to interact with the game. OWML is inspired by SMAPI for Stardew Valley.
Expand All @@ -16,17 +23,26 @@ With Outer Wilds Mod Manager (recommended):
2. Use the Mod Manager to install OWML and mods, and start the game.

Manual install:
1. Download OWML and extract the zip file anywhere you want.
2. [Download Outer Wilds mods](https://outerwildsmods.com/mods) and put them in the Mods folder, each mod in a separate folder.
1. Download latest OWML release and extract the zip file anywhere you want.
2. [Download Outer Wilds mods](https://outerwildsmods.com/mods) and put them in the `mods` folder, each mod in a separate folder.
3. Start the game with OWML.Launcher.exe.

## Uninstall
- If using Outer Wilds Mod Manager, first refer to it's uninstall guide.
- If not, delete OWML folder.
- Verify integrity of game files - OWML edits the game code to load itself, so verification is needed to remove the changes.
- Steam : Right click on game > Properties > Local files > Verify integrity of game files
- Epic : Three dots next to game > Verify

If you want to keep mod data intact but still play without mods, verifying the game files is enough. Just make sure to run the game through Steam/Epic, *not* OWML.Launcher.exe.

## For modders

Refer to the sample mods in the source code for examples. These mods are not included in releases.

### Get started

1. Create a C# class library project targeting .Net Framework 3.5.
1. Create a C# class library project targeting .Net Framework 4.0.
2. Install the [OWML Nuget package](https://www.nuget.org/packages/OWML/).
3. Reference the following files in {gamePath}\OuterWilds_Data\Managed:
* Assembly-CSharp.dll
Expand All @@ -36,60 +52,25 @@ Refer to the sample mods in the source code for examples. These mods are not inc

For more info, see [For modders](https://github.com/amazingalek/owml/wiki/For-modders).

## Configuration

OWML is configured in the in-game MODS menu, or in OWML.Config.json:

|Key|Description|
|---|-----------|
|gamePath|The path to the game files. OWML will try to locate the game automatically.|
|debugMode|If enabled, a lot more information is written to the console. Intended for developers.|
|combinationsBlockInput|If this is true, mod input combinations will block game input.|

Each mod is defined in a manifest.json file:

|Key|Description|
|---|-----------|
|filename|The filename of the DLL containing the ModBehaviour class.|
|author|The name of the author.|
|name|The name of the mod.|
|uniqueName|Usually {author}.{uniqueName}.|
|version|The version number.|
|owmlVersion|The version of OWML the mod was built for.|
|dependencies|Array of dependency names. Make sure to use the unique name.|

Each mod can be configured in the in-game MODS menu, or in config.json:

|Key|Description|
|---|-----------|
|enabled|Whether or not the mod will be loaded. Default: true.|
|requireVR|Whether or not the mod requires VR to work. Default: false.|
|settings|An object of mod-specific settings. Default: empty.|

Example:
~~~~
{
"enabled": true,
"requireVR": false,
"settings": {
"enableMusic": true,
"foo": "bar",
"lol": 1337
}
}
~~~~

More info about config can be found [here](https://github.com/amazingalek/owml/wiki/For-modders#mod-config).

## Compatibility

* Compatible with all versions of Outer Wilds.
* Custom menus only work with the latest version of Outer Wilds - 1.0.7.
|Version|Compatible|
|-|-|
|1.1.10|Yes|
|1.1.9|Unknown|
|1.1.8|Unknown|
|1.0.0 - 1.0.7|No|

OWML is compatible with Echoes of the Eye, and works on both Epic and Steam installations.

## Feedback
## Feedback and Support

I'm working tightly with the mod community to improve OWML and aid in mod development.
I'm Alek on the [Outer Wilds Discord](https://discord.gg/csKYR3w).
OWML is developed by the same people making the mods!
On the [Outer Wilds Discord](https://discord.gg/csKYR3w), we are (in purple role colors) :
- alek
- Raicuparta
- _nebula
- TAImatem

Feature requests, bug reports and PRs are welcome on GitHub.

Expand All @@ -98,20 +79,20 @@ Feature requests, bug reports and PRs are welcome on GitHub.
Authors:
* [AmazingAlek](https://github.com/amazingalek)
* [Raicuparta](https://github.com/Raicuparta/)
* [Mister_Nebula](https://github.com/misternebula)
* [_nebula](https://github.com/misternebula)
* [TAImatem](https://github.com/TAImatem)

Special thanks to:
* [Outer Wilds](http://www.outerwilds.com)
* [Outer Wilds on Discord](https://discord.gg/csKYR3w)
* [Outer Wilds on Reddit](https://www.reddit.com/r/outerwilds)
* Inspired by (and some code from) [SMAPI](https://smapi.io)
* OWML logo banner by _nebula

Dependencies:
* [dnpatch](https://github.com/ioncodes/dnpatch)
* [dnlib](https://github.com/0xd4d/dnlib)
* [Harmony](https://github.com/pardeike/Harmony)
* [Json.Net.Unity3D](https://github.com/SaladLab/Json.Net.Unity3D)
* [HarmonyX](https://github.com/BepInEx/HarmonyX)
* [ObjImporter](https://wiki.unity3d.com/index.php?title=ObjImporter)
* [NAudio-Unity](https://github.com/WulfMarius/NAudio-Unity)
* [Gameloop.Vdf](https://github.com/shravan2x/Gameloop.Vdf)
Binary file added owmllogo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions src/OWML.Abstractions/OWML.Abstractions.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net35</TargetFramework>
<TargetFramework>net40</TargetFramework>
<LangVersion>9.0</LangVersion>
</PropertyGroup>

Expand Down
16 changes: 11 additions & 5 deletions src/OWML.Common/Enums/PatchType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,17 @@
public enum PatchType
{
All = 0,

Prefix = 1,

Postfix = 2,

Transpiler = 3

Transpiler = 3,

Finalizer = 4,

ILManipulator = 5,

ReversePatch = 6
}
}
}
7 changes: 0 additions & 7 deletions src/OWML.Common/Interfaces/IBindingChangeListener.cs

This file was deleted.

4 changes: 2 additions & 2 deletions src/OWML.Common/Interfaces/IHarmonyHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ public interface IHarmonyHelper

void AddPostfix(MethodBase methodInfo, Type patchType, string patchMethodName);

void EmptyMethod<T>(string methodName);
void EmptyMethod<T>(string methodName, bool useTranspile = false);

void EmptyMethod(MethodBase methodInfo);
void EmptyMethod(MethodBase methodInfo, bool useTranspile = false);

void Transpile<T>(string methodName, Type patchType, string patchMethodName);

Expand Down
3 changes: 1 addition & 2 deletions src/OWML.Common/Interfaces/IModAssets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ public interface IModAssets
Mesh GetMesh(string filename);

Texture2D GetTexture(string filename);



AudioClip GetAudio(string filename);

[Obsolete("Use Get3DObject instead.")]
Expand Down
2 changes: 2 additions & 0 deletions src/OWML.Common/Interfaces/IModData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ public interface IModData

IModConfig DefaultConfig { get; }

IModStorage Storage { get; }

bool Enabled { get; }

bool RequireVR { get; }
Expand Down
2 changes: 0 additions & 2 deletions src/OWML.Common/Interfaces/IModHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ public interface IModHelper

IOwmlConfig OwmlConfig { get; }

IModInputHandler Input { get; }

IModInteraction Interaction { get; }
}
}
26 changes: 0 additions & 26 deletions src/OWML.Common/Interfaces/IModInputCombination.cs

This file was deleted.

33 changes: 0 additions & 33 deletions src/OWML.Common/Interfaces/IModInputHandler.cs

This file was deleted.

13 changes: 0 additions & 13 deletions src/OWML.Common/Interfaces/IModInputTextures.cs

This file was deleted.

7 changes: 7 additions & 0 deletions src/OWML.Common/Interfaces/IModVersionChecker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace OWML.Common
{
public interface IModVersionChecker
{
bool CheckModVersion(IModData data);
}
}
Loading

0 comments on commit 6553f7b

Please sign in to comment.