diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry.sln.DotSettings.user b/Projects/CaptainOfIndustry/CaptainOfIndustry.sln.DotSettings.user
index 85bd2d3..d9622d3 100644
--- a/Projects/CaptainOfIndustry/CaptainOfIndustry.sln.DotSettings.user
+++ b/Projects/CaptainOfIndustry/CaptainOfIndustry.sln.DotSettings.user
@@ -14,6 +14,11 @@
True
True
True
+ True
+ True
+ True
+ True
+ True
True
True
<AssemblyExplorer />
diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry/CaptainOfIndustry.csproj b/Projects/CaptainOfIndustry/CaptainOfIndustry/CaptainOfIndustry.csproj
index e3242b9..1ed6736 100644
--- a/Projects/CaptainOfIndustry/CaptainOfIndustry/CaptainOfIndustry.csproj
+++ b/Projects/CaptainOfIndustry/CaptainOfIndustry/CaptainOfIndustry.csproj
@@ -64,6 +64,21 @@
..\libs\Mafi.Unity.dll
+
+ ..\libs\Sirenix.OdinInspector.Attributes.dll
+
+
+ ..\libs\Sirenix.OdinInspector.CompatibilityLayer.dll
+
+
+ ..\libs\Sirenix.Serialization.dll
+
+
+ ..\libs\Sirenix.Serialization.Config.dll
+
+
+ ..\libs\Sirenix.Utilities.dll
+
..\libs\UnityEngine.dll
diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs b/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs
index 49f1033..626a720 100644
--- a/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs
+++ b/Projects/CaptainOfIndustry/CaptainOfIndustry/Class1.cs
@@ -18,17 +18,19 @@ namespace CaptainOfIndustry {
public static ConfigEntry truckCapacityMultiplier;
public static ConfigEntry cargoShipCapacityMultiplier;
public static ConfigEntry excavatorMiningAreaMultiplier;
- public static ConfigEntry vehicleSpeedMultiplier;
+ public static ConfigEntry bufferCapacityMultiplier;
public static ConfigEntry unityGenerationMultiplier;
+ public static ConfigEntry depotTransferSpeedMultiplier;
public void Awake() {
excavatorCapacityMultiplier = Config.Bind("General", "Excavator Capacity Multiplier", 1, new ConfigDescription("Excavator Capacity 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", 1f, new ConfigDescription("Excavator Mining Area Multiplier"));
- vehicleSpeedMultiplier = Config.Bind("General", "Vehicle Speed Multiplier", 1f, new ConfigDescription("Vehicle Speed Multiplier"));
+ bufferCapacityMultiplier = Config.Bind("General", "Buffer Capacity Multiplier", 1f, new ConfigDescription("Buffer Capacity Multiplier"));
storageCapacityMultiplier = Config.Bind("General", "Storage Capacity Multiplier", 1f, new ConfigDescription("Storage 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"));
// shootingSpeedMultiplier.SettingChanged += (sender, args) => WeaponPropertiesManager.DoPatch();
// energyGenMultiplier.SettingChanged += (sender, args) => GeneratorPropertiesManager.DoPatch();
diff --git a/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs b/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs
index 536221e..4b3e491 100644
--- a/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs
+++ b/Projects/CaptainOfIndustry/CaptainOfIndustry/Patches.cs
@@ -1,13 +1,18 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Reflection;
+using System.Reflection.Emit;
using HarmonyLib;
using Mafi;
+using Mafi.Core.Buildings.Cargo;
+using Mafi.Core.Buildings.Cargo.Modules;
using Mafi.Core.Buildings.Cargo.Ships.Modules;
using Mafi.Core.Buildings.Storages;
using Mafi.Core.Entities.Dynamic;
using Mafi.Core.Entities.Static;
using Mafi.Core.Entities.Static.Layout;
+using Mafi.Core.Factory.Machines;
using Mafi.Core.Map;
using Mafi.Core.Population;
using Mafi.Core.Products;
@@ -16,30 +21,28 @@ using Mafi.Core.Prototypes;
namespace CaptainOfIndustry {
[HarmonyPatch]
public class Patches {
- private static Traverse maxForwardsSpeedField;
-
[HarmonyPrefix]
[HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetCapacity")]
static void excavatorCapacityMultiplier(ref int quantity) {
- // Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
+// Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
quantity *= Main.excavatorCapacityMultiplier.Value;
- Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
+// Console.WriteLine("IndustrialCyka: Old excavator capacity: {0}", quantity);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(TruckProtoBuilder.TruckProtoBuilderState), "SetCapacity")]
static void truckCapacityMultiplier(ref int quantity) {
- Console.WriteLine("IndustrialCyka: Old truck capacity: {0}", quantity);
+// Console.WriteLine("IndustrialCyka: Old truck capacity: {0}", quantity);
quantity *= Main.truckCapacityMultiplier.Value;
- Console.WriteLine("IndustrialCyka: New truck capacity: {0}", quantity);
+// Console.WriteLine("IndustrialCyka: New truck capacity: {0}", quantity);
}
// [HarmonyPrefix]
// [HarmonyPatch(typeof(StorageProtoBuilder.State), "SetCapacity")]
// static void storageCapacityMultiplier(ref int capacity) {
- // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", capacity);
+// // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", capacity);
// capacity = (int)(capacity * Main.storageCapacityMultiplier.Value);
- // Console.WriteLine("IndustrialCyka: New storage capacity: {0}", capacity);
+// // Console.WriteLine("IndustrialCyka: New storage capacity: {0}", capacity);
// }
[HarmonyPostfix]
@@ -49,18 +52,18 @@ namespace CaptainOfIndustry {
typeof(CargoShipModuleProto.Gfx)
})]
static void cargoShipCapacityMultiplier(CargoShipModuleProto __instance) {
- Console.WriteLine("IndustrialCyka: Old ship capacity: {0}", __instance.Capacity.Value);
+// Console.WriteLine("IndustrialCyka: Old ship capacity: {0}", __instance.Capacity.Value);
__instance.Capacity = new Quantity(__instance.Capacity.Value * Main.cargoShipCapacityMultiplier.Value);
- Console.WriteLine("IndustrialCyka: New ship capacity: {0}", __instance.Capacity.Value);
+// Console.WriteLine("IndustrialCyka: New ship capacity: {0}", __instance.Capacity.Value);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ExcavatorProtoBuilder.ExcavatorProtoBuilderState), "SetMinedThicknessByDistanceMeters")]
static void excavatorMiningAreaMultiplier(ref float[] thicknessMeters) {
for (int i = 0; i < thicknessMeters.Length; i++) {
- Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]);
+// Console.WriteLine("IndustrialCyka: Old mining area: {0}", thicknessMeters[i]);
thicknessMeters[i] *= Main.excavatorMiningAreaMultiplier.Value;
- Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]);
+// Console.WriteLine("IndustrialCyka: New mining area: {0}", thicknessMeters[i]);
}
}
@@ -68,35 +71,35 @@ namespace CaptainOfIndustry {
// [HarmonyPrefix]
// [HarmonyPatch(typeof(DrivingEntity), "SetSpeedFactor")]
// static void vehicleSpeedMultiplier(ref Percent speedFactor) {
- // Console.WriteLine("IndustrialCyka: Old speed: {0}", speedFactor.ToString());
+// // Console.WriteLine("IndustrialCyka: Old speed: {0}", speedFactor.ToString());
// // typeof(Percent)
// // .GetField("RawValue",BindingFlags.Instance|BindingFlags.NonPublic)
// // .SetValue(speedFactor,speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value);
// Percent newSpeedFactor = Percent.FromFloat(speedFactor.ToFloat() / Main.vehicleSpeedMultiplier.Value);
// speedFactor = newSpeedFactor;
- // Console.WriteLine("IndustrialCyka: New speed: {1}", newSpeedFactor.RawValue.ToString());
+// // Console.WriteLine("IndustrialCyka: New speed: {1}", newSpeedFactor.RawValue.ToString());
// }
- [HarmonyPostfix]
- [HarmonyPatch(typeof(SmoothDriver), "SetSpeedFactor")]
- static void vehicleSpeedMultiplier(SmoothDriver __instance) {
- Fix32 speedMulti = Fix32.FromFloat(Main.vehicleSpeedMultiplier.Value);
-
- Traverse traverse = Traverse.Create(__instance);
- Traverse maxForwardsSpeedField = traverse.Field("m_maxForwardsSpeed");
- Traverse maxBackwardsSpeedField = traverse.Field("m_maxBackwardsSpeed");
- Traverse maxAccelerationField = traverse.Field("m_maxAcceleration");
-
- Console.WriteLine("IndustrialCyka: Old speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
- maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
-
- maxForwardsSpeedField.SetValue((Fix32)maxForwardsSpeedField.GetValue() * speedMulti);
- maxBackwardsSpeedField.SetValue((Fix32)maxBackwardsSpeedField.GetValue() * speedMulti);
- maxAccelerationField.SetValue((Fix32)maxAccelerationField.GetValue() * speedMulti);
-
- Console.WriteLine("IndustrialCyka: New speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
- maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
- }
+// [HarmonyPostfix]
+// [HarmonyPatch(typeof(SmoothDriver), "SetSpeedFactor")]
+// static void vehicleSpeedMultiplier(SmoothDriver __instance) {
+// Fix32 speedMulti = Fix32.FromFloat(Main.vehicleSpeedMultiplier.Value);
+//
+// Traverse traverse = Traverse.Create(__instance);
+// Traverse maxForwardsSpeedField = traverse.Field("m_maxForwardsSpeed");
+// Traverse maxBackwardsSpeedField = traverse.Field("m_maxBackwardsSpeed");
+// Traverse maxAccelerationField = traverse.Field("m_maxAcceleration");
+//
+// // Console.WriteLine("IndustrialCyka: Old speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
+// // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
+//
+// maxForwardsSpeedField.SetValue((Fix32)maxForwardsSpeedField.GetValue() * speedMulti);
+// maxBackwardsSpeedField.SetValue((Fix32)maxBackwardsSpeedField.GetValue() * speedMulti);
+// maxAccelerationField.SetValue((Fix32)maxAccelerationField.GetValue() * speedMulti);
+//
+// // Console.WriteLine("IndustrialCyka: New speeds: (F) {0}, (B) {1}, (A) {2}", maxForwardsSpeedField.GetValue(),
+// // maxBackwardsSpeedField.GetValue(), maxAccelerationField.GetValue());
+// }
[HarmonyPostfix]
[HarmonyPatch(typeof(StorageBaseProto), MethodType.Constructor,
@@ -112,37 +115,125 @@ namespace CaptainOfIndustry {
typeof(IEnumerable)
})]
static void storageCapacityMultiplier(StorageProto __instance) {
- Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value);
- Console.WriteLine("IndustrialCyka: Old storage transfer limit: {0}", __instance.TransferLimit.Value);
+// Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value);
+// Console.WriteLine("IndustrialCyka: Old storage transfer limit: {0}", __instance.TransferLimit.Value);
Traverse traverse = Traverse.Create(__instance);
- traverse.Field("Capacity").SetValue(new Quantity((int)(__instance.Capacity.Value * Main.storageCapacityMultiplier.Value)));
+ traverse.Field("Capacity")
+ .SetValue(new Quantity((int)(__instance.Capacity.Value * Main.storageCapacityMultiplier.Value)));
traverse.Field("TransferLimit").SetValue(new Quantity(10000));
traverse.Field("TransferLimitDuration").SetValue(Duration.FromTicks(1));
- Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value);
- Console.WriteLine("IndustrialCyka: New storage transfer limit: {0}", __instance.TransferLimit.Value);
+// Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value);
+// Console.WriteLine("IndustrialCyka: New storage transfer limit: {0}", __instance.TransferLimit.Value);
}
[HarmonyPrefix]
[HarmonyPatch(typeof(UpointsManager), "GenerateUnity")]
static void unityGenerationMultiplier(Proto.ID categoryId, ref Upoints generated) {
- Console.WriteLine("IndustrialCyka: Old generated {0} unity", generated.Value);
+// Console.WriteLine("IndustrialCyka: Old generated {0} unity", generated.Value);
Fix32 multi = Fix32.FromFloat(Main.unityGenerationMultiplier.Value);
generated = new Upoints(generated.Value * multi);
- Console.WriteLine("IndustrialCyka: New generated {0} unity", generated.Value);
+// Console.WriteLine("IndustrialCyka: New generated {0} unity", generated.Value);
}
+ [HarmonyTranspiler]
+ [HarmonyPatch(typeof(Machine), "updateWorkOnRecipes")]
+ static IEnumerable unityBooster(IEnumerable instructions) {
+ Dictionary matchTable = new Dictionary();
+ matchTable[0] = OpCodes.Ldsfld;
+ matchTable[1] = OpCodes.Br;
+ matchTable[2] = OpCodes.Ldc_I4_2;
+ int matches = 0;
+ int totalMatch = matchTable.Count;
+
+ var codes = new List(instructions);
+ for (int i = 0; i < codes.Count; i++) {
+ if (matches >= totalMatch) {
+ break;
+ }
+
+ if (codes[i].opcode.Equals(matchTable[matches])) {
+ if (matches == totalMatch - 1) {
+ codes[i].opcode = OpCodes.Ldc_I4_6;
+ }
+
+ matches++;
+ }
+ }
+
+ // for (int i = 0; i < codes.Count; i++) {
+ // Console.WriteLine(codes[i].ToString());
+ // }
+
+ return codes.AsEnumerable();
+ }
+
+ // static IEnumerable Transpiler(IEnumerable instructions)
+ // {
+ // var found = false;
+ // foreach (var instruction in instructions)
+ // {
+ // if (instruction.StoresField(f_someField))
+ // {
+ // yield return new CodeInstruction(OpCodes.Call, m_MyExtraMethod);
+ // found = true;
+ // }
+ // yield return instruction;
+ // }
+ // if (found is false)
+ // ReportError("Cannot find in OriginalType.OriginalMethod");
+ // }
+
// Could not make this work either... idk why... Doesn't make sense...
// [HarmonyPostfix]
// [HarmonyPatch(typeof(SimpleVirtualResource), "MineResourceAt")]
// static void infiniteGroundResources(SimpleVirtualResource __instance) {
- // Console.WriteLine("IndustrialCyka: Patching ground resources (Capacity)");
+// // Console.WriteLine("IndustrialCyka: Patching ground resources (Capacity)");
// Traverse traverse = Traverse.Create(__instance);
// Traverse capacityField = traverse.Field("Capacity");
// capacityField.SetValue(1000000000);
// Traverse quantityField = traverse.Field("Quantity");
// quantityField.SetValue(1000000000);
// }
+
+ [HarmonyPrefix]
+ [HarmonyPatch(typeof(ProductBuffer), "ForceNewCapacityTo")]
+ static void bufferCapacityMultiplier(ref Quantity newCapacity) {
+ if (newCapacity.Value <= 0) {
+ return;
+ }
+
+ Quantity newNewCapacity = new Quantity((int)(newCapacity.Value * Main.bufferCapacityMultiplier.Value));
+ newCapacity = newNewCapacity;
+ }
+
+ [HarmonyPostfix]
+ [HarmonyPatch(typeof(CargoDepotModuleProto), MethodType.Constructor,
+ new[] {
+ typeof(CargoDepotModuleProto.ID),
+ typeof(Proto.Str),
+ typeof(EntityLayout),
+ typeof(ProductType),
+ typeof(Option),
+ typeof(Quantity),
+ typeof(Quantity),
+ typeof(Duration),
+ typeof(Electricity),
+ typeof(bool),
+ typeof(Percent),
+ typeof(EntityCosts),
+ typeof(CargoDepotModuleProto.Gfx),
+ typeof(IEnumerable),
+ })]
+ static void depotTransferSpeedMultiplier(CargoDepotModuleProto __instance) {
+ // Console.WriteLine("IndustrialCyka: Old storage capacity: {0}", __instance.Capacity.Value);
+ Traverse traverse = Traverse.Create(__instance);
+
+ traverse.Field("QuantityPerExchange")
+ .SetValue(new Quantity((int)(__instance.QuantityPerExchange.Value * Main.depotTransferSpeedMultiplier.Value)));
+
+// Console.WriteLine("IndustrialCyka: New storage capacity: {0}", __instance.Capacity.Value);
+ }
}
}