Resolving conflict
- Cleaning up two trailing vars from Program that are no longer being used
This commit is contained in:
parent
bae7878ecd
commit
0e24d862a9
|
@ -1,190 +0,0 @@
|
||||||
using Microsoft.Xna.Framework;
|
|
||||||
using Mono.Cecil;
|
|
||||||
using Mono.Cecil.Cil;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using StardewModdingAPI;
|
|
||||||
|
|
||||||
namespace StardewInjector
|
|
||||||
{
|
|
||||||
public class Stardew_Hooker
|
|
||||||
{
|
|
||||||
private AssemblyDefinition m_vAsmDefinition = null;
|
|
||||||
private ModuleDefinition m_vModDefinition = null;
|
|
||||||
private Assembly m_vAssembly = null;
|
|
||||||
|
|
||||||
public bool Initialize()
|
|
||||||
{
|
|
||||||
Console.WriteLine("Initiating StarDew_Injector....");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.m_vAsmDefinition = AssemblyDefinition.ReadAssembly(@"Stardew Valley.exe");
|
|
||||||
this.m_vModDefinition = this.m_vAsmDefinition.MainModule;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.Error(ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Finalize()
|
|
||||||
{
|
|
||||||
Console.WriteLine("Finalizing StarDew_Injector....");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (this.m_vAsmDefinition == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
using (MemoryStream mStream = new MemoryStream())
|
|
||||||
{
|
|
||||||
// Write the edited data to the memory stream..
|
|
||||||
this.m_vAsmDefinition.Write(mStream);
|
|
||||||
|
|
||||||
// Load the new assembly from the memory stream buffer..
|
|
||||||
this.m_vAssembly = Assembly.Load(mStream.GetBuffer());
|
|
||||||
|
|
||||||
Program.StardewAssembly = m_vAssembly;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.Error(ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Run()
|
|
||||||
{
|
|
||||||
if (this.m_vAssembly == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Console.WriteLine("Starting Stardew Valley...");
|
|
||||||
|
|
||||||
m_vAssembly.EntryPoint.Invoke(null, new object[] {new string[0]});
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ApplyHooks()
|
|
||||||
{
|
|
||||||
Console.WriteLine("Applying StarDew_Injector....");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
InjectMovementSpeed();
|
|
||||||
|
|
||||||
if (Config.SecondsPerTenMinutes != 7)
|
|
||||||
InjectClockScale();
|
|
||||||
|
|
||||||
if (Config.EnableEasyFishing)
|
|
||||||
InjectEasyFishing();
|
|
||||||
|
|
||||||
if (Config.EnableAlwaysSpawnFishingBubble)
|
|
||||||
InjectMoreBubbles();
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (Config.EnableDebugMode)
|
|
||||||
InjectDebugMode();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.Error(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InjectDebugMode()
|
|
||||||
{
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.Program::.cctor")
|
|
||||||
.FindSetField("releaseBuild").Previous()
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_I4_0);
|
|
||||||
|
|
||||||
Console.WriteLine("Enabled debug mode.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InjectMoreBubbles()
|
|
||||||
{
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.GameLocation::performTenMinuteUpdate")
|
|
||||||
.FindLoadField("currentLocation").Next(i => i.ToString().Contains("NextDouble")).Next()
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_R8, 1.1);
|
|
||||||
|
|
||||||
Console.WriteLine("Forced each area to always spawn a fishing bubble.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InjectEasyFishing()
|
|
||||||
{
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.Menus.BobberBar::update")
|
|
||||||
.FindLoadConstant(694)
|
|
||||||
.Next(i => i.OpCode == OpCodes.Ldc_R4)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_R4, 0.001f)
|
|
||||||
.Next(i => i.OpCode == OpCodes.Ldc_R4)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_R4, 0.001f);
|
|
||||||
|
|
||||||
Console.WriteLine("Replaced fish escape constants for all bobbers & bobber id 694 with 0.001, slowing it down.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InjectClockScale()
|
|
||||||
{
|
|
||||||
int timeScale = Config.SecondsPerTenMinutes;
|
|
||||||
timeScale *= 1000;
|
|
||||||
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.Game1::UpdateGameClock")
|
|
||||||
.FindLoadConstant(7000f)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_R4, timeScale*1.0f)
|
|
||||||
.Next(i => i.OpCode == OpCodes.Ldc_R4 && (float) i.Operand == 7000f)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_R4, timeScale*1.0f)
|
|
||||||
.Next(i => i.OpCode == OpCodes.Ldc_I4 && (int) i.Operand == 7000)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_I4, timeScale);
|
|
||||||
|
|
||||||
Console.WriteLine("Updated lighting for new timescale ({0}).", timeScale);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InjectMovementSpeed()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
if (Config.EnableTweakedDiagonalMovement)
|
|
||||||
{
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.Farmer::getMovementSpeed")
|
|
||||||
.FindLoadField("movementDirections").Next(i => i.OpCode == OpCodes.Ldc_I4_1)
|
|
||||||
.ReplaceCreate(OpCodes.Ldc_I4_4);
|
|
||||||
|
|
||||||
Console.WriteLine("Removed diagonal movement check.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.RunSpeed > 0)
|
|
||||||
{
|
|
||||||
this.m_vModDefinition.FindMethod("StardewValley.Farmer::getMovementSpeed")
|
|
||||||
.FindLoadField("movementDirections").Last().CreateBefore(OpCodes.Ldc_R4, (float) Config.RunSpeed).CreateAfter(OpCodes.Add);
|
|
||||||
|
|
||||||
Console.WriteLine("Added run speed: " + Config.RunSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void DumpInstructionsToFile(MethodDefinition methodDefinition)
|
|
||||||
{
|
|
||||||
var fileName = string.Format("{0}.{1}.txt", methodDefinition.DeclaringType.Name, methodDefinition.Name);
|
|
||||||
|
|
||||||
using (var stream = File.OpenWrite(Path.Combine(".", fileName)))
|
|
||||||
using (var writer = new StreamWriter(stream))
|
|
||||||
{
|
|
||||||
var ilProcessor = methodDefinition.Body.GetILProcessor();
|
|
||||||
for (int i = 0; i < ilProcessor.Body.Instructions.Count; i++)
|
|
||||||
writer.WriteLine((i) + ":" + ilProcessor.Body.Instructions[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
using StardewModdingAPI;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace StardewInjector
|
|
||||||
{
|
|
||||||
public class StardewInjector : Mod
|
|
||||||
{
|
|
||||||
public override string Name
|
|
||||||
{
|
|
||||||
get { return "Stardew Injector"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Authour
|
|
||||||
{
|
|
||||||
get { return "Zoryn Aaron"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Version
|
|
||||||
{
|
|
||||||
get { return "1.0"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public override string Description
|
|
||||||
{
|
|
||||||
get { return "Pulled from https://github.com/kevinmurphy678/Stardew_Injector and converted to a mod."; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Stardew_Hooker hooker { get; set; }
|
|
||||||
public override void Entry(params object[] objects)
|
|
||||||
{
|
|
||||||
if (objects.Length <= 0 || (objects.Length > 0 && objects[0].AsBool() == false))
|
|
||||||
{
|
|
||||||
hooker = new Stardew_Hooker();
|
|
||||||
hooker.Initialize();
|
|
||||||
hooker.ApplyHooks();
|
|
||||||
hooker.Finalize();
|
|
||||||
|
|
||||||
Log.Verbose("INJECTOR ENTERED");
|
|
||||||
}
|
|
||||||
else if (objects.Length > 0 && objects[0].AsBool() == true)
|
|
||||||
{
|
|
||||||
Log.Verbose("INJECTOR LAUNCHING");
|
|
||||||
hooker.Run();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Verbose("INVALID PARAMETERS FOR INJECTOR");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,8 +23,6 @@ namespace StardewModdingAPI
|
||||||
public static List<string> ModPaths = new List<string>();
|
public static List<string> ModPaths = new List<string>();
|
||||||
public static List<string> ModContentPaths = new List<string>();
|
public static List<string> ModContentPaths = new List<string>();
|
||||||
public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
|
public static string LogPath = Path.Combine(Path.Combine(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "StardewValley")), "ErrorLogs");
|
||||||
public static string CurrentLog { get; private set; }
|
|
||||||
public static StreamWriter LogStream { get; private set; }
|
|
||||||
|
|
||||||
public static Texture2D DebugPixel { get; private set; }
|
public static Texture2D DebugPixel { get; private set; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue