mirror of
https://github.com/BepInEx/BepInEx.git
synced 2026-10-20 01:46:13 +00:00
Merge branch 'master' of https://github.com/bbepis/BepInEx
This commit is contained in:
commit
f07dd3954b
40 files changed
+14
-3525
No files matched your search
Binary file not shown.
-60
@@ -7,26 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BepInEx", "BepInEx\BepInEx.
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BepInEx.Patcher", "BepInEx.Patcher\BepInEx.Patcher.csproj", "{DC89F18B-235B-4C01-AB31-AF40DCE5C4C7}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}"
|
||||
EndProject
|
||||
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "BepInEx.Common", "BepInEx.Common\BepInEx.Common.shproj", "{D8DEEEF7-28F5-4F13-A004-C581CE051CDC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicTranslationLoader", "Plugins\DynamicTranslationLoader\DynamicTranslationLoader.csproj", "{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InputUnlocker", "Plugins\InputUnlocker\InputUnlocker.csproj", "{379BA41B-9944-4B5A-8732-EEBAA7F05B04}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorCorrector", "Plugins\ColorCorrector\ColorCorrector.csproj", "{6809B5DC-358C-45C5-B04C-0B7027596A8B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SliderUnlocker", "Plugins\SliderUnlocker\SliderUnlocker.csproj", "{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Screencap", "Plugins\Screencap\Screencap.csproj", "{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceRedirector", "Plugins\ResourceRedirector\ResourceRedirector.csproj", "{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeveloperConsole", "Plugins\DeveloperConsole\DeveloperConsole.csproj", "{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtensibleSaveFormat", "Plugins\ExtensibleSaveFormat\ExtensibleSaveFormat.csproj", "{8EBE81B9-9ED9-466D-864A-4C644BFD8827}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
BepInEx.Common\BepInEx.Common.projitems*{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}*SharedItemsImports = 4
|
||||
@@ -46,52 +28,10 @@ Global
|
||||
{DC89F18B-235B-4C01-AB31-AF40DCE5C4C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DC89F18B-235B-4C01-AB31-AF40DCE5C4C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DC89F18B-235B-4C01-AB31-AF40DCE5C4C7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{379BA41B-9944-4B5A-8732-EEBAA7F05B04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{379BA41B-9944-4B5A-8732-EEBAA7F05B04}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{379BA41B-9944-4B5A-8732-EEBAA7F05B04}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{379BA41B-9944-4B5A-8732-EEBAA7F05B04}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6809B5DC-358C-45C5-B04C-0B7027596A8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6809B5DC-358C-45C5-B04C-0B7027596A8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6809B5DC-358C-45C5-B04C-0B7027596A8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6809B5DC-358C-45C5-B04C-0B7027596A8B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8EBE81B9-9ED9-466D-864A-4C644BFD8827}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8EBE81B9-9ED9-466D-864A-4C644BFD8827}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8EBE81B9-9ED9-466D-864A-4C644BFD8827}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8EBE81B9-9ED9-466D-864A-4C644BFD8827}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{379BA41B-9944-4B5A-8732-EEBAA7F05B04} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{6809B5DC-358C-45C5-B04C-0B7027596A8B} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{9DB058D4-CF5A-4280-9150-A62C22FC3CB0} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{6A9D08C0-4482-4D1A-9368-9F41B7126F9E} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
{8EBE81B9-9ED9-466D-864A-4C644BFD8827} = {FF8CE2C8-C185-4EA9-8D63-E2542F0C2FCF}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {55AC11EF-F568-4C79-A356-7ED9510145B1}
|
||||
EndGlobalSection
|
||||
|
||||
+14
-1
@@ -1,4 +1,6 @@
|
||||
namespace BepInEx
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace BepInEx
|
||||
{
|
||||
/// <summary>
|
||||
/// A helper class to use for logging.
|
||||
@@ -24,7 +26,18 @@
|
||||
/// <param name="show">Whether or not it should be dislpayed to the user.</param>
|
||||
public static void Log(string entry, bool show = false)
|
||||
{
|
||||
UnityEngine.UnityLogWriter.WriteStringToUnityLog($"BEPIN - {entry}\r\n");
|
||||
|
||||
EntryLogged?.Invoke(entry, show);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace UnityEngine
|
||||
{
|
||||
internal sealed class UnityLogWriter
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.InternalCall)]
|
||||
public static extern void WriteStringToUnityLog(string s);
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
using BepInEx;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityStandardAssets.ImageEffects;
|
||||
|
||||
namespace ColorCorrector
|
||||
{
|
||||
public class ColorCorrector : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.colorcorrector";
|
||||
public override string Name => "Color Filter Remover";
|
||||
public override Version Version => new Version("1.2");
|
||||
|
||||
#region Config properties
|
||||
private bool SaturationEnabled
|
||||
{
|
||||
get => bool.Parse(this.GetEntry("saturation-enabled", "True"));
|
||||
set => this.SetEntry("saturation-enabled", value.ToString());
|
||||
}
|
||||
|
||||
private bool BloomEnabled
|
||||
{
|
||||
get => bool.Parse(this.GetEntry("bloom-enabled", "True"));
|
||||
set => this.SetEntry("bloom-enabled", value.ToString());
|
||||
}
|
||||
#endregion
|
||||
|
||||
AmplifyColorEffect amplifyComponent;
|
||||
BloomAndFlares bloomComponent;
|
||||
|
||||
protected void LevelFinishedLoading(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
if (Camera.main != null && Camera.main?.gameObject != null)
|
||||
{
|
||||
amplifyComponent = Camera.main.gameObject.GetComponent<AmplifyColorEffect>();
|
||||
bloomComponent = Camera.main.gameObject.GetComponent<BloomAndFlares>();
|
||||
|
||||
SetEffects(SaturationEnabled, BloomEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
void SetEffects(bool satEnabled, bool bloomEnabled)
|
||||
{
|
||||
if (amplifyComponent != null)
|
||||
amplifyComponent.enabled = satEnabled;
|
||||
|
||||
if (bloomComponent != null)
|
||||
bloomComponent.enabled = bloomEnabled;
|
||||
}
|
||||
|
||||
#region MonoBehaviour
|
||||
void OnEnable()
|
||||
{
|
||||
SceneManager.sceneLoaded += LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SceneManager.sceneLoaded -= LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F6))
|
||||
{
|
||||
showingUI = !showingUI;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region UI
|
||||
private Rect UI = new Rect(20, 20, 200, 100);
|
||||
private bool showingUI = false;
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if (showingUI)
|
||||
UI = GUI.Window(Name.GetHashCode() + 0, UI, WindowFunction, "Filter settings");
|
||||
}
|
||||
|
||||
void WindowFunction(int windowID)
|
||||
{
|
||||
bool satEnabled = GUI.Toggle(new Rect(10, 20, 180, 20), SaturationEnabled, " Saturation filter enabled");
|
||||
bool bloomEnabled = GUI.Toggle(new Rect(10, 40, 180, 20), BloomEnabled, " Bloom filter enabled");
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
SaturationEnabled = satEnabled;
|
||||
BloomEnabled = bloomEnabled;
|
||||
|
||||
SetEffects(satEnabled, bloomEnabled);
|
||||
}
|
||||
|
||||
GUI.DragWindow();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6809B5DC-358C-45C5-B04C-0B7027596A8B}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ColorCorrector</RootNamespace>
|
||||
<AssemblyName>ColorCorrector</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp-firstpass">
|
||||
<HintPath>..\..\lib\Assembly-CSharp-firstpass.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ColorCorrector.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ColorCorrector")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ColorCorrector")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("6809b5dc-358c-45c5-b04c-0b7027596a8b")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,100 +0,0 @@
|
||||
using BepInEx;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DeveloperConsole
|
||||
{
|
||||
public class DeveloperConsole : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.developerconsole";
|
||||
public override string Name => "Developer Console";
|
||||
public override Version Version => new Version("1.0.1");
|
||||
|
||||
private Rect UI = new Rect(20, 20, 400, 200);
|
||||
bool showingUI = false;
|
||||
string TotalLog = "";
|
||||
|
||||
int showCounter = 0;
|
||||
string TotalShowingLog = "";
|
||||
|
||||
void Awake()
|
||||
{
|
||||
BepInLogger.EntryLogged += (log, show) =>
|
||||
{
|
||||
string current = $"{TotalLog}\r\n{log}";
|
||||
if (current.Length > 2000)
|
||||
{
|
||||
current = current.Remove(0, 1000);
|
||||
}
|
||||
TotalLog = current;
|
||||
|
||||
if (show)
|
||||
{
|
||||
if (showCounter == 0)
|
||||
TotalShowingLog = "";
|
||||
|
||||
showCounter = 400;
|
||||
TotalShowingLog = $"{TotalShowingLog}\r\n{log}";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F12))
|
||||
{
|
||||
showingUI = !showingUI;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
ShowLog();
|
||||
|
||||
if (showingUI)
|
||||
UI = GUI.Window(Name.GetHashCode() + 0, UI, WindowFunction, "Developer Console");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ShowLog()
|
||||
{
|
||||
if (showCounter != 0)
|
||||
{
|
||||
showCounter--;
|
||||
|
||||
GUI.Label(new Rect(40, 0, 600, 160), TotalShowingLog, new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.UpperLeft,
|
||||
fontSize = 26,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void WindowFunction(int windowID)
|
||||
{
|
||||
GUI.Label(new Rect(10, 40, 380, 160), TotalLog, new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.LowerLeft,
|
||||
wordWrap = true,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
if (GUI.Button(new Rect(295, 20, 100, 20), "Dump scene"))
|
||||
{
|
||||
SceneDumper.DumpScene();
|
||||
}
|
||||
|
||||
GUI.DragWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{434F00D0-BD2A-4C81-A2FE-8DBFBBD9D9AB}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DeveloperConsole</RootNamespace>
|
||||
<AssemblyName>DeveloperConsole</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\..\lib\UnityEngine.UI.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DeveloperConsole.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SceneDumper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("DeveloperConsole")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("DeveloperConsole")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("434f00d0-bd2a-4c81-a2fe-8dbfbbd9d9ab")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,67 +0,0 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace DeveloperConsole
|
||||
{
|
||||
static class SceneDumper
|
||||
{
|
||||
public static void DumpScene()
|
||||
{
|
||||
var objects = SceneManager.GetActiveScene().GetRootGameObjects();
|
||||
|
||||
var fname = Path.GetTempFileName();
|
||||
using (var f = File.OpenWrite(fname))
|
||||
using (var sw = new StreamWriter(f, Encoding.UTF8))
|
||||
{
|
||||
foreach (var obj in objects)
|
||||
{
|
||||
PrintRecursive(sw, obj);
|
||||
}
|
||||
}
|
||||
Process.Start("notepad.exe", fname);
|
||||
}
|
||||
|
||||
private static void PrintRecursive(StreamWriter sw, GameObject obj)
|
||||
{
|
||||
PrintRecursive(sw, obj, 0);
|
||||
}
|
||||
|
||||
private static void PrintRecursive(StreamWriter sw, GameObject obj, int d)
|
||||
{
|
||||
//Console.WriteLine(obj.name);
|
||||
var pad1 = new string(' ', 3 * d);
|
||||
var pad2 = new string(' ', 3 * (d + 1));
|
||||
var pad3 = new string(' ', 3 * (d + 2));
|
||||
sw.WriteLine(pad1 + obj.name + "--" + obj.GetType().FullName);
|
||||
|
||||
foreach (Component c in obj.GetComponents<Component>())
|
||||
{
|
||||
sw.WriteLine(pad2 + "::" + c.GetType().Name);
|
||||
|
||||
var ct = c.GetType();
|
||||
var props = ct.GetProperties(System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
|
||||
foreach (var p in props)
|
||||
{
|
||||
try
|
||||
{
|
||||
var v = p.GetValue(c, null);
|
||||
sw.WriteLine(pad3 + "@" + p.Name + "<" + p.PropertyType.Name + "> = " + v);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
//Console.WriteLine(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
foreach (Transform t in obj.transform)
|
||||
{
|
||||
PrintRecursive(sw, t.gameObject, d + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6FE9DE86-F466-49FD-BCCA-ADD512C8DCE8}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DynamicTranslationLoader</RootNamespace>
|
||||
<AssemblyName>DynamicTranslationLoader</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony, Version=1.0.9.1, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\0Harmony.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="TextMeshPro-1.0.55.56.0b12">
|
||||
<HintPath>..\..\lib\TextMeshPro-1.0.55.56.0b12.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\..\lib\UnityEngine.UI.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DynamicTranslator.cs" />
|
||||
<Compile Include="Hooks.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="translation\translation.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,120 +0,0 @@
|
||||
using BepInEx;
|
||||
using BepInEx.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace DynamicTranslationLoader
|
||||
{
|
||||
public class DynamicTranslator : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.dynamictranslator";
|
||||
public override string Name => "Dynamic Translator";
|
||||
public override Version Version => new Version("1.2");
|
||||
|
||||
private static Dictionary<string, string> translations = new Dictionary<string, string>();
|
||||
private static List<string> untranslated = new List<string>();
|
||||
|
||||
void Awake()
|
||||
{
|
||||
string[] translation = File.ReadAllLines(Utility.CombinePaths(Utility.PluginsDirectory, "translation", "translation.txt"));
|
||||
|
||||
for (int i = 0; i < translation.Length; i++)
|
||||
{
|
||||
string line = translation[i];
|
||||
if (!line.Contains('='))
|
||||
continue;
|
||||
|
||||
string[] split = line.Split('=');
|
||||
|
||||
translations[split[0]] = split[1];
|
||||
}
|
||||
|
||||
Hooks.InstallHooks();
|
||||
|
||||
TranslateAll();
|
||||
}
|
||||
|
||||
|
||||
void LevelFinishedLoading(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
TranslateScene(scene);
|
||||
}
|
||||
|
||||
public static string Translate(string input)
|
||||
{
|
||||
if (translations.ContainsKey(input))
|
||||
return translations[input];
|
||||
|
||||
if (!untranslated.Contains(input) &&
|
||||
!translations.ContainsValue(input.Trim()))
|
||||
{
|
||||
untranslated.Add(input);
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
void TranslateAll()
|
||||
{
|
||||
foreach (TextMeshProUGUI gameObject in Resources.FindObjectsOfTypeAll<TextMeshProUGUI>())
|
||||
{
|
||||
//gameObject.text = "Harsh is shit";
|
||||
|
||||
gameObject.text = Translate(gameObject.text);
|
||||
}
|
||||
}
|
||||
|
||||
void TranslateScene(Scene scene)
|
||||
{
|
||||
foreach (GameObject obj in scene.GetRootGameObjects())
|
||||
foreach (TextMeshProUGUI gameObject in obj.GetComponentsInChildren<TextMeshProUGUI>(true))
|
||||
{
|
||||
//gameObject.text = "Harsh is shit";
|
||||
|
||||
gameObject.text = Translate(gameObject.text);
|
||||
}
|
||||
}
|
||||
|
||||
void Dump()
|
||||
{
|
||||
string output = "";
|
||||
|
||||
foreach (var kv in translations)
|
||||
output += $"{kv.Key.Trim()}={kv.Value.Trim()}\r\n";
|
||||
|
||||
foreach (var text in untranslated)
|
||||
if(!Regex.Replace(text, @"[\d-]", string.Empty).IsNullOrWhiteSpace()
|
||||
&& !text.Contains("Reset"))
|
||||
output += $"{text.Trim()}=\r\n";
|
||||
|
||||
File.WriteAllText("dumped-tl.txt", output);
|
||||
}
|
||||
|
||||
#region MonoBehaviour
|
||||
void OnEnable()
|
||||
{
|
||||
SceneManager.sceneLoaded += LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SceneManager.sceneLoaded -= LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.F10))
|
||||
{
|
||||
Dump();
|
||||
BepInLogger.Log($"Text dumped to \"{Path.GetFullPath("dumped-tl.txt")}\"", true);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
using Harmony;
|
||||
using System.Reflection;
|
||||
using TMPro;
|
||||
|
||||
namespace DynamicTranslationLoader
|
||||
{
|
||||
public static class Hooks
|
||||
{
|
||||
public static void InstallHooks()
|
||||
{
|
||||
var harmony = HarmonyInstance.Create("com.bepis.bepinex.dynamictranslationloader");
|
||||
|
||||
|
||||
MethodInfo original = AccessTools.Property(typeof(TMP_Text), "text").GetSetMethod();
|
||||
|
||||
HarmonyMethod prefix = new HarmonyMethod(typeof(Hooks).GetMethod("TextPropertyHook"));
|
||||
|
||||
harmony.Patch(original, prefix, null);
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(TMP_Text), "SetText", new[] { typeof(string) });
|
||||
|
||||
prefix = new HarmonyMethod(typeof(Hooks).GetMethod("SetTextHook"));
|
||||
|
||||
harmony.Patch(original, prefix, null);
|
||||
|
||||
|
||||
original = AccessTools.Property(typeof(UnityEngine.UI.Text), "text").GetSetMethod();
|
||||
|
||||
prefix = new HarmonyMethod(typeof(Hooks).GetMethod("TextPropertyHook"));
|
||||
|
||||
harmony.Patch(original, prefix, null);
|
||||
}
|
||||
|
||||
public static void TextPropertyHook(ref string value)
|
||||
{
|
||||
value = DynamicTranslator.Translate(value);
|
||||
}
|
||||
|
||||
public static void SetTextHook(ref string text)
|
||||
{
|
||||
text = DynamicTranslator.Translate(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("BaseTranslationLoader")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("BaseTranslationLoader")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("6fe9de86-f466-49fd-bcca-add512c8dce8")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,881 +0,0 @@
|
||||
素直クール=Honest
|
||||
のじゃっ子=Archaic
|
||||
意地っ張り=Obstinate
|
||||
無口=Quiet
|
||||
ものぐさ=Lazy
|
||||
ヤンデレ=Yandere
|
||||
オタク女子=Otaku
|
||||
ミーハー=Trendy
|
||||
正統派ヒロイン=Main Heroine
|
||||
モジモジ=Fidgety
|
||||
文学少女=Literary Girl
|
||||
不幸少女=Unlucky
|
||||
ひねくれ=Uncooperative
|
||||
意識高いクール=Narcissist
|
||||
野生的=Feral
|
||||
不良少女=Delinquent
|
||||
ギャル=Gyaru
|
||||
姉御肌=Big Sister
|
||||
母性的=Motherly
|
||||
邪気眼=Cursed Eye
|
||||
単純=Ordinary
|
||||
純粋無垢=Pure
|
||||
ボーイッシュ=Boyish
|
||||
大和撫子=Traditional Beauty
|
||||
電波=Weirdo
|
||||
ミステリアス=Mysterious
|
||||
後輩キャラ=Underclassman
|
||||
高飛車=Mistress
|
||||
お嬢様=Aristocrat
|
||||
セクシー=Sexy
|
||||
カラー①=Color ①
|
||||
腰=Waist
|
||||
親=Parent
|
||||
左右の親を入れ替え=Swap Sides
|
||||
種類=Type
|
||||
学生服(校内)=School uniform (Indoors)
|
||||
Option A=Option A
|
||||
コピー=Copy
|
||||
陰毛の色を眉の色に合わせる=Copy eyebrow color over to pubic hair
|
||||
柄の種類=Pattern type
|
||||
カテゴリ01=Category 01
|
||||
なし=None
|
||||
タイプ=Category
|
||||
スロット01の調整02=Slot 01 Adjustment point 02
|
||||
アウトラインの色を個別に設定する=Enable Outline Color Adjustment
|
||||
ボトムス=Bottoms
|
||||
服の柄③=Cloth Pattern ③
|
||||
後ろ髪の種類=Back Hair Type
|
||||
ショート=Underwear
|
||||
アニメ=Anime
|
||||
表示する靴のタイプ=Displayed Shoe Type
|
||||
首=Neck
|
||||
下まぶたの形状3=Lower Eyelid Shape 3
|
||||
コピー元のコーディネート=Uniform Source
|
||||
コピー先のコーディネート=Uniform Destination
|
||||
全選択=All
|
||||
全解除=None
|
||||
ショーツの種類=Underwear Type
|
||||
リボンショーツ=Ribbon Underwear
|
||||
上まぶたの形状3=Upper Eyelid Shape 3
|
||||
親を初期設定に戻す=Restore Default Parent
|
||||
柄②の大きさ(高さ)=Pattern ② Height
|
||||
調整①をコピー=Copy Adjustment ①
|
||||
グループ=Group
|
||||
調整02=Adjust 02
|
||||
アクセサリの色を初期に戻す=Restore to default color
|
||||
背中左=Back left
|
||||
体=Body
|
||||
回転 Y=Rotation Y
|
||||
髪のツヤ種類=Highlight Selection
|
||||
線ハイライト=Line Highlight
|
||||
首周りの奥=Neck Thickness
|
||||
エンブレムの種類=Emblem Type
|
||||
上腕の幅=Upper Arm Width
|
||||
ハイライト下の種類=Lower Highlight Type
|
||||
タイプ3=Type 3
|
||||
スロット16=Slot 16
|
||||
タイプや種類変更時に前回の親を引き継ぐ=Use previous parent when changing accessory
|
||||
種類変更時に前回の色を引き継ぐ=Use previous color when changing accessory
|
||||
カラー②=Color ②
|
||||
カラー③=Color ③
|
||||
カラー④=Color ④
|
||||
調整01=Adjustment 01
|
||||
クリックで編集します=Click to edit
|
||||
メイン=Main
|
||||
サブ=Sub
|
||||
※ アクセサリの表示をまとめて切り替える時の=※ The time when the accessories get shown can be
|
||||
グループ分けです。=changed with the buttons above.
|
||||
サブに設定するとH開始時に非表示になります。=When set to sub, it will be hidden during H scenes.
|
||||
柄③の大きさ(幅)=Pattern ③ Width
|
||||
ブラの種類=Bra Type
|
||||
デフォルト=Default
|
||||
肌ラインを表示する=Display Skin Detail Lines
|
||||
スロット01の親を選択=Select parent of slot 01
|
||||
服の色①=Cloth Color ①
|
||||
目尻の上下位置=Outer Eye Corner Height
|
||||
顎の幅=Jaw Width
|
||||
回転 X=Rotation X
|
||||
タイプ2=Type 2
|
||||
ペイント02回転=Paint 02 Rotation
|
||||
勉強する?=Likes to study?
|
||||
YES=YES
|
||||
NO=No
|
||||
尻のサイズ=Ass Size
|
||||
眉のパターン=Eyebrow Pattern
|
||||
耳=Ear
|
||||
耳のサイズ=Ear Size
|
||||
耳の角度Y軸=Ear Angle Y Axis
|
||||
耳の角度Z軸=Ear Angle Z Axis
|
||||
耳の上部形状=Ear Upper Shape
|
||||
耳の下部形状=Ear Lower Shape
|
||||
装飾の柄=Decoration Pattern#necktie
|
||||
個性=Traits
|
||||
頻尿=Small Bladder
|
||||
はらぺこ=Glutton
|
||||
鈍感=Insensitive
|
||||
チョロイ=Easygoing
|
||||
ビッチ=Slut
|
||||
むっつり=Gloomy
|
||||
読書好き=Likes Reading
|
||||
音楽好き=Likes Music
|
||||
活発=Lively
|
||||
受け身=Passive
|
||||
フレンドリー=Friendly
|
||||
綺麗好き=Likes Cleaning
|
||||
怠惰=Lazy
|
||||
神出鬼没=Phantom
|
||||
一人好き=Loner
|
||||
運動好き=Likes Exercising
|
||||
真面目=Serious
|
||||
ランダム=Random
|
||||
下半身=Lower Body
|
||||
腰下の奥=Hip Depth
|
||||
八重歯を表示する=Enable Fangs
|
||||
アクセサリ(頭)の種類=Accessory (Head) Selection
|
||||
リップの種類=Lip Type
|
||||
ブラ=Bra
|
||||
1.0=1.0
|
||||
柄①の大きさ(幅)=Pattern ① Width
|
||||
アクセサリ(胴)の種類=Torso Accessory Selection
|
||||
陰毛の種類=Pubic Hair Type
|
||||
薄い=Thin
|
||||
陰毛の色=Pubic Hair Color
|
||||
陰毛の色を髪と眉に反映する=Copy pubic hair color over to hair and eyebrows
|
||||
陰毛の色を髪の色に合わせる=Copy hair color over to pubic hair
|
||||
ボトムスを初期の状態に戻す=Restore Default Bottoms Settings
|
||||
パンストを初期の状態に戻す=Restore Default Pantyhose Settings
|
||||
パンストの種類=Pantyhose Type
|
||||
服の柄①=Cloth Pattern ①
|
||||
柄①の大きさ(高さ)=Pattern ① Height
|
||||
柄①の色=Pattern Color ①
|
||||
服の色②=Cloth Color ②
|
||||
服の柄②=Cloth Pattern ②
|
||||
柄②の大きさ(幅)=Pattern ② Width
|
||||
柄②の色=Pattern Color ②
|
||||
服の色③=Cloth Color ③
|
||||
柄③の大きさ(高さ)=Pattern ③ Height
|
||||
柄③の色=Pattern Color ③
|
||||
HSV=HSV
|
||||
インナーの種類=Inner Type
|
||||
ワイシャツ=Shirt
|
||||
ウエストの位置=Waist Position
|
||||
腹部=Belly Thickness
|
||||
腰上の幅=Waist Width
|
||||
腰上の奥=Waist Thickness
|
||||
腰下の幅=Hip Width
|
||||
尻の角度=Ass Angle
|
||||
タイプ1=Type 1
|
||||
頬骨の幅=Cheekbone Width
|
||||
スロット01=Slot 01
|
||||
スロット02=Slot 02
|
||||
スロット03=Slot 03
|
||||
スロット04=Slot 04
|
||||
スロット05=Slot 05
|
||||
スロット06=Slot 06
|
||||
スロット07=Slot 07
|
||||
スロット08=Slot 08
|
||||
スロット09=Slot 09
|
||||
スロット10=Slot 10
|
||||
スロット11=Slot 11
|
||||
スロット12=Slot 12
|
||||
スロット13=Slot 13
|
||||
スロット14=Slot 14
|
||||
スロット15=Slot 15
|
||||
スロット17=Slot 17
|
||||
スロット18=Slot 18
|
||||
スロット19=Slot 19
|
||||
スロット20=Slot 20
|
||||
入れ替え=Transfer
|
||||
コピー元を選択して下さい=Item Source
|
||||
コピー先を選択して下さい=Item Destination
|
||||
左右の親を切り替える=Swap sides when transfering
|
||||
スロットをコピー=Copy Slot
|
||||
調整①を左右反転コピー=Copy adjustment ① horizontal coordination in reverse
|
||||
調整①を上下反転コピー=Copy adjustment ① upside down
|
||||
調整②をコピー=Copy adjustment ②
|
||||
調整②を左右反転コピー=Copy adjustment ② horizontal coordination in reverse
|
||||
調整②を上下反転コピー=Copy adjustment ② upside down
|
||||
---------------------- 髪 ----------------------=---------------------- Hair ------------------------
|
||||
ポニー=Pony
|
||||
ツイン左=Twin L
|
||||
ツイン右=Twin R
|
||||
ヘアピン左=Hairpin Left
|
||||
ヘアピン右=Hairpin Right
|
||||
---------------------- 頭 ----------------------=---------------------- Head ----------------------
|
||||
帽子=Hat
|
||||
額=Forehead
|
||||
頭上=Overhead
|
||||
頭中心=Head Center
|
||||
---------------------- 顔 ----------------------=---------------------- Face ----------------------
|
||||
イヤリング左=Earring Left
|
||||
イヤリング右=Earring Right
|
||||
眼鏡=Glasses
|
||||
鼻=Nose
|
||||
口=Mouth
|
||||
---------------------- 首 ----------------------=---------------------- Neck ------------------------
|
||||
胸上=Chest Above
|
||||
胸上中央=Chest Center
|
||||
---------------------- 胴 ----------------------=---------------------- Body ------------------------
|
||||
左乳首=Nipple Left
|
||||
右乳首=Nipple Right
|
||||
背中中央=Back Center
|
||||
背中右=Back R
|
||||
---------------------- 腰 ----------------------=---------------------- Waist ------------------------
|
||||
腰前=Waist Front
|
||||
腰後ろ=Waist Back
|
||||
腰左=Waist Left
|
||||
腰右=Waist Right
|
||||
---------------------- 脚 ----------------------=---------------------- Leg ------------------------
|
||||
左太もも=Thigh Left
|
||||
左ひざ=Knee Left
|
||||
左足首=Ankle Left
|
||||
かかと左=Heel Left
|
||||
右太もも=Thigh Right
|
||||
右ひざ=Knee Right
|
||||
右足首=Ankle Right
|
||||
かかと右=Heel Right
|
||||
---------------------- 腕 ----------------------=---------------------- Arm ------------------------
|
||||
左肩=Shoulder
|
||||
左上腕=Upperarm Left
|
||||
左ひじ=Elbow Left
|
||||
左手首=Wrist Left
|
||||
右肩=Shoulder
|
||||
右上腕=Upperarm Right
|
||||
右ひじ=Elbow Right
|
||||
右手首=Wrist Right
|
||||
---------------------- 手 ----------------------=---------------------- Hand ----------------------
|
||||
左手=Hand Left
|
||||
左人差指=Index Finger Left
|
||||
左中指=Middle Finger Left
|
||||
左薬指=Ring Finger Left
|
||||
右手=Hand Right
|
||||
右人差指=Index Finger Right
|
||||
右中指=Middle Finger Right
|
||||
右薬指=Ring Finger Right
|
||||
--------------------- 股間 ---------------------=--------------------- Groin ---------------------
|
||||
男根根本=Penis Base
|
||||
女性器=Vagina base
|
||||
尻穴=Butthole
|
||||
スロット01の調整01=Slot 01 Adjustment 01
|
||||
XYZの文字を左右ドラッグでも調整できます=You can also adjust XYZ characters by dragging left and right
|
||||
移動量=Position
|
||||
0.1=0.1
|
||||
10.0=10.0
|
||||
位置 X=Position X
|
||||
位置 Y=Position Y
|
||||
位置 Z=Position Z
|
||||
回転量=Rotate
|
||||
5.0=5.0
|
||||
回転 Z=Rotation Z
|
||||
拡縮量=Scale
|
||||
0.01=0.01
|
||||
拡縮 X=Scaling X
|
||||
拡縮 Y=Scale Y
|
||||
拡縮 Z=Scaling Z
|
||||
値をコピー=Copy Values
|
||||
値を貼り付け=Paste Values
|
||||
全てリセット=Reset All
|
||||
アクセサリ(髪)の種類=Hair Accessory Selection
|
||||
アクセサリ(顔)の種類=Face Accessory Selection
|
||||
アクセサリ(首)の種類=Neck Accessory Selection
|
||||
アクセサリ(腰)の種類=Waist Accessory Selection
|
||||
アクセサリ(脚)の種類=Leg Accessory Selection
|
||||
アクセサリ(腕)の種類=Arm Accessory Selection
|
||||
アクセサリ(手)の種類=Hand Accessory Selection
|
||||
アクセサリ(股間)の種類=Groin Accessory Selection
|
||||
顔の上部上下=Upper Face Height
|
||||
フェイスペイント01配置=Face Paint 01 Position
|
||||
ペイント01の色=Paint 01 Color
|
||||
顎先の前後=Chin Depth
|
||||
目頭の左右位置=Inner Eye Corner Height
|
||||
眉の色を髪の色に合わせる=Copy Eyebrow Color To Hair
|
||||
服読込み=Load Clothes
|
||||
エクステ=Extension
|
||||
下まぶたの形状2=Lower Eyelid Shape 2
|
||||
決定=Apply
|
||||
性=Surname
|
||||
顔の全体横幅=Face Width
|
||||
首周りの幅=Neck Width
|
||||
口の横幅=Mouth Width
|
||||
横髪の種類=Side Hair Type
|
||||
パンスト=Pantyhose
|
||||
乳首の種類=Nipple Type
|
||||
前髪の長さ=Front Hair Length
|
||||
胸の上下角度=Chest Vertical Angle
|
||||
透明度=Transparency
|
||||
アイライン上の種類=Upperlashes Type
|
||||
タイプ9=Type 9
|
||||
髪の色を眉と陰毛に反映する=Copy Hair Color To Eyebrows and Pubic Hair
|
||||
O=O
|
||||
日焼け跡=Tan
|
||||
日焼け跡の種類=Tan Type
|
||||
日焼け跡の色=Tan Color
|
||||
フェイスペイント02の種類=Face Paint 02 Type
|
||||
胴体下の奥=Lower Torso Thickness
|
||||
靴(内履き)=Shoes (Indoors
|
||||
全体=General
|
||||
顔の上部前後=Upper Face Depth
|
||||
顔の上部サイズ=Upper Face Size
|
||||
顔の下部前後=Lower Face Depth
|
||||
顔の下部横幅=Lower Face Width
|
||||
特殊表現の種類=Face Overlay Type
|
||||
特殊表現の強さ=Face Overlay Strength
|
||||
ペイント02左右位置=Paint 02 Horizontal Position
|
||||
口の開き=Mouth Openness
|
||||
頬のツヤの強さ=Cheek Gloss
|
||||
唇のツヤの強さ=Lip Gloss
|
||||
瞳の上下位置=Iris Vertical Position
|
||||
ペイント02の色=Paint 02 Color
|
||||
トップス=Top
|
||||
肌の色(赤み部分)=Skin Color (blush)
|
||||
膝下の奥=Knee Thickness
|
||||
プリーツスカートA=Pleated Skirt A
|
||||
眉の種類=Eyebrow Type
|
||||
顎の上下=Jaw Vertical Position
|
||||
名前を入力して下さい=Enter a name
|
||||
ジャケットタイプ=Jacket Type
|
||||
肉感の種類=Skin Impression Type
|
||||
緑=Green
|
||||
ホクロの大きさ=Mole Size
|
||||
白目のグラデ種類=Sclera Type
|
||||
靴(外履き)=Shoes (Outdoors)
|
||||
太もも上の幅=Upper Thigh Width
|
||||
コーディネート一覧=Uniform List
|
||||
アクセサリの表示=Displayed Accessories
|
||||
顎=Jaw
|
||||
鮮やかさ=Saturation
|
||||
靴の種類=Shoe Type
|
||||
最小=Minimum
|
||||
眉の外側形状=Outer Eyebrow Shape
|
||||
変形まとめ=Slider List
|
||||
肘周りの幅=Elbow Width
|
||||
右目の設定を左目に反映=Copy Right Eye Settings To Left Eye
|
||||
確認操作パネル=Control Panel
|
||||
コーディネートタイプ=Uniform Type
|
||||
色分けハイソックス=Color-coded high-socks
|
||||
見本=Sample
|
||||
スライダー=Slider
|
||||
トップスを初期の状態に戻す=Restore Default Top Settings
|
||||
胴体肩周りの幅=Shoulder Width
|
||||
胴体肩周りの奥=Should Thickness
|
||||
胴体上の幅=Upper Torso Width
|
||||
胴体上の奥=Upper Torso Thickness
|
||||
胴体下の幅=Lower Torso Width
|
||||
目の角度=Eye Rotation
|
||||
髪の色を陰毛の色に合わせる=Copy Hair Color To Pubic Hair
|
||||
胸=Breast
|
||||
胸のサイズ=Breast Size
|
||||
胸の上下位置=Breast Vertical Position
|
||||
胸の左右開き=Breast Spacing
|
||||
胸の左右位置=Breast Horizontal Position
|
||||
胸の尖り=Breast Depth
|
||||
胸の形状=Breast Roundness
|
||||
胸の柔らかさ=Breast Softness
|
||||
胸の重さ=Breast Weight
|
||||
乳輪の膨らみ=Areola Depth
|
||||
乳首の太さ=Nipple Thickness
|
||||
乳首立ち=Nipple Depth
|
||||
乳輪の大きさ=Areola Size
|
||||
乳首の色=Nipple Color
|
||||
乳首のツヤ強さ=Nipple Gloss
|
||||
左目の設定を右目に反映=Copy Left Eye Settings To Right Eye
|
||||
リボン=Ribbon
|
||||
鼻の種類=Nose Type
|
||||
爪の色=Nail Color
|
||||
前髪・後ろ髪・横髪・エクステの色を統一する=Share Color With All Hairs
|
||||
肩の奥=Shoulder Depth
|
||||
ボトムスの種類=Bottom Type
|
||||
チェックA=Check A
|
||||
手袋を初期の状態に戻す=Restore Default Glove Settings
|
||||
靴下を初期の状態に戻す=Restore Default Sock Settings
|
||||
靴下の種類=Sock Types
|
||||
頬=Cheek
|
||||
装飾の色=Decoration Color
|
||||
口の形状上=Upperlip Depth
|
||||
サンプル=Sample
|
||||
全削除=Delete All
|
||||
身長=Body Height
|
||||
フェイスペイント02配置=Face paint 02 Position
|
||||
爪のツヤの強さ=Nail Gloss
|
||||
瞳のグラデ上下調整=Eye Gradient Vertical Position
|
||||
顎の下部奥行=Lower Jaw Depth
|
||||
西=West
|
||||
足首の幅=Ankle Width
|
||||
名前=Name
|
||||
上履き=Shoes
|
||||
肉感の強さ=Skin Impression Strength
|
||||
ペイント01大きさ=Paint 01 Size
|
||||
タイプ21=Type 21
|
||||
ペイント01左右補正=Paint 01 Horizontal Position
|
||||
激しい愛撫を拒否しない?=Doesn't refuse violent caressing?
|
||||
ペイント02位置プリセット=Paint 02 Position Presets
|
||||
髪の色を眉の色に合わせる=Copy Hair Color To Eyebrows
|
||||
ピッカー=Picker
|
||||
プリセット=Preset
|
||||
色合い=Hue
|
||||
明るさ=Brightness
|
||||
赤=Red
|
||||
青=Blue
|
||||
RGB=RGB
|
||||
横髪=Side Hair
|
||||
リボンブラ=Ribbon Bra
|
||||
ペイント01の種類=Paint 01 Type
|
||||
瞳の高さ=Iris Height
|
||||
=
|
||||
※ 各項目の変形に関するものをまとめたものとなります。=※Aggregate Slider List
|
||||
最大=Maximum
|
||||
頭のサイズ=Head Size
|
||||
肩幅=Shoulder Width
|
||||
上腕の奥=Upper Arm Thickness
|
||||
肘周りの奥=Elbow Thickness
|
||||
前腕=Forearm
|
||||
太もも上の奥=Upper Thigh Thickness
|
||||
太もも下の幅=Lower Thigh Width
|
||||
太もも下の奥=Lower Thigh Thickness
|
||||
膝下の幅=Knee Width
|
||||
ふくらはぎ=Calves
|
||||
足首の奥=Ankle Thickness
|
||||
ハイライトの下色=Lower Highlight Color
|
||||
ポーズ=Pose
|
||||
頬の上下=Cheek Vertical Position
|
||||
上書き保存=Overwrite Save
|
||||
眉の上下=Eyebrow Vertical Position
|
||||
装飾の種類=Decoration Type
|
||||
ブラを初期の状態に戻す=Restore Default Bra Settings
|
||||
背景色=Background Color
|
||||
顔全体の横幅=Face Width
|
||||
顎の下部上下=Lower Jaw Vertical Position
|
||||
顎の前後=Jaw Depth
|
||||
顎の先上下=Chin Tip
|
||||
顎の先前後=Chin Depth
|
||||
顎の先幅=Chin Width
|
||||
頬骨の前後=Cheekbone Depth
|
||||
頬の幅=Cheek Width
|
||||
頬の前後=Cheek Depth
|
||||
眉の横位置=Eyebrow Spacing
|
||||
眉の角度=Eyebrow Angle
|
||||
眉の内側形状=Inner Eyebrow Shape
|
||||
上まぶたの形状1=Upper Eyelid Shape 1
|
||||
上まぶたの形状2=Upper Eyelid Shape 2
|
||||
下まぶたの形状1=Lower Eyelid Shape 1
|
||||
目の上下=Eye Vertical Position
|
||||
目の横位置=Eye Spacing
|
||||
目の前後=Eye Depth
|
||||
目の縦幅=Eye Height
|
||||
目の横幅=Eye Width
|
||||
鼻先の高さ=Nose Tip Height
|
||||
鼻の上下=Nose Vertical Position
|
||||
鼻筋の高さ=Nose Ridge Height
|
||||
口の上下=Mouth Vertical Position
|
||||
口の前後=Mouth Depth
|
||||
口の形状下=Underlip Depth
|
||||
口の形状口角=Mouth Corner Shape
|
||||
ボディーペイント02の配置=Body Paint 02 Position
|
||||
ホクロの種類=Mole Type
|
||||
オプション①を表示=Display option ①
|
||||
オプション②を表示=Display option 2
|
||||
ショーツを初期の状態に戻す=Restore Default Underwear Settings
|
||||
ペイント02サイズ補正=Paint 02 Size
|
||||
質問=Questionary
|
||||
動物は好き?=Likes animals?
|
||||
食べるのは好き?=Likes to eat?
|
||||
料理するのは好き?=Likes to cook?
|
||||
運動する?=Likes to exercise?
|
||||
オシャレする?=Is stylish?
|
||||
コーヒーはブラック?=Drinks their coffee black?
|
||||
からいのは平気?=OK with spicy food?
|
||||
甘いのは好き?=Likes sweets?
|
||||
エッチ=Sexual Preferences
|
||||
ボディーペイント01の種類=Body paint 01 Selection
|
||||
胴の種類=Chest Type
|
||||
パーツA=Part A
|
||||
腕=Arm
|
||||
瞳のグラデ種類=Eye Gradient Type
|
||||
服の状態=Clothing State
|
||||
自動=Auto
|
||||
着衣=Clothing
|
||||
下着=Underwear
|
||||
全裸=Naked
|
||||
内履き=Indoors
|
||||
外履き=Outdoors
|
||||
目のパターン=Eye Pattern
|
||||
目の開き=Eye Openness
|
||||
瞬きをしない=Disable Blinking
|
||||
口のパターン=Mouth Pattern
|
||||
視線の向き=Eye Direction
|
||||
カメラ=Camera
|
||||
視線の向き調整=Eye Direction Intensity
|
||||
首の向き=Head Direction
|
||||
首の向き調整=Head Direction Intensity
|
||||
基本=Basic
|
||||
ライトの向き調整=Light Direction
|
||||
X=X
|
||||
Y=Y
|
||||
ライトの向きを初期化=Reset Light Direction
|
||||
背景の種類=Background
|
||||
画像=Image
|
||||
単色=Static
|
||||
001 / 010=001/010
|
||||
撮影フレーム=Card Frame
|
||||
前面フレームを表示=Front Frame
|
||||
001 / 006=001/006
|
||||
背面フレームを表示=Back Frame
|
||||
日付=Date
|
||||
※ 読込みたい情報にチェックを入れてください=※ Please check the information you want to read
|
||||
顔=Face
|
||||
髪=Hair
|
||||
キャラ情報=Character Information
|
||||
コーディネートセット=Uniform Sets
|
||||
読込み=Load
|
||||
削除=Delete
|
||||
新規保存=New Save
|
||||
服=Clothes
|
||||
アクセサリ=Accessory
|
||||
化粧=Make up
|
||||
ローファー=Loafers
|
||||
手袋=Gloves
|
||||
手袋の種類=Glove Type
|
||||
横髪の基本の色=Side Hair Base Color
|
||||
※ プレイヤーの名前はゲーム開始時に指定します。=※ The name of the player is specified at the beginning of the game.
|
||||
ここで指定した男の名前はゲームでは使用されません。=The name of the man specified here is not used in the game.
|
||||
愛称=Nickname
|
||||
性格=Personality
|
||||
※ プレイヤーの呼び方を「なし」にした場合はゲーム本編の=※ If you set the player's name to "none", the game's main part
|
||||
設定に依存します。=It depends on the setting.
|
||||
プレイヤーの呼び方=How to adress player
|
||||
血液型=Blood Type
|
||||
A=A
|
||||
B=B
|
||||
AB=AB
|
||||
誕生日=Birthday
|
||||
月=M
|
||||
日=D
|
||||
部活=Club Activities
|
||||
帰宅部=Going Home Club
|
||||
音声調整(低-高)=Voice Pitch (Low - High)
|
||||
性格を選択=Personality Selection
|
||||
意識高いクールな女性=A conscious and cool woman
|
||||
名=Name
|
||||
キャンセル=Cancel
|
||||
愛称を入力して下さい=Enter a nickname
|
||||
しない=No
|
||||
キャラ保存と削除=Saving and deleting characters
|
||||
アウターの種類=Outer Type
|
||||
エクステの基本の色=Extension Base Color
|
||||
キャラ=Character
|
||||
性感帯=Erogenous Zone
|
||||
頭=Head
|
||||
キスを拒否しない?=Doesn't refuse kisses?
|
||||
アナルを拒否しない?=Doesn't refuse anal?
|
||||
電マを拒否しない?=Doesn't refuse electric massagers?
|
||||
ゴム付けなくてもOK?=Ok without a condom??
|
||||
ペイント02の配置=Paint 02 Position
|
||||
眉を髪より手前に表示=Eyebrows Show Through Hair
|
||||
ブレザーC=Blazer C
|
||||
前髪の基本の色=Front Hair Base Color
|
||||
眉の色を陰毛の色に合わせる=Copy Eyebrow Color To Pubic Hair
|
||||
ペイント01の配置=Paint 01 Position
|
||||
ボディーペイント01の配置=Body Paint 01 Position
|
||||
アイシャドウの種類=Eye Shadow Type
|
||||
トップスの種類=Top Type
|
||||
ペイント01回転=Paint 01 Rotation
|
||||
横流しヘア(左)=Horizontal flowing hair (left)
|
||||
前髪の種類=Front Hair Type
|
||||
瞳の色②=Eye Color ②
|
||||
ペイント02左右補正=Paint 02 Horizontal Position
|
||||
注視点を表示する=Enable Camera Guide
|
||||
瞳の種類=Eye Type
|
||||
タイプ11=Type 11
|
||||
ペイント01上下補正=Paint 01 Vertical Position
|
||||
顎先の上下=Chin Vertical Position
|
||||
顎先の幅=Chin Width
|
||||
眉=Eyebrow
|
||||
眉の色=Eyebrow Color
|
||||
コンフィグ依存=Config Decides
|
||||
する=Yes
|
||||
眉の色を髪と陰毛に反映する=Copy Eyebrow Color To Hair And Pubic Hair
|
||||
目元=Eyes
|
||||
アイライン下の種類=Underlashes Type
|
||||
アイラインの色=Eyelashes Color
|
||||
目=Iris
|
||||
白目の色①=Sclera Color ①
|
||||
白目の色②=Sclera Color ②
|
||||
ハイライト上の種類=Upper Highlight Type
|
||||
ハイライト上の色=Upper Highlight Color
|
||||
瞳の左右位置=Iris Spacing
|
||||
瞳の幅=Iris Width
|
||||
目を髪より手前に表示=Iris Show Through Hair
|
||||
瞳の設定方法=Eye To Edit
|
||||
両目=Both Eyes
|
||||
左目=Left Eye
|
||||
右目=Right Eye
|
||||
瞳の色①=Eye Color ①
|
||||
瞳のグラデ合成方法=Eye Gradient Stength
|
||||
瞳のグラデサイズ=Eye Gradient Size
|
||||
リップラインの種類=Lip Line Type
|
||||
リップラインの色=Lip Line Color
|
||||
ホクロ=Mole
|
||||
ホクロの色=Mole Color
|
||||
ホクロの左右位置=Mole Horizontal Position
|
||||
ホクロの上下位置=Mole Vertical Position
|
||||
ホクロ位置プリセット=Mole Position Presets
|
||||
ホクロ配置=Mole Positioning
|
||||
化粧(基本)=Make-Up
|
||||
※ 現在の目のパターンではアイシャドウは表示されません。=* The eye shadow is not displayed in the pattern of the current eye.
|
||||
アイシャドウの色=Eye Shadow Color
|
||||
チークの種類=Cheek Type
|
||||
チークの色=Cheek Color
|
||||
リップの色=Lip Color
|
||||
ペイント01左右位置=Paint 01 Horizontal Position
|
||||
ペイント01上下位置=Paint 01 Vertical Position
|
||||
ペイント01位置プリセット=Paint 01 Position Presets
|
||||
ペイント02の種類=Paint 02 Type
|
||||
ペイント02上下位置=Paint 02 Vertical Position
|
||||
ペイント02大きさ=Paint 02 Size
|
||||
フェイスペイント01の種類=Face Paint 01 Type
|
||||
肌の色=Skin Color
|
||||
肌のツヤの強さ=Skin Gloss
|
||||
上半身=Upper Body
|
||||
脚=Leg
|
||||
爪=Nails
|
||||
陰毛=Pubic Hair
|
||||
ペイント=Paint
|
||||
ペイント01サイズ補正=Paint 01 Size
|
||||
ペイント02上下補正=Paint 02 Vertical Position
|
||||
ボディーペイント02の種類=Body paint 02 Selection
|
||||
根本と毛先の色を個別に設定する=Enable Root And Tip Color Adjustment
|
||||
後ろ髪=Back Hair
|
||||
後ろ髪の基本の色=Back Hair Base Color
|
||||
後ろ髪の根本の色=Back Hair Root Color
|
||||
後ろ髪の毛先の色=Back Hair Tip Color
|
||||
アウトラインの色=Outline Color
|
||||
髪飾りの色①=Hair Accessory Color ①
|
||||
髪飾りの色②=Hair Accessory Color ②
|
||||
髪飾りの色③=Hair Accessory Color ③
|
||||
髪飾りの色を初期に戻す=Set Accessory Color To Default
|
||||
前髪=Front Hair
|
||||
前髪の根本の色=Front Hair Root Color
|
||||
前髪の毛先の色=Front Hair Tip Color
|
||||
横髪の根本の色=Side Hair Root Color
|
||||
横髪の毛先の色=Side Hair Tip Color
|
||||
エクステの種類=Extension Type
|
||||
エクステの根本の色=Extension Root Color
|
||||
エクステの毛先の色=Extension Tip Color
|
||||
付け毛の種類=Hair Selection
|
||||
その他=Other
|
||||
ツヤの種類=Highlight Type
|
||||
襟の種類=Collar Type
|
||||
装飾の柄の大きさ(幅)=Decoration Pattern Size (Width)
|
||||
装飾の柄の大きさ(高さ)=Decoration Pattern Size (Height)
|
||||
装飾の柄の色=Decoration Pattern Color
|
||||
ショーツ=Underwear
|
||||
靴下=Socks
|
||||
内履きを初期の状態に戻す=Restore inner wear to initial condition
|
||||
外履きを初期の状態に戻す=Returning the outer wear to the initial state
|
||||
パーツB=Part B
|
||||
パーツC=Part C
|
||||
キャラ読込み=Character Loading
|
||||
服の保存と削除=Save or delete uniforms
|
||||
コンフィグ=Config
|
||||
影の表現=Shadow Type
|
||||
深いくっきり影=Deep Sharp Shadow
|
||||
影の濃さ=Shadow Density
|
||||
アウトラインの濃さ=Outline Density
|
||||
アウトラインの幅=Outline Thickness
|
||||
BGMの音量=BGM Volume
|
||||
効果音の音量=SE Volume
|
||||
キャラ一覧=Character List
|
||||
※ 学生証画像及びカード画像を撮影=※ Snap a student ID card and card
|
||||
しないと保存できません。=image, otherwise you can't save.
|
||||
学生証画像を撮影=Student ID Card
|
||||
カード画像を撮影=Card Image
|
||||
撮影=Snap picture
|
||||
保存=Save
|
||||
戻る=Return
|
||||
No Image=No Image
|
||||
学生証画像=Student ID Card Image
|
||||
カード画像=Card Image
|
||||
コーディネート名を入力して下さい=Please enter the uniform name
|
||||
本当に削除しますか?=Do you really want to delete this?
|
||||
はい=Yes
|
||||
いいえ=No
|
||||
キャラ画像を変更しますか?=Do you want to change the character image?
|
||||
変更して保存=Change and save
|
||||
変更せず保存=Save without changing
|
||||
保存をやめる=Cancel
|
||||
スペースキーで戻ります=Press Spacebar to return
|
||||
キャラメイクを終了しますか?=Exit Game?
|
||||
※ アクセサリの表示をまとめて切り替える時の
|
||||
グループ分けです。
|
||||
サブに設定するとH開始時に非表示になります。=※ The time when the accessories get shown can be changed with the buttons above. When set to sub, it will be hidden during H scenes.
|
||||
スロット09=Slot 09
|
||||
スロット07=Slot 07
|
||||
スロット02=Slot 02
|
||||
スロット05=Slot 05
|
||||
スロット03=Slot 03
|
||||
調整=Adjustment
|
||||
スロット06=Slot 06
|
||||
スロット01=Slot 01
|
||||
スロット04=Slot 04
|
||||
スロット08=Slot 08
|
||||
※ 各項目の変形に関するものをまとめたものとなります。=※Aggregate Slider List
|
||||
カラー=Color
|
||||
親を選択=Select parent
|
||||
浅いなめらか影=Light Smooth Shadow
|
||||
ロングヘア=Long Hair
|
||||
ロングサイドテール(左)=Long Side Tail (L)
|
||||
ロングサイドテール(右)=Long Side Tail (R)
|
||||
ツインテール=Twintail
|
||||
お嬢様ロング=Long Braid
|
||||
ボブヘア=Bob Hair
|
||||
アップツイン=High Twintail
|
||||
カールボブ=Curled Bob
|
||||
ベリーショート=Very Short
|
||||
サイドテール(右)=Side Tail (R)
|
||||
ツインおさげ=Low Twintail
|
||||
サイドテール(左)=Side Tail (L)
|
||||
結わえロング=Tied Long
|
||||
ポニーテイル=Pony Tail
|
||||
三つ編み=Braided
|
||||
サイドアップ(右)=Side Up (R)
|
||||
サイドアップ(左)=Side Up (L)
|
||||
学生服(下校)=School uniform (Outdoors)
|
||||
体操着=Gym clothes
|
||||
水着=Swimsuit
|
||||
私服=Personal clothes
|
||||
お泊り=Staying over
|
||||
水泳部=Swimming Club
|
||||
漫研部=Manga club
|
||||
チアリーディング部=Cheerleading Club
|
||||
茶道部=Tea Ceremony Club
|
||||
陸上部=Track
|
||||
揺れ=Bounce
|
||||
立ち01=Pose 01
|
||||
立ち02=Pose 02
|
||||
立ち03=Pose 03
|
||||
立ち04=Pose 04
|
||||
立ち05=Pose 05
|
||||
立ち06=Pose 06
|
||||
立ち07=Pose 07
|
||||
立ち08=Pose 08
|
||||
立ち09=Pose 09
|
||||
立ち10=Pose 10
|
||||
立ち11=Pose 11
|
||||
立ち12=Pose 12
|
||||
立ち13=Pose 13
|
||||
立ち14=Pose 14
|
||||
立ち15=Pose 15
|
||||
立ち16=Pose 16
|
||||
立ち17=Pose 17
|
||||
立ち18=Pose 18
|
||||
立ち19=Pose 19
|
||||
立ち20=Pose 20
|
||||
立ち21=Pose 21
|
||||
立ち22=Pose 22
|
||||
立ち23=Pose 23
|
||||
立ち24=Pose 24
|
||||
立ち25=Pose 25
|
||||
立ち26=Pose 26
|
||||
立ち27=Pose 27
|
||||
立ち28=Pose 28
|
||||
立ち29=Pose 29
|
||||
立ち30=Pose 30
|
||||
立ち31=Pose 31
|
||||
立ち32=Pose 32
|
||||
立ち33=Pose 33
|
||||
立ち34=Pose 34
|
||||
座り=Kneel
|
||||
寝=Lie Down
|
||||
上=Up
|
||||
右上=Upper Right
|
||||
右=Right
|
||||
右下=Bottom Right
|
||||
下=Down
|
||||
左下=Bottom Left
|
||||
左=Left
|
||||
左上=Upper left
|
||||
そらす=Avert Gaze
|
||||
笑顔=Smile
|
||||
嬉しい=Happy
|
||||
嬉しいs=HappyS
|
||||
嬉しいss=HappySS
|
||||
ドキドキ=Excited
|
||||
ドキドキs=ExcitedS
|
||||
ドキドキss=ExcitedSS
|
||||
怒り=Upset
|
||||
怒り2=Upset2
|
||||
真剣1=Serious 1
|
||||
真剣2=Serious 2
|
||||
嫌悪=Hate
|
||||
寂しい=Sad
|
||||
焦り=Flustered
|
||||
不満=Dissatisfied
|
||||
呆れ=Amazed
|
||||
驚き=Surprised
|
||||
驚きs=SurprisedS
|
||||
ドヤ=Smug
|
||||
舌ペロ=Playful
|
||||
舐め=Eat
|
||||
咥え=Hold In Mouth
|
||||
キス=Kiss
|
||||
舌出し口開け=Tongue Out
|
||||
あ 小=A Small
|
||||
あ 大=A Big
|
||||
い 小=I Small
|
||||
い 大=I Big
|
||||
う 小=U Small
|
||||
う 大=U Big
|
||||
え 小=E Small
|
||||
え 大=E Big
|
||||
お 小=O Small
|
||||
お 大=O Big
|
||||
ん 小=N Small
|
||||
ん 大=N Big
|
||||
猫口 閉じ=Cat
|
||||
三角=Triangle
|
||||
デフォルメニコ=Deformed Smile
|
||||
両目閉じ=Closed
|
||||
笑顔 両目閉じ=Happy Closed
|
||||
微笑=Happy
|
||||
ウィンク左=Wink L
|
||||
ウィンク右=Wink R
|
||||
切ない=Painful
|
||||
照れ=Shy
|
||||
真剣=Serious
|
||||
つまらない=Bored
|
||||
苦しい=Distressed
|
||||
思案=Pondering
|
||||
悲しい=Sad
|
||||
泣き=Sobbing
|
||||
落胆=Displeased
|
||||
困る=Worried
|
||||
ぐるぐる目1=Circle 1
|
||||
ぐるぐる目2=Circle 2
|
||||
ぐるぐる目3=Circle 3
|
||||
瞳に星=Star
|
||||
瞳にハート=Small Heart
|
||||
目がハート=Big Heart
|
||||
目に炎=Fire
|
||||
デフォルメウィンク=Deformed Wink
|
||||
縦一文字=Stripe Vertical
|
||||
デフォルメつむり=Deformed Closed
|
||||
横一文字=Stripe Horizontal
|
||||
デフォルメ泣き=Deformed Cry
|
||||
困り=Worried
|
||||
疑問L=Doubt L
|
||||
疑問R=Doubt R
|
||||
思案L=Pondering L
|
||||
思案R=Pondering R
|
||||
怒り2L=Angry L
|
||||
怒り2R=Angry R
|
||||
不安=Anxious
|
||||
ウィンクL=Wink L
|
||||
ウィンクR=Wink R
|
||||
股間=Groin
|
||||
アナル=Anal
|
||||
尻=Butt
|
||||
乳首=Nipple
|
||||
胴=Torso
|
||||
手=Hand
|
||||
股間周り=Groin
|
||||
@@ -1,55 +0,0 @@
|
||||
using BepInEx;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace ExtensibleSaveFormat
|
||||
{
|
||||
public class ExtensibleSaveFormat : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.extendedsave";
|
||||
|
||||
public override string Name => "Extensible Save Format";
|
||||
|
||||
public override Version Version => new Version("1.0");
|
||||
|
||||
void Awake()
|
||||
{
|
||||
Hooks.InstallHooks();
|
||||
}
|
||||
|
||||
internal static Dictionary<ChaFile, Dictionary<string, object>> internalDictionary = new Dictionary<ChaFile, Dictionary<string, object>>();
|
||||
|
||||
#region Events
|
||||
|
||||
public delegate void CardEventHandler(ChaFile file);
|
||||
|
||||
public static event CardEventHandler CardBeingSaved;
|
||||
|
||||
public static event CardEventHandler CardBeingLoaded;
|
||||
|
||||
internal static void writeEvent(ChaFile file)
|
||||
{
|
||||
CardBeingSaved?.Invoke(file);
|
||||
}
|
||||
|
||||
internal static void readEvent(ChaFile file)
|
||||
{
|
||||
CardBeingLoaded?.Invoke(file);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public static bool TryGetExtendedFormat(ChaFile file, out Dictionary<string, object> extendedFormatData)
|
||||
{
|
||||
return internalDictionary.TryGetValue(file, out extendedFormatData);
|
||||
}
|
||||
|
||||
public static void SetExtendedFormat(ChaFile file, Dictionary<string, object> extendedFormatData)
|
||||
{
|
||||
internalDictionary[file] = extendedFormatData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{8EBE81B9-9ED9-466D-864A-4C644BFD8827}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ExtensibleSaveFormat</RootNamespace>
|
||||
<AssemblyName>ExtensibleSaveFormat</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony">
|
||||
<HintPath>..\..\lib\0Harmony.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp-firstpass">
|
||||
<HintPath>..\..\lib\Assembly-CSharp-firstpass.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ExtensibleSaveFormat.cs" />
|
||||
<Compile Include="Hooks.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,75 +0,0 @@
|
||||
using Harmony;
|
||||
using MessagePack;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace ExtensibleSaveFormat
|
||||
{
|
||||
public static class Hooks
|
||||
{
|
||||
public static void InstallHooks()
|
||||
{
|
||||
var harmony = HarmonyInstance.Create("com.bepis.bepinex.extensiblesaveformat");
|
||||
|
||||
|
||||
MethodInfo original = AccessTools.Method(typeof(ChaFile), "SaveFile", new[] { typeof(BinaryWriter), typeof(bool) });
|
||||
|
||||
HarmonyMethod postfix = new HarmonyMethod(typeof(Hooks).GetMethod("SaveFileHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(ChaFile), "LoadFile", new[] { typeof(BinaryReader), typeof(bool), typeof(bool) });
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("LoadFileHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
}
|
||||
|
||||
public static void SaveFileHook(ChaFile __instance, bool __result, BinaryWriter bw, bool savePng)
|
||||
{
|
||||
if (!__result)
|
||||
return;
|
||||
|
||||
ExtensibleSaveFormat.writeEvent(__instance);
|
||||
|
||||
if (!ExtensibleSaveFormat.TryGetExtendedFormat(__instance, out Dictionary<string, object> extendedData))
|
||||
return;
|
||||
|
||||
byte[] bytes = MessagePackSerializer.Serialize(extendedData);
|
||||
|
||||
bw.Write((int)bytes.Length);
|
||||
bw.Write(bytes);
|
||||
}
|
||||
|
||||
public static void LoadFileHook(ChaFile __instance, bool __result, BinaryReader br, bool noLoadPNG, bool noLoadStatus)
|
||||
{
|
||||
if (!__result)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
int length = br.ReadInt32();
|
||||
|
||||
if (length > 0)
|
||||
{
|
||||
byte[] bytes = br.ReadBytes(length);
|
||||
|
||||
ExtensibleSaveFormat.internalDictionary[__instance] = MessagePackSerializer.Deserialize<Dictionary<string, object>>(bytes);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (EndOfStreamException) { }
|
||||
|
||||
//initialize a new dictionary since it doesn't exist
|
||||
ExtensibleSaveFormat.internalDictionary[__instance] = new Dictionary<string, object>();
|
||||
|
||||
ExtensibleSaveFormat.readEvent(__instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ExtensibleSaveFormat")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ExtensibleSaveFormat")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("8ebe81b9-9ed9-466d-864a-4c644bfd8827")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,49 +0,0 @@
|
||||
using BepInEx;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace InputUnlocker
|
||||
{
|
||||
class InputUnlocker : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.inputunlocker";
|
||||
public override string Name => "Input Length Unlocker";
|
||||
public override Version Version => new Version("1.0");
|
||||
|
||||
void Awake()
|
||||
{
|
||||
foreach (InputField gameObject in GameObject.FindObjectsOfType<InputField>())
|
||||
{
|
||||
UnlockInput(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
void LevelFinishedLoading(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
foreach (GameObject obj in scene.GetRootGameObjects())
|
||||
foreach (InputField gameObject in obj.GetComponentsInChildren<InputField>(true))
|
||||
{
|
||||
UnlockInput(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
void UnlockInput(InputField input)
|
||||
{
|
||||
input.characterLimit = 999;
|
||||
}
|
||||
|
||||
#region MonoBehaviour
|
||||
void OnEnable()
|
||||
{
|
||||
SceneManager.sceneLoaded += LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SceneManager.sceneLoaded -= LevelFinishedLoading;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{379BA41B-9944-4B5A-8732-EEBAA7F05B04}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>InputUnlocker</RootNamespace>
|
||||
<AssemblyName>InputUnlocker</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\..\lib\UnityEngine.UI.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="InputUnlocker.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("InputUnlocker")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("InputUnlocker")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("379ba41b-9944-4b5a-8732-eebaa7f05b04")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,40 +0,0 @@
|
||||
using BepInEx.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ResourceRedirector
|
||||
{
|
||||
public static class AssetLoader
|
||||
{
|
||||
public static AudioClip LoadAudioClip(string path, AudioType type)
|
||||
{
|
||||
using (WWW loadGachi = new WWW(Utility.ConvertToWWWFormat(path)))
|
||||
{
|
||||
AudioClip clip = loadGachi.GetAudioClipCompressed(false, type);
|
||||
|
||||
//force single threaded loading instead of using a coroutine
|
||||
while (!clip.isReadyToPlay) { }
|
||||
|
||||
return clip;
|
||||
}
|
||||
}
|
||||
|
||||
public static Texture2D LoadTexture(string path)
|
||||
{
|
||||
byte[] data = File.ReadAllBytes(path);
|
||||
|
||||
Texture2D tex = new Texture2D(2, 2);
|
||||
|
||||
//DDS method
|
||||
//tex.LoadRawTextureData
|
||||
|
||||
tex.LoadImage(data);
|
||||
|
||||
return tex;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,133 +0,0 @@
|
||||
using BepInEx;
|
||||
using Harmony;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ResourceRedirector
|
||||
{
|
||||
static class Hooks
|
||||
{
|
||||
public static void InstallHooks()
|
||||
{
|
||||
var harmony = HarmonyInstance.Create("com.bepis.bepinex.resourceredirector");
|
||||
|
||||
|
||||
MethodInfo original = AccessTools.Method(typeof(AssetBundleManager), "LoadAsset", new[] { typeof(string), typeof(string), typeof(Type), typeof(string) });
|
||||
|
||||
HarmonyMethod postfix = new HarmonyMethod(typeof(Hooks).GetMethod("LoadAssetPostHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(AssetBundleManager), "LoadAssetBundle", new[] { typeof(string), typeof(bool), typeof(string) });
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("LoadAssetBundlePostHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(AssetBundleManager), "LoadAssetAsync", new[] { typeof(string), typeof(string), typeof(Type), typeof(string) });
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("LoadAssetAsyncPostHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(AssetBundleManager), "LoadAllAsset", new[] { typeof(string), typeof(Type), typeof(string) });
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("LoadAllAssetPostHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
}
|
||||
|
||||
public static void LoadAssetPostHook(ref AssetBundleLoadAssetOperation __result, string assetBundleName, string assetName, Type type, string manifestAssetBundleName)
|
||||
{
|
||||
try
|
||||
{
|
||||
//BepInLogger.Log($"{assetBundleName} : {assetName} : {type.FullName} : {manifestAssetBundleName ?? ""}");
|
||||
|
||||
__result = ResourceRedirector.HandleAsset(assetBundleName, assetName, type, manifestAssetBundleName, ref __result);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("---" + nameof(LoadAssetPostHook) + "---");
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
Console.WriteLine("---");
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadAssetBundlePostHook(string assetBundleName, bool isAsync, string manifestAssetBundleName)
|
||||
{
|
||||
try
|
||||
{
|
||||
//BepInLogger.Log($"{assetBundleName} : {manifestAssetBundleName} : {isAsync}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("---" + nameof(LoadAssetBundlePostHook) + "---");
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
Console.WriteLine("---");
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadAssetAsyncPostHook(ref AssetBundleLoadAssetOperation __result, string assetBundleName, string assetName, Type type, string manifestAssetBundleName)
|
||||
{
|
||||
try
|
||||
{
|
||||
//BepInLogger.Log($"{assetBundleName} : {assetName} : {type.FullName} : {manifestAssetBundleName ?? ""}", true);
|
||||
|
||||
__result = ResourceRedirector.HandleAsset(assetBundleName, assetName, type, manifestAssetBundleName, ref __result);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("---" + nameof(LoadAssetAsyncPostHook) + "---");
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
Console.WriteLine("---");
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadAllAssetPostHook(ref AssetBundleLoadAssetOperation __result, string assetBundleName, Type type, string manifestAssetBundleName = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
//BepInLogger.Log($"{assetBundleName} : {type.FullName} : {manifestAssetBundleName ?? ""}");
|
||||
|
||||
if (assetBundleName == "sound/data/systemse/brandcall/00.unity3d" ||
|
||||
assetBundleName == "sound/data/systemse/titlecall/00.unity3d")
|
||||
{
|
||||
string dir = $"{BepInEx.Common.Utility.PluginsDirectory}\\introclips";
|
||||
|
||||
if (!Directory.Exists(dir))
|
||||
Directory.CreateDirectory(dir);
|
||||
|
||||
var files = Directory.GetFiles(dir, "*.wav");
|
||||
|
||||
if (files.Length == 0)
|
||||
return;
|
||||
|
||||
List<UnityEngine.Object> loadedClips = new List<UnityEngine.Object>();
|
||||
|
||||
foreach (string path in files)
|
||||
loadedClips.Add(AssetLoader.LoadAudioClip(path, AudioType.WAV));
|
||||
|
||||
__result = new AssetBundleLoadAssetOperationSimulation(loadedClips.ToArray());
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("---" + nameof(LoadAllAssetPostHook) + "---");
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
Console.WriteLine("---");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
using BepInEx;
|
||||
using Illusion.Game;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ResourceRedirector
|
||||
{
|
||||
static class BGMLoader
|
||||
{
|
||||
public static bool HandleAsset(string assetBundleName, string assetName, Type type, string manifestAssetBundleName, out AssetBundleLoadAssetOperation result)
|
||||
{
|
||||
if (assetName.StartsWith("bgm"))
|
||||
{
|
||||
string path;
|
||||
|
||||
switch ((BGM)int.Parse(assetName.Remove(0, 4)))
|
||||
{
|
||||
case BGM.Title:
|
||||
default:
|
||||
path = $"{BepInEx.Common.Utility.PluginsDirectory}\\title.wav";
|
||||
break;
|
||||
case BGM.Custom:
|
||||
path = $"{BepInEx.Common.Utility.PluginsDirectory}\\custom.wav";
|
||||
break;
|
||||
}
|
||||
|
||||
if (File.Exists(path))
|
||||
{
|
||||
|
||||
BepInLogger.Log($"Loading {path}");
|
||||
|
||||
result = new AssetBundleLoadAssetOperationSimulation(AssetLoader.LoadAudioClip(path, AudioType.WAV));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace ResourceRedirector
|
||||
{
|
||||
public static class IntroVoiceClipLoader
|
||||
{
|
||||
//public static bool HandleAsset(string assetBundleName, string assetName, Type type, string manifestAssetBundleName, out AssetBundleLoadAssetOperation result)
|
||||
//{
|
||||
// if (assetName.StartsWith("bgm") && type == typeof(AudioClip))
|
||||
// {
|
||||
// string path;
|
||||
|
||||
// switch ((BGM)int.Parse(assetName.Remove(0, 4)))
|
||||
// {
|
||||
// case BGM.Title:
|
||||
// default:
|
||||
// path = $"{BepInEx.Common.Utility.PluginsDirectory}\\title.wav";
|
||||
// break;
|
||||
// case BGM.Custom:
|
||||
// path = $"{BepInEx.Common.Utility.PluginsDirectory}\\custom.wav";
|
||||
// break;
|
||||
// }
|
||||
|
||||
// if (File.Exists(path))
|
||||
// {
|
||||
|
||||
// Chainloader.Log($"Loading {path}");
|
||||
|
||||
// result = new AssetBundleLoadAssetOperationSimulation(AssetLoader.LoadAudioClip(path, AudioType.WAV));
|
||||
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
|
||||
// result = null;
|
||||
// return false;
|
||||
//}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ResourceRedirector")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ResourceRedirector")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("3ea76ca3-45b6-4a1a-b04f-7a1a8c978af6")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,79 +0,0 @@
|
||||
using BepInEx;
|
||||
using BepInEx.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ResourceRedirector
|
||||
{
|
||||
public class ResourceRedirector : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.resourceredirector";
|
||||
public override string Name => "Asset Emulator";
|
||||
public override Version Version => new Version("1.3");
|
||||
|
||||
public static string EmulatedDir => Path.Combine(Utility.ExecutingDirectory, "abdata-emulated");
|
||||
|
||||
public static bool EmulationEnabled;
|
||||
|
||||
|
||||
|
||||
public delegate bool AssetHandler(string assetBundleName, string assetName, Type type, string manifestAssetBundleName, out AssetBundleLoadAssetOperation result);
|
||||
|
||||
public static List<AssetHandler> AssetResolvers = new List<AssetHandler>();
|
||||
|
||||
|
||||
|
||||
void Awake()
|
||||
{
|
||||
Hooks.InstallHooks();
|
||||
|
||||
EmulationEnabled = Directory.Exists(EmulatedDir);
|
||||
|
||||
AssetResolvers.Add(BGMLoader.HandleAsset);
|
||||
}
|
||||
|
||||
|
||||
public static AssetBundleLoadAssetOperation HandleAsset(string assetBundleName, string assetName, Type type, string manifestAssetBundleName, ref AssetBundleLoadAssetOperation __result)
|
||||
{
|
||||
foreach (var handler in AssetResolvers)
|
||||
{
|
||||
if (handler.Invoke(assetBundleName, assetName, type, manifestAssetBundleName, out AssetBundleLoadAssetOperation result))
|
||||
return result;
|
||||
}
|
||||
|
||||
//emulate asset load
|
||||
string dir = Path.Combine(EmulatedDir, assetBundleName.Replace('/', '\\').Replace(".unity3d", ""));
|
||||
|
||||
if (Directory.Exists(dir))
|
||||
{
|
||||
if (type == typeof(Texture2D))
|
||||
{
|
||||
string path = Path.Combine(dir, $"{assetName}.png");
|
||||
|
||||
if (!File.Exists(path))
|
||||
return __result;
|
||||
|
||||
BepInLogger.Log($"Loading emulated asset {path}");
|
||||
|
||||
return new AssetBundleLoadAssetOperationSimulation(AssetLoader.LoadTexture(path));
|
||||
}
|
||||
else if (type == typeof(AudioClip))
|
||||
{
|
||||
string path = Path.Combine(dir, $"{assetName}.wav");
|
||||
|
||||
if (!File.Exists(path))
|
||||
return __result;
|
||||
|
||||
BepInLogger.Log($"Loading emulated asset {path}");
|
||||
|
||||
return new AssetBundleLoadAssetOperationSimulation(AssetLoader.LoadAudioClip(path, AudioType.WAV));
|
||||
}
|
||||
}
|
||||
|
||||
//otherwise return normal asset
|
||||
return __result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{3EA76CA3-45B6-4A1A-B04F-7A1A8C978AF6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ResourceRedirector</RootNamespace>
|
||||
<AssemblyName>ResourceRedirector</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony">
|
||||
<HintPath>..\..\lib\0Harmony.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AssetLoader.cs" />
|
||||
<Compile Include="Loaders\BGMLoader.cs" />
|
||||
<Compile Include="Hooks.cs" />
|
||||
<Compile Include="Loaders\IntroVoiceClipLoader.cs" />
|
||||
<Compile Include="ResourceRedirector.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,142 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace alphaShot
|
||||
{
|
||||
//code from essu and Kenzato
|
||||
public static class AlphaShot
|
||||
{
|
||||
public static byte[] Capture(int ResolutionX, int ResolutionY, int DownscalingRate, int AntiAliasing)
|
||||
{
|
||||
//File.WriteAllLines(GameObject.FindObjectsOfType<SkinnedMeshRenderer>().Select(x => x.material.shader.name).Distinct().OrderBy(x => x).ToArray();
|
||||
var c = Camera.main;
|
||||
|
||||
var t1 = PerformCapture(true, ResolutionX * DownscalingRate, ResolutionY * DownscalingRate, AntiAliasing);
|
||||
var t2 = PerformCapture(false, ResolutionX * DownscalingRate, ResolutionY * DownscalingRate, AntiAliasing);
|
||||
|
||||
|
||||
var p1 = t1.GetPixels();
|
||||
var p2 = t2.GetPixels();
|
||||
|
||||
for (int i = 0; i < p1.Length; i++)
|
||||
{
|
||||
var pp1 = p1[i];
|
||||
var pp2 = p2[i];
|
||||
|
||||
var pp1a = pp1.a;
|
||||
var pp2a = pp2.a;
|
||||
|
||||
pp1.a = 1.0f;
|
||||
pp2.a = 1.0f;
|
||||
p1[i] = Color.Lerp(pp1, pp2, pp2a);
|
||||
p1[i].a = Mathf.Clamp01(pp2a * 4);
|
||||
}
|
||||
t1.SetPixels(p1);
|
||||
t1.Apply();
|
||||
|
||||
TextureScale.Bilinear(t1, ResolutionX, ResolutionY);
|
||||
|
||||
byte[] output = t1.EncodeToPNG();
|
||||
|
||||
GameObject.Destroy(t1);
|
||||
GameObject.Destroy(t2);
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
public static Texture2D PerformCapture(bool captureAlphaOnly, int ResolutionX, int ResolutionY, int AntiAliasing)
|
||||
{
|
||||
var go = new GameObject();
|
||||
Camera RenderCam = go.AddComponent<Camera>();
|
||||
RenderCam.CopyFrom(Camera.main);
|
||||
CopyComponents(Camera.main.gameObject, RenderCam.gameObject);
|
||||
|
||||
var backRenderTexture = RenderCam.targetTexture;
|
||||
var backRect = RenderCam.rect;
|
||||
|
||||
var oldBackground = RenderCam.backgroundColor;
|
||||
var oldFlags = RenderCam.clearFlags;
|
||||
|
||||
var width = ResolutionX;
|
||||
var height = ResolutionY;
|
||||
var tex = new Texture2D(width, height, TextureFormat.ARGB32, false);
|
||||
|
||||
var rt = RenderTexture.GetTemporary(width, height, 32, RenderTextureFormat.Default, RenderTextureReadWrite.Default, AntiAliasing);
|
||||
|
||||
var lst = new List<SkinnedMeshRenderer>();
|
||||
if (captureAlphaOnly)
|
||||
{
|
||||
Graphics.SetRenderTarget(rt);
|
||||
GL.Clear(true, true, Color.clear);
|
||||
Graphics.SetRenderTarget(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var smr in GameObject.FindObjectsOfType<SkinnedMeshRenderer>())
|
||||
if (smr.enabled)
|
||||
{
|
||||
//if (smr.material.renderQueue > 2500 || smr.material.renderQueue == -1 && smr.material.shader.renderQueue > 2500)
|
||||
if (smr.material.shader.name == "Shader Forge/PBRsp_alpha" ||
|
||||
smr.material.shader.name == "Shader Forge/PBRsp_alpha_culloff" ||
|
||||
smr.material.shader.name == "Shader Forge/PBRsp_texture_alpha" ||
|
||||
smr.material.shader.name == "Shader Forge/PBRsp_texture_alpha_culloff" ||
|
||||
smr.material.shader.name == "Unlit/Transparent")
|
||||
{
|
||||
lst.Add(smr);
|
||||
smr.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RenderCam.backgroundColor = new Color(0f, 0f, 0f, 0f);
|
||||
RenderCam.clearFlags = captureAlphaOnly ? CameraClearFlags.Depth : CameraClearFlags.Color;
|
||||
RenderCam.targetTexture = rt;
|
||||
RenderCam.rect = new Rect(0, 0, 1f, 1f);
|
||||
RenderCam.Render();
|
||||
RenderCam.targetTexture = backRenderTexture;
|
||||
RenderCam.rect = backRect;
|
||||
RenderTexture.active = rt;
|
||||
tex.ReadPixels(new Rect(0f, 0f, width, height), 0, 0);
|
||||
tex.Apply();
|
||||
RenderTexture.active = null;
|
||||
|
||||
RenderCam.backgroundColor = oldBackground;
|
||||
RenderCam.clearFlags = oldFlags;
|
||||
|
||||
RenderTexture.ReleaseTemporary(rt);
|
||||
|
||||
foreach (var smr in lst)
|
||||
smr.enabled = true;
|
||||
return tex;
|
||||
}
|
||||
|
||||
static void CopyComponents(GameObject original, GameObject target)
|
||||
{
|
||||
foreach (Component component in original.GetComponents<Component>())
|
||||
{
|
||||
var newComponent = CopyComponent(component, target);
|
||||
|
||||
if (component is MonoBehaviour)
|
||||
{
|
||||
var behavior = (MonoBehaviour)component;
|
||||
|
||||
(newComponent as MonoBehaviour).enabled = behavior.enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//https://answers.unity.com/questions/458207/copy-a-component-at-runtime.html
|
||||
static Component CopyComponent(Component original, GameObject destination)
|
||||
{
|
||||
System.Type type = original.GetType();
|
||||
Component copy = destination.AddComponent(type);
|
||||
// Copied fields can be restricted with BindingFlags
|
||||
System.Reflection.FieldInfo[] fields = type.GetFields();
|
||||
foreach (System.Reflection.FieldInfo field in fields)
|
||||
{
|
||||
field.SetValue(copy, field.GetValue(original));
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Screencap
|
||||
{
|
||||
public static class LegacyRenderer
|
||||
{
|
||||
public static byte[] RenderCamera(int ResolutionX, int ResolutionY, int DownscalingRate, int AntiAliasing)
|
||||
{
|
||||
var go = new GameObject();
|
||||
Camera renderCam = go.AddComponent<Camera>();
|
||||
renderCam.CopyFrom(Camera.main);
|
||||
CopyComponents(Camera.main.gameObject, renderCam.gameObject);
|
||||
|
||||
renderCam.targetTexture = new RenderTexture(ResolutionX * DownscalingRate, ResolutionY * DownscalingRate, 32); //((int)cam.pixelRect.width, (int)cam.pixelRect.height, 32);
|
||||
renderCam.aspect = renderCam.targetTexture.width / (float)renderCam.targetTexture.height;
|
||||
renderCam.targetTexture.antiAliasing = AntiAliasing;
|
||||
|
||||
RenderTexture currentRT = RenderTexture.active;
|
||||
RenderTexture.active = renderCam.targetTexture;
|
||||
|
||||
renderCam.clearFlags = CameraClearFlags.Skybox;
|
||||
|
||||
renderCam.Render();
|
||||
Texture2D image = new Texture2D(ResolutionX * DownscalingRate, ResolutionY * DownscalingRate);
|
||||
image.ReadPixels(new Rect(0, 0, ResolutionX * DownscalingRate, ResolutionY * DownscalingRate), 0, 0);
|
||||
|
||||
TextureScale.Bilinear(image, ResolutionX, ResolutionY);
|
||||
|
||||
image.Apply();
|
||||
RenderTexture.active = currentRT;
|
||||
GameObject.Destroy(renderCam.targetTexture);
|
||||
GameObject.Destroy(renderCam);
|
||||
|
||||
byte[] result = image.EncodeToPNG();
|
||||
|
||||
GameObject.Destroy(image);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void CopyComponents(GameObject original, GameObject target)
|
||||
{
|
||||
foreach (Component component in original.GetComponents<Component>())
|
||||
{
|
||||
var newComponent = CopyComponent(component, target);
|
||||
|
||||
if (component is MonoBehaviour)
|
||||
{
|
||||
var behavior = (MonoBehaviour)component;
|
||||
|
||||
(newComponent as MonoBehaviour).enabled = behavior.enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//https://answers.unity.com/questions/458207/copy-a-component-at-runtime.html
|
||||
static Component CopyComponent(Component original, GameObject destination)
|
||||
{
|
||||
System.Type type = original.GetType();
|
||||
Component copy = destination.AddComponent(type);
|
||||
// Copied fields can be restricted with BindingFlags
|
||||
System.Reflection.FieldInfo[] fields = type.GetFields();
|
||||
foreach (System.Reflection.FieldInfo field in fields)
|
||||
{
|
||||
field.SetValue(copy, field.GetValue(original));
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Screencap")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Screencap")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("6a9d08c0-4482-4d1a-9368-9f41b7126f9e")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6A9D08C0-4482-4D1A-9368-9F41B7126F9E}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Screencap</RootNamespace>
|
||||
<AssemblyName>Screencap</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AlphaShot.cs" />
|
||||
<Compile Include="LegacyRenderer.cs" />
|
||||
<Compile Include="ScreenshotManager.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -1,239 +0,0 @@
|
||||
using alphaShot;
|
||||
using BepInEx;
|
||||
using BepInEx.Common;
|
||||
using Illusion.Game;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Screencap
|
||||
{
|
||||
public class ScreenshotManager : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.screenshotmanager";
|
||||
public override string Name => "Screenshot Manager";
|
||||
public override Version Version => new Version("2.0");
|
||||
|
||||
Event ScreenKeyEvent = Event.KeyboardEvent("f9");
|
||||
Event CharacterKeyEvent = Event.KeyboardEvent("f11");
|
||||
Event CharacterSettingsKeyEvent = Event.KeyboardEvent("#f11");
|
||||
|
||||
|
||||
|
||||
private string screenshotDir = Utility.CombinePaths(Utility.ExecutingDirectory, "UserData", "cap");
|
||||
|
||||
#region Config properties
|
||||
|
||||
private int ResolutionX
|
||||
{
|
||||
get => int.Parse(this.GetEntry("resolution-x", "1024"));
|
||||
set => this.SetEntry("resolution-x", value.ToString());
|
||||
}
|
||||
|
||||
private int ResolutionY
|
||||
{
|
||||
get => int.Parse(this.GetEntry("resolution-y", "1024"));
|
||||
set => this.SetEntry("resolution-y", value.ToString());
|
||||
}
|
||||
|
||||
private int AntiAliasing
|
||||
{
|
||||
get => int.Parse(this.GetEntry("antialiasing", "4"));
|
||||
set => this.SetEntry("antialiasing", value.ToString());
|
||||
}
|
||||
|
||||
private int DownscalingRate
|
||||
{
|
||||
get => int.Parse(this.GetEntry("downscalerate", "1"));
|
||||
set => this.SetEntry("downscalerate", value.ToString());
|
||||
}
|
||||
|
||||
private int RenderMethod
|
||||
{
|
||||
get => int.Parse(this.GetEntry("rendermethod", "1"));
|
||||
set => this.SetEntry("rendermethod", value.ToString());
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (!Directory.Exists(screenshotDir))
|
||||
Directory.CreateDirectory(screenshotDir);
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (UnityEngine.Event.current.Equals(CharacterSettingsKeyEvent))
|
||||
{
|
||||
showingUI = !showingUI;
|
||||
}
|
||||
else if (UnityEngine.Event.current.Equals(ScreenKeyEvent))
|
||||
{
|
||||
string filename = Path.Combine(screenshotDir, $"Koikatsu -{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.png");
|
||||
StartCoroutine(TakeScreenshot(filename));
|
||||
}
|
||||
else if (UnityEngine.Event.current.Equals(CharacterKeyEvent))
|
||||
{
|
||||
string filename = Path.Combine(screenshotDir, $"Koikatsu Char-{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.png");
|
||||
TakeCharScreenshot(filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
IEnumerator TakeScreenshot(string filename)
|
||||
{
|
||||
Application.CaptureScreenshot(filename);
|
||||
Illusion.Game.Utils.Sound.Play(SystemSE.photo);
|
||||
|
||||
while (!File.Exists(filename))
|
||||
yield return new WaitForSeconds(0.01f);
|
||||
|
||||
BepInLogger.Log($"Screenshot saved to {filename}", true);
|
||||
}
|
||||
|
||||
void TakeCharScreenshot(string filename)
|
||||
{
|
||||
Camera.main.backgroundColor = Color.clear;
|
||||
|
||||
switch (RenderMethod)
|
||||
{
|
||||
case 0: //legacy
|
||||
default:
|
||||
File.WriteAllBytes(filename, LegacyRenderer.RenderCamera(ResolutionX, ResolutionY, DownscalingRate, AntiAliasing));
|
||||
break;
|
||||
//case 1: //alphashot
|
||||
// File.WriteAllBytes(filename, AlphaShot.Capture(ResolutionX, ResolutionY, DownscalingRate, AntiAliasing));
|
||||
// break;
|
||||
}
|
||||
|
||||
Illusion.Game.Utils.Sound.Play(SystemSE.photo);
|
||||
BepInLogger.Log($"Character screenshot saved to {filename}", true);
|
||||
}
|
||||
|
||||
|
||||
#region UI
|
||||
private Rect UI = new Rect(20, 20, 160, 250);
|
||||
private bool showingUI = false;
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if (showingUI)
|
||||
UI = GUI.Window(Name.GetHashCode() + 0, UI, WindowFunction, "Rendering settings");
|
||||
}
|
||||
|
||||
void WindowFunction(int windowID)
|
||||
{
|
||||
GUI.Label(new Rect(0, 20, 160, 20), "Output resolution", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
GUI.Label(new Rect(0, 40, 160, 20), "x", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
string resX = GUI.TextField(new Rect(10, 40, 60, 20), ResolutionX.ToString());
|
||||
|
||||
string resY = GUI.TextField(new Rect(90, 40, 60, 20), ResolutionY.ToString());
|
||||
|
||||
bool screenSize = GUI.Button(new Rect(10, 65, 140, 20), "Set to screen size");
|
||||
|
||||
|
||||
GUI.Label(new Rect(0, 90, 160, 20), "Downscaling rate", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
int downscale = (int)Math.Round(GUI.HorizontalSlider(new Rect(10, 113, 120, 20), DownscalingRate, 1, 4));
|
||||
|
||||
GUI.Label(new Rect(0, 110, 150, 20), $"{downscale}x", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.UpperRight,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
GUI.Label(new Rect(0, 130, 160, 20), "Antialiasing", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
int antia = (int)Math.Round(GUI.HorizontalSlider(new Rect(10, 153, 120, 20), AntiAliasing, 1, 16));
|
||||
|
||||
GUI.Label(new Rect(0, 150, 154, 20), $"{antia}x", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.UpperRight,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
GUI.Label(new Rect(0, 170, 160, 20), "Render method", new GUIStyle
|
||||
{
|
||||
alignment = TextAnchor.MiddleCenter,
|
||||
normal = new GUIStyleState
|
||||
{
|
||||
textColor = Color.white
|
||||
}
|
||||
});
|
||||
|
||||
int renderMethod = GUI.SelectionGrid(new Rect(10, 190, 140, 50), RenderMethod, new[] { "Legacy", "AlphaShot" }, 1);
|
||||
|
||||
|
||||
|
||||
if (GUI.changed)
|
||||
{
|
||||
BepInEx.Config.SaveOnConfigSet = false;
|
||||
|
||||
if (int.TryParse(resX, out int x))
|
||||
ResolutionX = Mathf.Clamp(x, 2, 4096);
|
||||
|
||||
if (int.TryParse(resY, out int y))
|
||||
ResolutionY = Mathf.Clamp(y, 2, 4096);
|
||||
|
||||
if (screenSize)
|
||||
{
|
||||
ResolutionX = Screen.width;
|
||||
ResolutionY = Screen.height;
|
||||
}
|
||||
|
||||
DownscalingRate = downscale;
|
||||
AntiAliasing = antia;
|
||||
RenderMethod = renderMethod;
|
||||
|
||||
BepInEx.Config.SaveOnConfigSet = true;
|
||||
BepInEx.Config.SaveConfig();
|
||||
}
|
||||
|
||||
GUI.DragWindow();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,178 +0,0 @@
|
||||
using ChaCustom;
|
||||
using Harmony;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
|
||||
namespace SliderUnlocker
|
||||
{
|
||||
public static class Hooks
|
||||
{
|
||||
public static void InstallHooks()
|
||||
{
|
||||
var harmony = HarmonyInstance.Create("com.bepis.bepinex.sliderunlocker");
|
||||
|
||||
MethodInfo original = AccessTools.Method(typeof(CustomBase), "ConvertTextFromRate");
|
||||
|
||||
HarmonyMethod postfix = new HarmonyMethod(typeof(Hooks).GetMethod("ConvertTextFromRateHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(CustomBase), "ConvertRateFromText");
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("ConvertRateFromTextHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
|
||||
original = AccessTools.Method(typeof(Mathf), "Clamp", new Type[] { typeof(float), typeof(float), typeof(float) });
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("MathfClampHook"));
|
||||
|
||||
harmony.Patch(original, null, postfix);
|
||||
|
||||
|
||||
|
||||
|
||||
original = typeof(AnimationKeyInfo).GetMethods().Where(x => x.Name.Contains("GetInfo")).ToArray()[0];
|
||||
|
||||
var prefix = new HarmonyMethod(typeof(Hooks).GetMethod("GetInfoSingularPreHook"));
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("GetInfoSingularPostHook"));
|
||||
|
||||
harmony.Patch(original, prefix, postfix);
|
||||
|
||||
|
||||
|
||||
original = typeof(AnimationKeyInfo).GetMethods().Where(x => x.Name.Contains("GetInfo")).ToArray()[1];
|
||||
|
||||
prefix = new HarmonyMethod(typeof(Hooks).GetMethod("GetInfoPreHook"));
|
||||
|
||||
postfix = new HarmonyMethod(typeof(Hooks).GetMethod("GetInfoPostHook"));
|
||||
|
||||
harmony.Patch(original, prefix, postfix);
|
||||
}
|
||||
|
||||
private static FieldInfo akf_dictInfo = (typeof(AnimationKeyInfo).GetField("dictInfo", BindingFlags.NonPublic | BindingFlags.Instance));
|
||||
|
||||
public static void ConvertTextFromRateHook(ref string __result, int min, int max, float value)
|
||||
{
|
||||
if (min == 0 && max == 100)
|
||||
__result = Math.Round(100 * value).ToString();
|
||||
}
|
||||
|
||||
public static void ConvertRateFromTextHook(ref float __result, int min, int max, string buf)
|
||||
{
|
||||
if (min == 0 && max == 100)
|
||||
{
|
||||
if (buf.IsNullOrEmpty())
|
||||
{
|
||||
__result = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!float.TryParse(buf, out float val))
|
||||
{
|
||||
__result = 0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
__result = val / 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void MathfClampHook(ref float __result, float value, float min, float max)
|
||||
{
|
||||
if (min == 0f && max == 100f)
|
||||
__result = value;
|
||||
}
|
||||
|
||||
public static void GetInfoPreHook(ref float __state, string name, ref float rate, ref Vector3[] value, bool[] flag)
|
||||
{
|
||||
__state = rate;
|
||||
|
||||
if (rate > 1)
|
||||
rate = 1f;
|
||||
|
||||
|
||||
if (rate < 0)
|
||||
rate = 0f;
|
||||
}
|
||||
|
||||
public static void GetInfoSingularPreHook(ref float __state, string name, ref float rate, ref Vector3 value, byte type)
|
||||
{
|
||||
__state = rate;
|
||||
|
||||
if (rate > 1)
|
||||
rate = 1f;
|
||||
|
||||
|
||||
if (rate < 0)
|
||||
rate = 0f;
|
||||
}
|
||||
|
||||
public static void GetInfoSingularPostHook(AnimationKeyInfo __instance, bool __result, float __state, string name, float rate, ref Vector3 value, byte type)
|
||||
{
|
||||
if (!__result)
|
||||
return;
|
||||
|
||||
rate = __state;
|
||||
|
||||
if (rate < 0f || rate > 1f)
|
||||
{
|
||||
var dictInfo = (Dictionary<string, List<AnimationKeyInfo.AnmKeyInfo>>)akf_dictInfo.GetValue(__instance);
|
||||
|
||||
List<AnimationKeyInfo.AnmKeyInfo> list = dictInfo[name];
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case 0:
|
||||
value = SliderMath.CalculatePosition(list, rate);
|
||||
break;
|
||||
case 1:
|
||||
value = SliderMath.SafeCalculateRotation(value, name, list, rate);
|
||||
break;
|
||||
default:
|
||||
value = SliderMath.CalculateScale(list, rate);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetInfoPostHook(AnimationKeyInfo __instance, bool __result, float __state, string name, float rate, ref Vector3[] value, bool[] flag)
|
||||
{
|
||||
if (!__result)
|
||||
return;
|
||||
|
||||
rate = __state;
|
||||
|
||||
if (rate < 0f || rate > 1f)
|
||||
{
|
||||
var dictInfo = (Dictionary<string, List<AnimationKeyInfo.AnmKeyInfo>>)akf_dictInfo.GetValue(__instance);
|
||||
|
||||
List<AnimationKeyInfo.AnmKeyInfo> list = dictInfo[name];
|
||||
|
||||
|
||||
if (flag[0])
|
||||
{
|
||||
value[0] = SliderMath.CalculatePosition(list, rate);
|
||||
}
|
||||
if (flag[1])
|
||||
{
|
||||
value[1] = SliderMath.SafeCalculateRotation(value[1], name, list, rate);
|
||||
}
|
||||
if (flag[2])
|
||||
{
|
||||
value[2] = SliderMath.CalculateScale(list, rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("SliderUnlocker")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("SliderUnlocker")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("9db058d4-cf5a-4280-9150-a62c22fc3cb0")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -1,87 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using static AnimationKeyInfo;
|
||||
|
||||
namespace SliderUnlocker
|
||||
{
|
||||
public static class SliderMath
|
||||
{
|
||||
public static Vector3 CalculateScale(List<AnmKeyInfo> list, float rate)
|
||||
{
|
||||
Vector3 min = list[0].scl;
|
||||
Vector3 max = list[list.Count - 1].scl;
|
||||
|
||||
return min + (max - min) * rate;
|
||||
}
|
||||
|
||||
public static Vector3 CalculatePosition(List<AnmKeyInfo> list, float rate)
|
||||
{
|
||||
Vector3 min = list[0].pos;
|
||||
Vector3 max = list[list.Count - 1].pos;
|
||||
|
||||
return min + (max - min) * rate;
|
||||
}
|
||||
|
||||
public static Vector3 CalculateRotation(List<AnmKeyInfo> list, float rate)
|
||||
{
|
||||
Vector3 rot1 = list[0].rot;
|
||||
Vector3 rot2 = list[1].rot;
|
||||
Vector3 rot3 = list[list.Count - 1].rot;
|
||||
|
||||
Vector3 vector = rot2 - rot1;
|
||||
Vector3 vector2 = rot3 - rot1;
|
||||
|
||||
bool xFlag = vector.x >= 0f;
|
||||
bool yFlag = vector.y >= 0f;
|
||||
bool zFlag = vector.z >= 0f;
|
||||
|
||||
if (vector2.x > 0f && !xFlag)
|
||||
{
|
||||
vector2.x -= 360f;
|
||||
}
|
||||
else if (vector2.x < 0f && xFlag)
|
||||
{
|
||||
vector2.x += 360f;
|
||||
}
|
||||
|
||||
if (vector2.y > 0f && !yFlag)
|
||||
{
|
||||
vector2.y -= 360f;
|
||||
}
|
||||
else if (vector2.y < 0f && yFlag)
|
||||
{
|
||||
vector2.y += 360f;
|
||||
}
|
||||
|
||||
if (vector2.z > 0f && !zFlag)
|
||||
{
|
||||
vector2.z -= 360f;
|
||||
}
|
||||
else if (vector2.z < 0f && zFlag)
|
||||
{
|
||||
vector2.z += 360f;
|
||||
}
|
||||
|
||||
|
||||
if (rate < 0f)
|
||||
{
|
||||
return rot1 - vector2 * Mathf.Abs(rate);
|
||||
}
|
||||
|
||||
return rot3 + vector2 * Mathf.Abs(rate - 1f);
|
||||
}
|
||||
|
||||
public static Vector3 SafeCalculateRotation(Vector3 original, string name, List<AnmKeyInfo> list, float rate)
|
||||
{
|
||||
if (!(name.StartsWith("cf_a_bust") && name.EndsWith("_size")) && //breast fix
|
||||
!(name.Contains("thigh") && name.Contains("01"))) //thigh fix
|
||||
{
|
||||
return CalculateRotation(list, rate);
|
||||
}
|
||||
else
|
||||
{
|
||||
return original;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
using BepInEx;
|
||||
using ChaCustom;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace SliderUnlocker
|
||||
{
|
||||
public class SliderUnlocker : BaseUnityPlugin
|
||||
{
|
||||
public override string ID => "com.bepis.bepinex.sliderunlocker";
|
||||
public override string Name => "Slider Unlocker";
|
||||
public override Version Version => new Version("1.5");
|
||||
|
||||
public static float Minimum = -1.0f;
|
||||
public static float Maximum = 2.0f;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
Hooks.InstallHooks();
|
||||
}
|
||||
|
||||
void LevelFinishedLoading(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
SetAllSliders(scene, Minimum, Maximum);
|
||||
}
|
||||
|
||||
|
||||
public void SetAllSliders(Scene scene, float minimum, float maximum)
|
||||
{
|
||||
List<object> cvsInstances = new List<object>();
|
||||
|
||||
Assembly illusion = typeof(CvsAccessory).Assembly;
|
||||
|
||||
var sceneObjects = scene.GetRootGameObjects();
|
||||
|
||||
foreach (Type type in illusion.GetTypes())
|
||||
{
|
||||
if (type.Name.ToUpper().StartsWith("CVS") &&
|
||||
type != typeof(CvsDrawCtrl) &&
|
||||
type != typeof(CvsColor))
|
||||
{
|
||||
foreach (var obj in sceneObjects)
|
||||
{
|
||||
cvsInstances.AddRange(obj.GetComponentsInChildren(type));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach (object cvs in cvsInstances)
|
||||
{
|
||||
if (cvs == null)
|
||||
continue;
|
||||
|
||||
var fields = cvs.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
|
||||
.Where(x => typeof(Slider).IsAssignableFrom(x.FieldType));
|
||||
|
||||
foreach (Slider slider in fields.Select(x => x.GetValue(cvs)))
|
||||
{
|
||||
if (slider == null)
|
||||
continue;
|
||||
|
||||
slider.minValue = minimum;
|
||||
slider.maxValue = maximum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region MonoBehaviour
|
||||
void OnEnable()
|
||||
{
|
||||
SceneManager.sceneLoaded += LevelFinishedLoading;
|
||||
}
|
||||
|
||||
void OnDisable()
|
||||
{
|
||||
SceneManager.sceneLoaded -= LevelFinishedLoading;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{9DB058D4-CF5A-4280-9150-A62C22FC3CB0}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>SliderUnlocker</RootNamespace>
|
||||
<AssemblyName>SliderUnlocker</AssemblyName>
|
||||
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>K:\BepInEx\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="0Harmony">
|
||||
<HintPath>..\..\lib\0Harmony.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\..\lib\Assembly-CSharp.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="TextMeshPro-1.0.55.56.0b12">
|
||||
<HintPath>..\..\lib\TextMeshPro-1.0.55.56.0b12.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine">
|
||||
<HintPath>..\..\lib\UnityEngine.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\..\lib\UnityEngine.UI.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Hooks.cs" />
|
||||
<Compile Include="SliderMath.cs" />
|
||||
<Compile Include="SliderUnlocker.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\BepInEx\BepInEx.csproj">
|
||||
<Project>{4ffba620-f5ed-47f9-b90c-dad1316fd9b9}</Project>
|
||||
<Name>BepInEx</Name>
|
||||
<Private>False</Private>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
Binary file not shown.
Reference in new issue
Block a user