diff --git a/.gitignore b/.gitignore index 188b555..699d839 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ ConfigurationManager Projects/Regiments/Regiments/obj/Release Projects/CykaOfQud/.vs/ + +Projects/CykaOfQud/.vscode/ diff --git a/Projects/CykaOfQud/Class1.cs b/Projects/CykaOfQud/Class1.cs index 41124b2..04baeff 100644 --- a/Projects/CykaOfQud/Class1.cs +++ b/Projects/CykaOfQud/Class1.cs @@ -4,6 +4,10 @@ using BepInEx.Configuration; using HarmonyLib; using HarmonyLib.Tools; +// To make harmony work I had to hack t he game apart a little +// The game by default does not like harmony mods and unpatches all methods when running +// So to stop it from doing this remove calls to: +// System.Void XRL.ModInfo::UnapplyHarmonyPatches() namespace CykaOfQud { [BepInPlugin(pluginGuid, pluginName, pluginVersion)] public class Main : BaseUnityPlugin { @@ -12,78 +16,21 @@ namespace CykaOfQud { private const string pluginVersion = "1.0.0"; public static ConfigEntry xpPerLevelMultiplier; - -// public static ConfigEntry excavatorMineTileIterationsMultiplier; -// public static ConfigEntry truckCapacityMultiplier; -// public static ConfigEntry cargoShipCapacityMultiplier; -// public static ConfigEntry excavatorMiningCapacityMultiplier; -// public static ConfigEntry excavatorMiningAreaMultiplier; -// public static ConfigEntry excavatorMinReachMultiplier; -// public static ConfigEntry excavatorMaxReachMultiplier; -// public static ConfigEntry bufferCapacityMultiplier; -// public static ConfigEntry unityGenerationMultiplier; -// public static ConfigEntry depotTransferSpeedMultiplier; -// public static ConfigEntry worldMineSpeedMultiplier; -// public static ConfigEntry housingCapacityMultiplier; -// public static ConfigEntry dumpDelayMultiplier; -// public static ConfigEntry transportSpeedMultiplier; -// public static ConfigEntry shipyardCargoMultiplier; -// public static ConfigEntry autosaveInterval; -// public static ConfigEntry recipeMultipliers; -// public static Dictionary recipeMultipliersDict; + public static ConfigEntry hitpointsPerLevelMultiplier; + public static ConfigEntry skillPointsPerLevelMultiplier; + public static ConfigEntry mutationPointsPerLevelMultiplier; + public static ConfigEntry attributePointsPerLevelMultiplier; + public static ConfigEntry attributeBonusPerLevelMultiplier; public static ConfigEntry debugMode; public void Awake() { - xpPerLevelMultiplier = Config.Bind("General", "XP Per Level Multiplier", 1f, - new ConfigDescription("XP Per Level Multiplier")); - // excavatorCapacityMultiplier = Config.Bind("General", "Excavator Capacity Multiplier", 1, - // new ConfigDescription("Excavator Capacity Multiplier")); - // excavatorMineTileIterationsMultiplier = Config.Bind("General", "Excavator Mine Tile Iterations Multiplier", - // 1f, - // new ConfigDescription("Excavator Mine Tile Iterations Multiplier")); - // truckCapacityMultiplier = Config.Bind("General", "Truck Capacity Multiplier", 1, - // new ConfigDescription("Truck Capacity Multiplier")); - // cargoShipCapacityMultiplier = Config.Bind("General", "Cargo Ship Capacity Multiplier", 1, - // new ConfigDescription("Cargo Ship Capacity Multiplier")); - // excavatorMiningAreaMultiplier = Config.Bind("General", "Excavator Mining Area Multiplier", 1, - // new ConfigDescription("Excavator Mining Area Multiplier")); - // excavatorMiningCapacityMultiplier = Config.Bind("General", "Excavator Mining Capacity Multiplier", 1f, - // new ConfigDescription("Excavator Mining Capacity Multiplier")); - // excavatorMinReachMultiplier = Config.Bind("General", "Excavator Min Reach Multiplier", 1f, - // new ConfigDescription("Excavator Min Reach Multiplier")); - // excavatorMaxReachMultiplier = Config.Bind("General", "Excavator Max Reach Multiplier", 1f, - // new ConfigDescription("Excavator Max Reach Multiplier")); - // bufferCapacityMultiplier = Config.Bind("General", "Buffer Capacity Multiplier", 1f, - // new ConfigDescription("Buffer Capacity Multiplier")); - // unityGenerationMultiplier = Config.Bind("General", "Unity Generation Multiplier", 1f, - // new ConfigDescription("Unity Generation Multiplier")); - // depotTransferSpeedMultiplier = Config.Bind("General", "Depot Transfer Speed Multiplier", 1f, - // new ConfigDescription("Depot Transfer Speed Multiplier")); - // worldMineSpeedMultiplier = Config.Bind("General", "World Mine Speed Multiplier", 1f, - // new ConfigDescription("World Mine Speed Multiplier")); - // housingCapacityMultiplier = Config.Bind("General", "Housing Capacity Multiplier", 1f, - // new ConfigDescription("Housing Capacity Multiplier")); - // dumpDelayMultiplier = Config.Bind("General", "Dump Delay Multiplier", 1f, - // new ConfigDescription("Dump Delay Multiplier")); - // transportSpeedMultiplier = Config.Bind("General", "Transport Speed Multiplier", 1f, - // new ConfigDescription("Transport Speed Multiplier")); - // shipyardCargoMultiplier = Config.Bind("General", "Shipyard Cargo Multiplier", 1f, - // new ConfigDescription("Shipyard Cargo Multiplier")); - // autosaveInterval = Config.Bind("General", "Autosave Interval", 1, - // new ConfigDescription("Autosave Interval in minutes")); - // recipeMultipliers = Config.Bind("General", "Recipe Multipliers", "dirt:4", - // new ConfigDescription("Recipe Multipliers")); - - // recipeMultipliersDict = recipeMultipliers.Value.Split(',') - // .ToDictionary(x => x.Split(':')[0], x => int.Parse(x.Split(':')[1])); - // recipeMultipliers.SettingChanged += (sender, args) => { - // recipeMultipliersDict = recipeMultipliers.Value.Split(',') - // .ToDictionary(x => x.Split(':')[0], x => int.Parse(x.Split(':')[1])); - // Console.WriteLine("IndustrialCyka: Recipe multipliers parsed as:"); - // foreach (var kvp in recipeMultipliersDict) - // Console.WriteLine("\tIndustrialCyka: {0} x {1}", kvp.Key, kvp.Value); - // }; + xpPerLevelMultiplier = Config.Bind("General", "XP Per Level Multiplier", 0.25f, new ConfigDescription("XP Per Level Multiplier")); + hitpointsPerLevelMultiplier = Config.Bind("General", "Hitpoints Per Level Multiplier", 1f, new ConfigDescription("Hitpoints Per Level Multiplier")); + skillPointsPerLevelMultiplier = Config.Bind("General", "Skill Points Per Level Multiplier", 1f, new ConfigDescription("Skill Points Per Level Multiplier")); + mutationPointsPerLevelMultiplier = Config.Bind("General", "Mutation Points Per Level Multiplier", 1f, new ConfigDescription("Mutation Points Per Level Multiplier")); + attributePointsPerLevelMultiplier = Config.Bind("General", "Attribute Points Per Level Multiplier", 1f, new ConfigDescription("Attribute Points Per Level Multiplier")); + attributeBonusPerLevelMultiplier = Config.Bind("General", "Attribute Bonus Per Level Multiplier", 1f, new ConfigDescription("Attribute Bonus Per Level Multiplier")); debugMode = Config.Bind("General", "Debug Mode", false, new ConfigDescription("Debug Mode")); diff --git a/Projects/CykaOfQud/Patches.cs b/Projects/CykaOfQud/Patches.cs index 5622951..b2062dc 100644 --- a/Projects/CykaOfQud/Patches.cs +++ b/Projects/CykaOfQud/Patches.cs @@ -1,4 +1,5 @@ using System; +using System.Text; using CykaOfQud; using HarmonyLib; @@ -7,15 +8,63 @@ namespace CykaOfIndustry { public class Patches { [HarmonyPostfix] [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "GetXPForLevel")] - static int xpPerLevelMultiplier(ref int __result) { + static void xpPerLevelMultiplier(ref int __result) { if (Main.debugMode.Value) Console.WriteLine("CykaOfQud: Old XP for level {0}", __result); __result = (int)(__result * Main.xpPerLevelMultiplier.Value); if (Main.debugMode.Value) Console.WriteLine("CykaOfQud: New XP for level {0}", __result); - return __result; } + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "AddHitpoints")] + static void hitpointsPerLevelMultiplier(StringBuilder sb, ref int HPGain) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: Old HP for level {0}", HPGain); + HPGain = (int)(HPGain * Main.hitpointsPerLevelMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: New HP for level {0}", HPGain); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "AddSkillPoints")] + static void skillPointsPerLevelMultiplier(StringBuilder sb, ref int SPGain) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: Old SP for level {0}", SPGain); + SPGain = (int)(SPGain * Main.skillPointsPerLevelMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: New SP for level {0}", SPGain); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "AddMutationPoints")] + static void mutationPointsPerLevelMultiplier(StringBuilder sb, ref int MPGain) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: Old MP for level {0}", MPGain); + MPGain = (int)(MPGain * Main.mutationPointsPerLevelMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: New MP for level {0}", MPGain); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "AddAttributePoints")] + static void attributePointsPerLevelMultiplier(StringBuilder sb, ref int APGain) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: Old AP for level {0}", APGain); + APGain = (int)(APGain * Main.attributePointsPerLevelMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: New AP for level {0}", APGain); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(XRL.World.Parts.Leveler), "AddAttributeBonus")] + static void attributeBonusPerLevelMultiplier(StringBuilder sb, ref int ABGain) { + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: Old AB for level {0}", ABGain); + ABGain = (int)(ABGain * Main.attributeBonusPerLevelMultiplier.Value); + if (Main.debugMode.Value) + Console.WriteLine("CykaOfQud: New AB for level {0}", ABGain); + } } // [HarmonyPrefix] // [HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")]