3 Commits

Author SHA1 Message Date
793fc2b48d Implement weight fuuckery for zompiercer 2025-03-07 02:01:28 +01:00
2c1f5d5688 Add zompiercer 2025-03-07 01:43:57 +01:00
7aca70b7b6 Code format 2025-02-26 09:54:33 +01:00
12 changed files with 1053 additions and 718 deletions

View File

@@ -43,7 +43,8 @@ using Zenject;
// System.Single Gameplay.Units.Movements.Movement::CalculateSpeed()
// GameConfig looks interesting
// See dayLengthInSeconds (defaults to 720 actually)
// System.Single Controllers.Time.TimeController::GetSunsetHour(System.Int32,System.Double,System.Double)
// System.Single
// Controllers.Time.TimeController::GetSunsetHour(System.Int32,System.Double,System.Double)
namespace InfectionFreeZone {
[BepInPlugin(pluginGuid, pluginName, pluginVersion)]
@@ -70,7 +71,8 @@ namespace InfectionFreeZone {
public static ConfigEntry<bool> buildingQuartersCapacityMultiplierDebug;
public static ConfigEntry<float> buildingQuartersCapacityMultiplier;
public static ConfigEntry<bool> buildingDeconstructionResourcesMultiplierDebug;
public static ConfigEntry<bool>
buildingDeconstructionResourcesMultiplierDebug;
public static ConfigEntry<float> buildingDeconstructionResourcesMultiplier;
public static ConfigEntry<float> humanMovementSpeedMultiplier;
@@ -102,7 +104,8 @@ namespace InfectionFreeZone {
public static ConfigEntry<int> adultAge;
public static ConfigEntry<int> oldAge;
public static ConfigEntry<float> rotationTimestepMultiplier; // This is NOT unused!
public static ConfigEntry<float>
rotationTimestepMultiplier; // This is NOT unused!
public static ConfigEntry<float> sunsetHourOffset;
public static ConfigEntry<float> sunriseHourOffset;
@@ -112,92 +115,122 @@ namespace InfectionFreeZone {
public static ConfigEntry<bool> towerEchoSelectionDebug;
public static ConfigEntry<bool> towerEchoSelection;
public static List<WeakReference<StructureDefenceModule>> towerEchoSelectionList;
public static List<WeakReference<StructureDefenceModule>>
towerEchoSelectionList;
public static ConfigEntry<bool> buildingMaxVolumeDebug;
public static ConfigEntry<float> buildingMaxVolume;
// See System.Void UI.InfoPanels.NestedUIElements.SelectWeaponPanel::OnWeaponItemClicked(UI.InfoPanels.NestedUIElements.WeaponItem)
// See System.Void
// UI.InfoPanels.NestedUIElements.SelectWeaponPanel::OnWeaponItemClicked(UI.InfoPanels.NestedUIElements.WeaponItem)
public void Awake() {
resourceMultiplierDebug = Config.Bind("General", "Resource Multiplier Debug", false);
resourceMultiplierDebug =
Config.Bind("General", "Resource Multiplier Debug", false);
resourceMultiplier = Config.Bind("General", "Resource Multiplier", 1f);
peopleMultiplierDebug = Config.Bind("General", "People Multiplier Debug", false);
peopleMultiplierDebug =
Config.Bind("General", "People Multiplier Debug", false);
peopleMultiplier = Config.Bind("General", "People Multiplier", 1f);
resourceGatheringMultiplierDebug = Config.Bind("General", "Resource Gathering Multiplier Debug", false);
resourceGatheringMultiplier = Config.Bind("General", "Resource Gathering Multiplier", 1f);
resourceGatheringMultiplierDebug =
Config.Bind("General", "Resource Gathering Multiplier Debug", false);
resourceGatheringMultiplier =
Config.Bind("General", "Resource Gathering Multiplier", 1f);
resourceScavengingMultiplierDebug = Config.Bind("General", "Resource Scavenging Multiplier Debug", false);
resourceScavengingMultiplier = Config.Bind("General", "Resource Scavenging Multiplier", 1f);
resourceScavengingMultiplierDebug =
Config.Bind("General", "Resource Scavenging Multiplier Debug", false);
resourceScavengingMultiplier =
Config.Bind("General", "Resource Scavenging Multiplier", 1f);
buildingStorageCapacityMultiplierDebug =
Config.Bind("General", "Building Storage Capacity Multiplier Debug", false);
buildingStorageCapacityMultiplier = Config.Bind("General", "Building Storage Capacity Multiplier", 1f);
buildingStorageCapacityMultiplierDebug = Config.Bind(
"General", "Building Storage Capacity Multiplier Debug", false);
buildingStorageCapacityMultiplier =
Config.Bind("General", "Building Storage Capacity Multiplier", 1f);
buildingQuartersCapacityMultiplierDebug =
Config.Bind("General", "Building Quarters Capacity Multiplier Debug", false);
buildingQuartersCapacityMultiplier = Config.Bind("General", "Building Quarters Capacity Multiplier", 1f);
buildingQuartersCapacityMultiplierDebug = Config.Bind(
"General", "Building Quarters Capacity Multiplier Debug", false);
buildingQuartersCapacityMultiplier =
Config.Bind("General", "Building Quarters Capacity Multiplier", 1f);
buildingDeconstructionResourcesMultiplierDebug = Config.Bind("General",
"Building Deconstruction Resources Multiplier Debug", false);
buildingDeconstructionResourcesMultiplier =
Config.Bind("General", "Building Deconstruction Resources Multiplier", 1f);
deconstructionWorkersPer100m =
Config.Bind("General", "Building Deconstruction Workers Per 100m", 0.0045f);
buildingDeconstructionResourcesMultiplierDebug = Config.Bind(
"General", "Building Deconstruction Resources Multiplier Debug", false);
buildingDeconstructionResourcesMultiplier = Config.Bind(
"General", "Building Deconstruction Resources Multiplier", 1f);
deconstructionWorkersPer100m = Config.Bind(
"General", "Building Deconstruction Workers Per 100m", 0.0045f);
humanMovementSpeedMultiplier =
Config.Bind("General", "Human Movement Speed Multiplier", 1f);
vehicleMovementSpeedMultiplier =
Config.Bind("General", "Vehicle Movement Speed Multiplier", 1f);
humanMovementSpeedMultiplier = Config.Bind("General", "Human Movement Speed Multiplier", 1f);
vehicleMovementSpeedMultiplier = Config.Bind("General", "Vehicle Movement Speed Multiplier", 1f);
vehicleTrunkCapacityMultiplierDebug = Config.Bind(
"General", "Vehicle Trunk Capacity Multiplier Debug", false);
vehicleTrunkCapacityMultiplier =
Config.Bind("General", "Vehicle Trunk Capacity Multiplier", 1f);
vehicleTrunkCapacityMultiplierDebug =
Config.Bind("General", "Vehicle Trunk Capacity Multiplier Debug", false);
vehicleTrunkCapacityMultiplier = Config.Bind("General", "Vehicle Trunk Capacity Multiplier", 1f);
deconstructionTimeMultiplierDebug =
Config.Bind("General", "Deconstruction Time Multiplier Debug", false);
deconstructionTimeMultiplier =
Config.Bind("General", "Deconstruction Time Multiplier", 1f);
deconstructionTimeMultiplierDebug = Config.Bind("General", "Deconstruction Time Multiplier Debug", false);
deconstructionTimeMultiplier = Config.Bind("General", "Deconstruction Time Multiplier", 1f);
constructionTimeMultiplierDebug =
Config.Bind("General", "Construction Time Multiplier Debug", false);
constructionTimeMultiplier =
Config.Bind("General", "Construction Time Multiplier", 1f);
constructionTimeMultiplierDebug = Config.Bind("General", "Construction Time Multiplier Debug", false);
constructionTimeMultiplier = Config.Bind("General", "Construction Time Multiplier", 1f);
productionTimeMultiplierDebug =
Config.Bind("General", "Production Time Multiplier Debug", false);
productionTimeMultiplier =
Config.Bind("General", "Production Time Multiplier", 1f);
productionTimeMultiplierDebug = Config.Bind("General", "Production Time Multiplier Debug", false);
productionTimeMultiplier = Config.Bind("General", "Production Time Multiplier", 1f);
birthingConfigDebug = Config.Bind("Birthing Config", "Birthing Config Debug", false);
maxCitizensInZoneToChildrenBorn =
Config.Bind("Birthing Config", "Max Citizens in Zone to Children Born", 600);
moraleInfluenceFloorParam = Config.Bind("Birthing Config", "Morale Influence Floor Param", 0.3f);
moraleInfluenceCeilingParam = Config.Bind("Birthing Config", "Morale Influence Ceiling Param", 2f);
foodStockInfluenceFloorParam = Config.Bind("Birthing Config", "Food Stock Influence Floor Param", 0f);
foodStockInfluenceCeilingParam = Config.Bind("Birthing Config", "Food Stock Influence Ceiling Param", 1f);
quartersRatioInfluenceFloorParam =
Config.Bind("Birthing Config", "Quarters Ratio Influence Floor Param", 0.6f);
quartersRatioInfluenceCeilingParam =
Config.Bind("Birthing Config", "Quarters Ratio Influence Ceiling Param", 1.4f);
childToAdultRatioInfluenceFloorParam =
Config.Bind("Birthing Config", "Child to Adult Ratio Influence Floor Param", 1f);
childToAdultRatioInfluenceCeilingParam =
Config.Bind("Birthing Config", "Child to Adult Ratio Influence Ceiling Param", 0f);
birthingConfigDebug =
Config.Bind("Birthing Config", "Birthing Config Debug", false);
maxCitizensInZoneToChildrenBorn = Config.Bind(
"Birthing Config", "Max Citizens in Zone to Children Born", 600);
moraleInfluenceFloorParam =
Config.Bind("Birthing Config", "Morale Influence Floor Param", 0.3f);
moraleInfluenceCeilingParam =
Config.Bind("Birthing Config", "Morale Influence Ceiling Param", 2f);
foodStockInfluenceFloorParam =
Config.Bind("Birthing Config", "Food Stock Influence Floor Param", 0f);
foodStockInfluenceCeilingParam = Config.Bind(
"Birthing Config", "Food Stock Influence Ceiling Param", 1f);
quartersRatioInfluenceFloorParam = Config.Bind(
"Birthing Config", "Quarters Ratio Influence Floor Param", 0.6f);
quartersRatioInfluenceCeilingParam = Config.Bind(
"Birthing Config", "Quarters Ratio Influence Ceiling Param", 1.4f);
childToAdultRatioInfluenceFloorParam = Config.Bind(
"Birthing Config", "Child to Adult Ratio Influence Floor Param", 1f);
childToAdultRatioInfluenceCeilingParam = Config.Bind(
"Birthing Config", "Child to Adult Ratio Influence Ceiling Param", 0f);
adultAge = Config.Bind("Birthing Config", "Adult Age", 12);
oldAge = Config.Bind("Birthing Config", "Old Age", 60);
rotationTimestepMultiplier = Config.Bind("General", "Rotation Timestep Multiplier", 1f);
rotationTimestepMultiplier =
Config.Bind("General", "Rotation Timestep Multiplier", 1f);
sunsetHourOffset = Config.Bind("General", "Sunset Hour Offset", 0f);
sunriseHourOffset = Config.Bind("General", "Sunrise Hour Offset", 0f);
productionProfitMultiplierDebug = Config.Bind("General", "Production Profit Multiplier Debug", false);
productionProfitMultiplier =
Config.Bind("General", "Production Profit Multiplier (Resource ID: multiplier)", "");
productionProfitMultiplierDebug =
Config.Bind("General", "Production Profit Multiplier Debug", false);
productionProfitMultiplier = Config.Bind(
"General", "Production Profit Multiplier (Resource ID: multiplier)",
"");
productionProfitMultiplierDict = new Dictionary<ResourceID, float>();
productionProfitMultiplier.SettingChanged += delegate { UpdateProductionProfitMultiplierDict(); };
productionProfitMultiplier.SettingChanged += delegate {
UpdateProductionProfitMultiplierDict();
};
UpdateProductionProfitMultiplierDict();
towerEchoSelectionDebug = Config.Bind("General", "Tower Echo Selection Debug", false);
towerEchoSelectionDebug =
Config.Bind("General", "Tower Echo Selection Debug", false);
towerEchoSelection = Config.Bind("General", "Tower Echo Selection", false);
towerEchoSelectionList = new List<WeakReference<StructureDefenceModule>>();
buildingMaxVolumeDebug = Config.Bind("General", "Building Max Volume Debug", false);
buildingMaxVolumeDebug =
Config.Bind("General", "Building Max Volume Debug", false);
buildingMaxVolume = Config.Bind("General", "Building Max Volume", 50000f);
Logger.LogInfo("Cyka mod loaded");
@@ -290,21 +323,27 @@ namespace InfectionFreeZone {
}
[HarmonyPrefix]
[HarmonyPatch(typeof(GatherResourcesWork), "InstantiateResources", new Type[] { })]
[HarmonyPatch(typeof(GatherResourcesWork), "InstantiateResources",
new Type[] {})]
public static void PrefixGatheredResource(ref ScavengeWork __instance) {
var trav = Traverse.Create(__instance);
var resourcesToDropNew = new Dictionary<ResourceID, int>();
var resourcesToDrop = trav.Field<Dictionary<ResourceID, int>>("_resourcesToDrop");
var resourcesToDrop =
trav.Field<Dictionary<ResourceID, int>>("_resourcesToDrop");
if (Main.resourceGatheringMultiplierDebug.Value)
Console.WriteLine($"Resources to drop: {resourcesToDrop}");
if (resourcesToDrop.Value.Count > 0) {
foreach (KeyValuePair<ResourceID, int> resource in resourcesToDrop.Value) {
foreach (KeyValuePair<ResourceID, int> resource in resourcesToDrop
.Value) {
if (Main.resourceGatheringMultiplierDebug.Value)
Console.WriteLine($"Resource {resource.Key} to drop: {resource.Value}");
var newResourceValue = (int)(resource.Value * Main.resourceScavengingMultiplier.Value);
Console.WriteLine(
$"Resource {resource.Key} to drop: {resource.Value}");
var newResourceValue =
(int)(resource.Value * Main.resourceScavengingMultiplier.Value);
resourcesToDropNew.Add(resource.Key, newResourceValue);
if (Main.resourceGatheringMultiplierDebug.Value)
Console.WriteLine($"Resource {resource.Key} to drop modified to: {newResourceValue}");
Console.WriteLine(
$"Resource {resource.Key} to drop modified to: {newResourceValue}");
}
}
@@ -314,7 +353,8 @@ namespace InfectionFreeZone {
}
[HarmonyPostfix]
[HarmonyPatch(typeof(PlaceableObjectDraft), "GetCapacity", typeof(float), typeof(float))]
[HarmonyPatch(typeof(PlaceableObjectDraft), "GetCapacity", typeof(float),
typeof(float))]
public static void PostfixGetCapacity(ref int __result) {
if (Main.buildingStorageCapacityMultiplier.Value <= 0)
return;
@@ -341,7 +381,8 @@ namespace InfectionFreeZone {
[HarmonyPostfix]
[HarmonyPatch(typeof(Building), "DeconstructionResources", MethodType.Getter)]
public static ResourceQuantity[] PostfixDeconstructionResources(ResourceQuantity[] __result) {
public static ResourceQuantity[] PostfixDeconstructionResources(
ResourceQuantity[] __result) {
if (Main.buildingDeconstructionResourcesMultiplier.Value <= 0)
return __result;
@@ -352,12 +393,17 @@ namespace InfectionFreeZone {
Console.WriteLine($"Resource quantity is {resourceQuantity}");
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
Console.WriteLine($"Resource quantity value is {resourceQuantity.value}");
modifiedResult[i] = new ResourceQuantity(resourceQuantity.resourceType,
resourceQuantity.value * Main.buildingDeconstructionResourcesMultiplier.Value);
// resourceQuantity.value *= Main.buildingDeconstructionResourcesMultiplier.Value;
Console.WriteLine(
$"Resource quantity value is {resourceQuantity.value}");
modifiedResult[i] = new ResourceQuantity(
resourceQuantity.resourceType,
resourceQuantity.value *
Main.buildingDeconstructionResourcesMultiplier.Value);
// resourceQuantity.value *=
// Main.buildingDeconstructionResourcesMultiplier.Value;
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
Console.WriteLine($"Resource quantity value modified to {modifiedResult[i].value}");
Console.WriteLine(
$"Resource quantity value modified to {modifiedResult[i].value}");
}
return modifiedResult;
@@ -365,7 +411,8 @@ namespace InfectionFreeZone {
[HarmonyPrefix]
[HarmonyPatch(typeof(BuildingDestruction), "Initialize")]
public static void PrefixBuildingDeconstruction(ref BuildingDestruction __instance) {
public static void
PrefixBuildingDeconstruction(ref BuildingDestruction __instance) {
if (Main.deconstructionWorkersPer100m.Value <= 0)
return;
@@ -376,7 +423,8 @@ namespace InfectionFreeZone {
Console.WriteLine(
$"Building deconstruction workers per 100m is {configV.deconstructWorkersPer100m3OfBuilding}");
configV.deconstructWorkersPer100m3OfBuilding = Main.deconstructionWorkersPer100m.Value;
configV.deconstructWorkersPer100m3OfBuilding =
Main.deconstructionWorkersPer100m.Value;
config.Value = configV;
if (Main.buildingDeconstructionResourcesMultiplierDebug.Value)
Console.WriteLine(
@@ -385,8 +433,10 @@ namespace InfectionFreeZone {
[HarmonyPostfix]
[HarmonyPatch(typeof(Movement), "CalculateSpeed")]
public static void PostfixCalculateSpeedHuman(Movement __instance, ref float __result) {
// Humans are "Human(Clone)", infected are "inf_human(Clone)" and vehicles are "ve_<name>"
public static void PostfixCalculateSpeedHuman(Movement __instance,
ref float __result) {
// Humans are "Human(Clone)", infected are "inf_human(Clone)" and vehicles
// are "ve_<name>"
var name = __instance.ToString();
if (name.StartsWith("Human"))
__result *= Main.humanMovementSpeedMultiplier.Value;
@@ -395,18 +445,22 @@ namespace InfectionFreeZone {
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Vehicle), "Constructor",
typeof(GroupIconsPool), typeof(SignalBus), typeof(WeatherController))]
[HarmonyPatch(typeof(Vehicle), "Constructor", typeof(GroupIconsPool),
typeof(SignalBus), typeof(WeatherController))]
public static void PostfixVehicle(ref Vehicle __instance) {
if (Main.vehicleTrunkCapacityMultiplier.Value <= 0)
return;
if (Main.vehicleTrunkCapacityMultiplierDebug.Value)
Console.WriteLine($"Vehicle trunk capacity is {__instance.Trunk.Capacity}");
__instance.Trunk.SetCapacity((int)(__instance.Trunk.Capacity * Main.vehicleTrunkCapacityMultiplier.Value),
Console.WriteLine(
$"Vehicle trunk capacity is {__instance.Trunk.Capacity}");
__instance.Trunk.SetCapacity(
(int)(__instance.Trunk.Capacity *
Main.vehicleTrunkCapacityMultiplier.Value),
true);
if (Main.vehicleTrunkCapacityMultiplierDebug.Value)
Console.WriteLine($"Vehicle trunk capacity modified to {__instance.Trunk.Capacity}");
Console.WriteLine(
$"Vehicle trunk capacity modified to {__instance.Trunk.Capacity}");
}
// GatherResourcesWork
@@ -415,8 +469,10 @@ namespace InfectionFreeZone {
// ProductionWork
[HarmonyPrefix]
[HarmonyPatch(typeof(DisassembleWork), MethodType.Constructor,
typeof(Structure), typeof(float), typeof(int), typeof(ResourcesController), typeof(SignalBus))]
public static void PrefixDisassembleWork(Structure structure, ref float timeToDeconstruct) {
typeof(Structure), typeof(float), typeof(int),
typeof(ResourcesController), typeof(SignalBus))]
public static void PrefixDisassembleWork(Structure structure,
ref float timeToDeconstruct) {
if (Main.deconstructionTimeMultiplier.Value <= 0)
return;
@@ -429,9 +485,10 @@ namespace InfectionFreeZone {
[HarmonyPrefix]
[HarmonyPatch(typeof(ConstructableWork), MethodType.Constructor,
typeof(Structure), typeof(Dictionary<ResourceID, int>), typeof(float), typeof(StockroomsController),
typeof(SignalBus))]
public static void PrefixConstructWork(Structure structure, Dictionary<ResourceID, int> cost,
typeof(Structure), typeof(Dictionary<ResourceID, int>),
typeof(float), typeof(StockroomsController), typeof(SignalBus))]
public static void PrefixConstructWork(Structure structure,
Dictionary<ResourceID, int> cost,
ref float timeToConstruct) {
if (Main.deconstructionTimeMultiplier.Value <= 0)
return;
@@ -459,7 +516,8 @@ namespace InfectionFreeZone {
[HarmonyPrefix]
[HarmonyPatch(typeof(CitizensController), "IncreasePopulation")]
// Could not find a better way to do this
public static void PostfixCharactersConfig(ref CitizensController __instance) {
public static void
PostfixCharactersConfig(ref CitizensController __instance) {
if (Main.birthingConfigDebug.Value)
Console.WriteLine($"Citizens controller IncreasePopulation");
var trav = Traverse.Create(__instance);
@@ -475,36 +533,43 @@ namespace InfectionFreeZone {
if (Main.birthingConfigDebug.Value)
Console.WriteLine($"Old age is {charactersConfigV.oldAge}");
bornConfig.MaxCitizensInZoneToChildrenBorn = Main.maxCitizensInZoneToChildrenBorn.Value;
bornConfig.MaxCitizensInZoneToChildrenBorn =
Main.maxCitizensInZoneToChildrenBorn.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Max citizens in zone to children born is {bornConfig.MaxCitizensInZoneToChildrenBorn}");
bornConfig.MoraleInfluenceFloorParam = Main.moraleInfluenceFloorParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine($"Morale influence floor param is {bornConfig.MoraleInfluenceFloorParam}");
Console.WriteLine(
$"Morale influence floor param is {bornConfig.MoraleInfluenceFloorParam}");
bornConfig.MoraleInfluenceCeilingParam = Main.moraleInfluenceCeilingParam.Value;
bornConfig.MoraleInfluenceCeilingParam =
Main.moraleInfluenceCeilingParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Morale influence ceiling param is {bornConfig.MoraleInfluenceCeilingParam}");
bornConfig.FoodStockInfluenceFloorParam = Main.foodStockInfluenceFloorParam.Value;
bornConfig.FoodStockInfluenceFloorParam =
Main.foodStockInfluenceFloorParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Food stock influence floor param is {bornConfig.FoodStockInfluenceFloorParam}");
bornConfig.FoodStockInfluenceCeilingParam = Main.foodStockInfluenceCeilingParam.Value;
bornConfig.FoodStockInfluenceCeilingParam =
Main.foodStockInfluenceCeilingParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Food stock influence ceiling param is {bornConfig.FoodStockInfluenceCeilingParam}");
bornConfig.QuartersRatioInfluenceFloorParam = Main.quartersRatioInfluenceFloorParam.Value;
bornConfig.QuartersRatioInfluenceFloorParam =
Main.quartersRatioInfluenceFloorParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Quarters ratio influence floor param is {bornConfig.QuartersRatioInfluenceFloorParam}");
bornConfig.QuartersRatioInfluenceCeilingParam = Main.quartersRatioInfluenceCeilingParam.Value;
bornConfig.QuartersRatioInfluenceCeilingParam =
Main.quartersRatioInfluenceCeilingParam.Value;
if (Main.birthingConfigDebug.Value)
Console.WriteLine(
$"Quarters ratio influence ceiling param is {bornConfig.QuartersRatioInfluenceCeilingParam}");
@@ -527,18 +592,24 @@ namespace InfectionFreeZone {
[HarmonyTranspiler]
[HarmonyPatch(typeof(PlaceObjectsInSingleLineCursor), "RotateRight")]
public static IEnumerable<CodeInstruction> PostfixRotateRight(IEnumerable<CodeInstruction> instructions) {
public static IEnumerable<CodeInstruction>
PostfixRotateRight(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
for (var i = 0; i < codes.Count; i++) {
var code = codes[i];
Console.WriteLine($"Opcode is {code.opcode}");
if (code.opcode == OpCodes.Ldc_R4 && Mathf.Approximately((float)code.operand, 100f)) {
if (code.opcode == OpCodes.Ldc_R4 &&
Mathf.Approximately((float)code.operand, 100f)) {
Console.WriteLine($"Operand is {code.operand}");
codes[i] = new CodeInstruction(OpCodes.Ldsfld,
codes[i] = new CodeInstruction(
OpCodes.Ldsfld,
AccessTools.Field(typeof(Main), "rotationTimestepMultiplier"));
codes.Insert(i + 1,
new CodeInstruction(OpCodes.Call,
AccessTools.PropertyGetter(typeof(Main).GetField("rotationTimestepMultiplier").FieldType,
codes.Insert(i + 1, new CodeInstruction(
OpCodes.Call,
AccessTools.PropertyGetter(
typeof(Main)
.GetField("rotationTimestepMultiplier")
.FieldType,
"Value")));
Console.WriteLine($"Operand modified to {codes[i].operand}");
}
@@ -549,18 +620,24 @@ namespace InfectionFreeZone {
[HarmonyTranspiler]
[HarmonyPatch(typeof(PlaceObjectsInSingleLineCursor), "RotateLeft")]
public static IEnumerable<CodeInstruction> PostfixRotateLeft(IEnumerable<CodeInstruction> instructions) {
public static IEnumerable<CodeInstruction>
PostfixRotateLeft(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
for (var i = 0; i < codes.Count; i++) {
var code = codes[i];
Console.WriteLine($"Opcode is {code.opcode}");
if (code.opcode == OpCodes.Ldc_R4 && Mathf.Approximately((float)code.operand, 100f)) {
if (code.opcode == OpCodes.Ldc_R4 &&
Mathf.Approximately((float)code.operand, 100f)) {
Console.WriteLine($"Operand is {code.operand}");
codes[i] = new CodeInstruction(OpCodes.Ldsfld,
codes[i] = new CodeInstruction(
OpCodes.Ldsfld,
AccessTools.Field(typeof(Main), "rotationTimestepMultiplier"));
codes.Insert(i + 1,
new CodeInstruction(OpCodes.Call,
AccessTools.PropertyGetter(typeof(Main).GetField("rotationTimestepMultiplier").FieldType,
codes.Insert(i + 1, new CodeInstruction(
OpCodes.Call,
AccessTools.PropertyGetter(
typeof(Main)
.GetField("rotationTimestepMultiplier")
.FieldType,
"Value")));
Console.WriteLine($"Operand modified to {codes[i].operand}");
}
@@ -585,7 +662,8 @@ namespace InfectionFreeZone {
[HarmonyPrefix]
[HarmonyPatch(typeof(ProductionWork), "ProduceResources")]
public static void PrefixProduceResources(List<ProductionDataPart> productionDataParts) {
public static void
PrefixProduceResources(List<ProductionDataPart> productionDataParts) {
if (Main.productionProfitMultiplierDict.Count == 0)
return;
if (productionDataParts.Count == 0)
@@ -596,7 +674,8 @@ namespace InfectionFreeZone {
if (Main.productionProfitMultiplierDebug.Value)
Console.WriteLine(
$"Production data part is {productionDataPart.type} x {productionDataPart.amount}");
if (Main.productionProfitMultiplierDict.TryGetValue(productionDataPart.type, out var setpoint)) {
if (Main.productionProfitMultiplierDict.TryGetValue(
productionDataPart.type, out var setpoint)) {
if (Main.productionProfitMultiplierDebug.Value)
Console.WriteLine($"Production data part has setpoint {setpoint}");
productionDataPart.amount = (int)setpoint;
@@ -609,10 +688,12 @@ namespace InfectionFreeZone {
[HarmonyPostfix]
[HarmonyPatch(typeof(StructureDefenceModule), "Awake")]
public static void PostfixStructureDefenceModule(StructureDefenceModule __instance) {
public static void
PostfixStructureDefenceModule(StructureDefenceModule __instance) {
if (Main.towerEchoSelectionDebug.Value)
Console.WriteLine($"Structure defence module created");
Main.towerEchoSelectionList.Add(new WeakReference<StructureDefenceModule>(__instance));
Main.towerEchoSelectionList.Add(
new WeakReference<StructureDefenceModule>(__instance));
}
[HarmonyPrefix]
@@ -634,7 +715,8 @@ namespace InfectionFreeZone {
if (Main.towerEchoSelectionDebug.Value) {
Console.WriteLine($"Selected weapon item is {selectedItem.name}");
Console.WriteLine($"Echoing weapon to {Main.towerEchoSelectionList.Count} towers");
Console.WriteLine(
$"Echoing weapon to {Main.towerEchoSelectionList.Count} towers");
}
for (var i = 0; i < Main.towerEchoSelectionList.Count; i++) {
@@ -654,11 +736,13 @@ namespace InfectionFreeZone {
towerEchoSelectionT.SetFieldOfView(selectedItem.WeaponData);
towerEchoSelectionT.SetupWeapon(selectedItem.WeaponData);
var selectedWeapon = towerEchoSelectionT.SelectedWeapon == null
var selectedWeapon =
towerEchoSelectionT.SelectedWeapon == null
? "null"
: towerEchoSelectionT.SelectedWeapon.ToString();
if (Main.towerEchoSelectionDebug.Value)
Console.WriteLine($"Tower defence weapon modified to {selectedWeapon}");
Console.WriteLine(
$"Tower defence weapon modified to {selectedWeapon}");
}
} catch (NullReferenceException e) {
Console.WriteLine($"Failed to set tower defence weapon: {e}");
@@ -669,8 +753,8 @@ namespace InfectionFreeZone {
// TODO: Add toggle for this
[HarmonyTranspiler]
[HarmonyPatch(typeof(ValidatableStructure), "Awake")]
public static IEnumerable<CodeInstruction> PostfixValidatableStructure(
IEnumerable<CodeInstruction> instructions) {
public static IEnumerable<CodeInstruction>
PostfixValidatableStructure(IEnumerable<CodeInstruction> instructions) {
var codes = new List<CodeInstruction>(instructions);
int start = 0;
int start2 = 0;
@@ -678,40 +762,52 @@ namespace InfectionFreeZone {
int end2 = 0;
for (var i = 0; i < codes.Count; i++) {
if (codes[i].opcode == OpCodes.Ldc_I4_5) {
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
codes[i] = new CodeInstruction(OpCodes.Ldc_I4_2); // Array size after our deletion is 3 from 5
Console.WriteLine(
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
codes[i] = new CodeInstruction(
OpCodes.Ldc_I4_2); // Array size after our deletion is 3 from 5
}
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Tower") {
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
if (codes[i].opcode == OpCodes.Ldstr &&
codes[i].operand.ToString() == "Tower") {
Console.WriteLine(
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
start2 = i - 2;
end2 = i + 2;
}
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Farmland") {
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
if (codes[i].opcode == OpCodes.Ldstr &&
codes[i].operand.ToString() == "Farmland") {
Console.WriteLine(
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
Console.WriteLine(
$"Opcode is {codes[i - 1].opcode} and operand is {codes[i - 1].operand} at index {i - 1}");
codes[i - 1].opcode =
OpCodes.Ldc_I4_1; // Because we deleted the previous element this one is now index 1 instead of 2
OpCodes.Ldc_I4_1; // Because we deleted the previous element this
// one is now index 1 instead of 2
}
if (codes[i].opcode == OpCodes.Ldstr && codes[i].operand.ToString() == "Wall") {
Console.WriteLine($"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
if (codes[i].opcode == OpCodes.Ldstr &&
codes[i].operand.ToString() == "Wall") {
Console.WriteLine(
$"Opcode is {codes[i].opcode} and operand is {codes[i].operand} at index {i}");
start = i - 2;
end = i + 6;
break;
}
}
Console.WriteLine($"Start is {start} with opcode {codes[start].opcode} and operand {codes[start].operand}");
Console.WriteLine($"End is {end} with opcode {codes[end].opcode} and operand {codes[end].operand}");
Console.WriteLine(
$"Start is {start} with opcode {codes[start].opcode} and operand {codes[start].operand}");
Console.WriteLine(
$"End is {end} with opcode {codes[end].opcode} and operand {codes[end].operand}");
codes.RemoveRange(start, end - start);
Console.WriteLine($"Removed {end - start} instructions");
Console.WriteLine(
$"Start2 is {start2} with opcode {codes[start2].opcode} and operand {codes[start2].operand}");
Console.WriteLine($"End2 is {end2} with opcode {codes[end2].opcode} and operand {codes[end2].operand}");
Console.WriteLine(
$"End2 is {end2} with opcode {codes[end2].opcode} and operand {codes[end2].operand}");
codes.RemoveRange(start2, end2 - start2);
Console.WriteLine($"Removed {end2 - start2} instructions");
@@ -722,14 +818,16 @@ namespace InfectionFreeZone {
[HarmonyPrefix]
[HarmonyPatch(typeof(WallConstructor), MethodType.Constructor,
typeof(Wall.Factory), typeof(WorkersRadio), typeof(WallConfig))]
public static void PostfixWallConstructor(Wall.Factory factory, WorkersRadio workersRadio,
public static void PostfixWallConstructor(Wall.Factory factory,
WorkersRadio workersRadio,
ref WallConfig wallConfig) {
Console.WriteLine($"Wall config created");
wallConfig.maxAngel = 2f;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(AdaptController), MethodType.Constructor, typeof(AdaptConfig))]
[HarmonyPatch(typeof(AdaptController), MethodType.Constructor,
typeof(AdaptConfig))]
public static void PostfixAdaptConfig(ref AdaptConfig adaptConfig) {
var trav = Traverse.Create(adaptConfig);
var buildingsMaxVolume = trav.Field<float>("buildingsMaxVolume");
@@ -740,7 +838,8 @@ namespace InfectionFreeZone {
buildingsMaxVolume.Value = Main.buildingMaxVolume.Value;
if (Main.buildingMaxVolumeDebug.Value)
Console.WriteLine($"Building max volume modified to {buildingsMaxVolume.Value}");
Console.WriteLine(
$"Building max volume modified to {buildingsMaxVolume.Value}");
}
}
}

View File

@@ -18,7 +18,8 @@ using System.Runtime.InteropServices;
// 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
// The following GUID is for the ID of the typelib if this project is exposed to
// COM
[assembly:Guid("DA9D274E-486F-4F82-84FF-CD9388CB0B09")]
// Version information for an assembly consists of the following four values:
@@ -28,8 +29,7 @@ using System.Runtime.InteropServices;
// 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.*")]
// 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")]

View File

@@ -0,0 +1,3 @@
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 120

View File

@@ -0,0 +1,18 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005C0Harmony_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CAssembly_002DCSharp_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CBepInEx_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CConfigurationManager_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABaseUnityPlugin_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9185a461e2a54cd99ed3b83eace57b3d1f200_003F59_003Fb886ba39_003FBaseUnityPlugin_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFunc_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F105da1159ec9496ab9310694c7b11dd2532bb0_003F8e_003Fd9fe1d1e_003FFunc_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInt32_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F105da1159ec9496ab9310694c7b11dd2532bb0_003F2f_003Fc4c87fac_003FInt32_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AModuleEnergy_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F88c9fc29ca6844c7a78a6d5386efc5cfbd1c00_003F6a_003Ff8d470ed_003FModuleEnergy_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARecipeManager_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F88c9fc29ca6844c7a78a6d5386efc5cfbd1c00_003Fec_003F11004097_003FRecipeManager_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATraverse_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F474744d65d8e460fa08cd5fd82b5d65f32000_003F24_003F10e7e9ab_003FTraverse_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer /&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">262144</s:Int64>
</wpf:ResourceDictionary>

View File

@@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zompiercer", "Zompiercer\Zompiercer.csproj", "{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,17 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005C0Harmony_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CAssembly_002DCSharp_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CBepInEx_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CConfigurationManager_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002ECoreModule_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CAdministrator_005CRiderProjects_005CBepinex_005CProjects_005CTerraTech_005Clibs_005CUnityEngine_002Edll/@EntryIndexedValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ABaseUnityPlugin_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9185a461e2a54cd99ed3b83eace57b3d1f200_003F59_003Fb886ba39_003FBaseUnityPlugin_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFunc_00602_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F105da1159ec9496ab9310694c7b11dd2532bb0_003F8e_003Fd9fe1d1e_003FFunc_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AInt32_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F105da1159ec9496ab9310694c7b11dd2532bb0_003F2f_003Fc4c87fac_003FInt32_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AModuleEnergy_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F88c9fc29ca6844c7a78a6d5386efc5cfbd1c00_003F6a_003Ff8d470ed_003FModuleEnergy_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARecipeManager_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F88c9fc29ca6844c7a78a6d5386efc5cfbd1c00_003Fec_003F11004097_003FRecipeManager_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATraverse_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F474744d65d8e460fa08cd5fd82b5d65f32000_003F24_003F10e7e9ab_003FTraverse_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer /&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">262144</s:Int64>
</wpf:ResourceDictionary>

View File

@@ -0,0 +1,32 @@
using System.Linq;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using HarmonyLib.Tools;
// TODO: Make shield and repair bigger
// TODO: Maybe make props faster, thrusters work fine
namespace Zompiercer {
[BepInPlugin(PluginGuid, PluginName, PluginVersion)]
public class Main : BaseUnityPlugin {
private const string PluginGuid = "CykPiercer";
private const string PluginName = "CykaPiercer";
private const string PluginVersion = "1.0.0";
public static ConfigEntry<bool> debug;
public static ConfigEntry<float> weightMultiplier;
public void Awake() {
debug = Config.Bind("General", "Debug", false);
weightMultiplier = Config.Bind("General", "Weight Multiplier", 1.0f, "Multiplier for the weight of the tank");
Logger.LogInfo("Cyka mod loaded");
HarmonyFileLog.Enabled = true;
Harmony harmony = new Harmony(PluginGuid);
harmony.PatchAll();
var originalMethods = harmony.GetPatchedMethods();
Logger.LogInfo("Patched " + originalMethods.Count() + " methods");
}
}
}

View File

@@ -0,0 +1,35 @@
using System;
using HarmonyLib;
namespace Zompiercer {
[HarmonyPatch]
public class Patches {
[HarmonyPostfix]
[HarmonyPatch(typeof(InventoryItem), "GetWeight")]
static void GetWeight(ref float __result) {
if (Main.debug.Value)
Console.WriteLine("GetWeight: " + __result);
__result = __result * Main.weightMultiplier.Value;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(InventoryItem), "GetWeightOfOneItem")]
static void GetWeightOfOneItem(ref float __result) {
if (Main.debug.Value)
Console.WriteLine("GetWeightOfOneItem: " + __result);
__result = __result * Main.weightMultiplier.Value;
}
//[HarmonyPrefix]
//[HarmonyPatch(typeof(ManPlayer), "AddMoney")]
//static void MoneyMulti(ref int amount) {
// amount = (int)(amount * Main.moneyMultiplier.Value);
//}
//[HarmonyPrefix]
//[HarmonyPatch(typeof(TechHolders), "SetHeartbeatInterval")]
//static void HeartbeatMulti(ref float interval) {
// interval *= Main.heartbeatIntervalMultiplier.Value;
//}
}
}

View File

@@ -0,0 +1,35 @@
using System.Reflection;
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("Zompiercer")]
[assembly:AssemblyDescription("")]
[assembly:AssemblyConfiguration("")]
[assembly:AssemblyCompany("")]
[assembly:AssemblyProduct("Zompiercer")]
[assembly:AssemblyCopyright("Copyright © 2023")]
[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("EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE")]
// 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")]

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build"
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>
<GAME_DIR>C:/Games/Zompiercer.Build.16292544</GAME_DIR>
<GAME_MANAGED>$(GAME_DIR)/Zompiercer_Data/Managed</GAME_MANAGED>
<GAME_BEPINEX>$(GAME_DIR)/BepInEx</GAME_BEPINEX>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EE5EFB7F-A4DC-44F0-967B-F71ECA2D46AE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Zompiercer</RootNamespace>
<AssemblyName>Zompiercer</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Compile Include="Class1.cs" />
<Compile Include="Patches.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="0Harmony">
<HintPath>$(GAME_BEPINEX)/core/0Harmony.dll</HintPath>
</Reference>
<Reference Include="BepInEx">
<HintPath>$(GAME_BEPINEX)/core/BepInEx.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>$(GAME_MANAGED)/UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>$(GAME_MANAGED)/UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>$(GAME_MANAGED)/UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Networking">
<HintPath>$(GAME_MANAGED)/UnityEngine.Networking.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>$(GAME_MANAGED)/Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="ConfigurationManager">
<HintPath>$(GAME_BEPINEX)/plugins/ConfigurationManager.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1 @@
clang-format -i TerraTech/*.cs

View File

@@ -0,0 +1,2 @@
- source: Zompiercer/obj/Release/Zompiercer.dll
target: C:/Games/Zompiercer.Build.16292544/BepInEx/plugins/Zompiercer.dll