From 215c945b6ba512331b2ebdd792ca27343412eccb Mon Sep 17 00:00:00 2001 From: SokyranTheDragon <36712560+SokyranTheDragon@users.noreply.github.com> Date: Fri, 27 Sep 2024 04:31:04 +0200 Subject: [PATCH] Compat for "A RimWorld of Magic" (#383) * Partial compat for "A RimWorld of Magic" Originally started in 1.3, but abandoned due to 1.4 and Biotech releasing. Seems like all the patches currently done will work as-is. However, the compat IS NOT FINISHED! Again, due to 1.4/Biotech releasing I dropped this compat, and then forgot about it. * Update to RimWorld of Magic compat While this compat is not yet complete, I believe at the moment the mod should be playable with most features working without an issue. - The compat was changed from a normal to a referenced one - The complexity was starting to build up, so this allowed for a significantly simpler and slightly smaller code - This required including not only `TorannMagic` assembly (ARoM), but also `AbilityUser` (JecsTools) since it's a dependency and significantly limited what could be done without including it - Simplified the patch to TM_MoteMaker RNG - Rather than directly targeting specific methods, the patch will target (almost) all methods with a void return - Synced leveling up/learning skills and powers - The code here required quite a bit of work and patching a significant amount of the mod's methods - Synced several gizmos and float menus (possibly all?) - Synced opening portal interaction - The syncing removes the job the pawn takes, as at the end of the job they start an interaction - instead we do interaction first and skip the job - Added several checks to sync methods that will stop execution if the method could not execute anymore at this point A slight side note - at the moment this is the 3rd biggest compat (in file size/line count), right after Vehicle Framework and Vanilla Expanded Framework. * Updated ARoM compat Currently, the only thing left is to fix the multithreading for the living wall ability. Will need to either re-write the ticking method, or make a transpiler to handle it in a safe manner. Changes: - Simplified auto casting syncing - Doesn't use indexes but ability defs for syncing - Fixed power learning replacing an extra button that wasn't supposed to be - Fixed methods related to sprite areas passing null as map - They now use caster pawn's map (when casting) or sprite's actual map (in magic comp's) - Synced changes to values in golem's ITab - Synced golem rename dialog - Synced golem dialog to change enabled abilities and work types * Fix multithreading, optimize living wall Multithreading fix should be done, some minor golem stuff that I forgot to test until now still needs fixing. Changes: - All previously multithreaded calls will be called on main thread - The call to `DirectPath` will be only called when `idleFor` field is 0, which will prevent constantly calling this method - The call to `DoThreadedActions` will be called normally, as it periodically calls its methods already - However, when a new value for `nextWallUpdate` field is set, it'll be multiplied by 6 to delay that specific call, as it's quite costly - Optimized several methods related to Living Wall ability, making it feasible to use on main thread without issues - Removed temporary debug logging for golems included in previous update * Most likely finished the Rimworld of Magic compat Tested several features in the mod, and the ones I got to test seemed to work fine. There may be something that's unsafe, but testing everything alone would be very time-consuming, so I'll go back and fix issues as they are found. Changes: - Synced golem main tab window - Several fields are watched that are also watched in ITab - (De)activation checkbox is a bit more complex - The syncing is cancelled if the golem is already in the process of being (de)activated - This was not required, but I've included it since I already was working on a prefix for this method - The execution of the synced method is cancelled if the golem is already in the requested state, as the mod has no checks for this - This required adding a transpiler to include the requested state in the sync method, since the mod uses `true` by default - This required syncing a method inside of one of PawnColumnWorkers, but since the main table is not a subtype of `MainTabWindow_PawnTable` but inherits directly from `MainTabWindow`, the MP's sync worker delegate for `PawnTable` doesn't work. Since it's useless I've transformed the argument and made a dummy one. - Reworked how syncing `GolemAbilitiesWindow` works - Turns out, the checkboxes don't work on temporary values but the actual values - which needed watching sync fields - Syncing the `Close` method was also required due to it doing some things as well - This change requires update to `MpCompatPatchLoader` and MpCompat attributes to support sync fields with instance paths - Added syncing of several static fields on join, as those are never reset when starting a new game, nor are they ever saved - This may cause bugs in the mod itself in a couple of situations - The `growthCells` list is cleared instead, since the mod attempts to (badly, as it may fail) to clear the list and re-add all values in - This ensures that the list is cleared when the mod attempts to add stuff to it - Replaced clearing of living wall's current target with syncing of the target, since we may as well do that to make joining feel a bit more seamless - Added resetting of TM_GolemUpgradeDef workstation effects to their default value - Those values are modified by the mod while playing but never cleared and will cause desyncs when joining otherwise - The way the mod handles those may cause bugs with multiple golems of the same type - This will likely also cause issues with async time, as well as non-async time when the time gets out of sync - Removed some `__state = false` calls, replaced `out` for `ref` for this argument - This matches MP itself a bit more closely and lowers the amount of code we need --- References/AbilityUser.dll | Bin 0 -> 27648 bytes References/AbilityUser.txt | 1 + References/TorannMagic.dll | Bin 0 -> 589312 bytes References/TorannMagic.txt | 1 + Source_Referenced/ARimWorldOfMagic.cs | 1793 +++++++++++++++++++++++++ 5 files changed, 1795 insertions(+) create mode 100644 References/AbilityUser.dll create mode 100644 References/AbilityUser.txt create mode 100644 References/TorannMagic.dll create mode 100644 References/TorannMagic.txt create mode 100644 Source_Referenced/ARimWorldOfMagic.cs diff --git a/References/AbilityUser.dll b/References/AbilityUser.dll new file mode 100644 index 0000000000000000000000000000000000000000..c20ba926c74b50829620d8a84f5a12b0bc3ac14c GIT binary patch literal 27648 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
    qcGNQ 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%0DIXaAf#IJrbr1V<$1B7B{7l%ReC}_uf;!6O!|`EV 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 literal 0 HcmV?d00001 diff --git a/References/TorannMagic.txt b/References/TorannMagic.txt new file mode 100644 index 0000000..08316ae --- /dev/null +++ b/References/TorannMagic.txt @@ -0,0 +1 @@ +25A6D01C84C64F02846D29BC4454F9B294B5E228 \ No newline at end of file diff --git a/Source_Referenced/ARimWorldOfMagic.cs b/Source_Referenced/ARimWorldOfMagic.cs new file mode 100644 index 0000000..b7a62b6 --- /dev/null +++ b/Source_Referenced/ARimWorldOfMagic.cs @@ -0,0 +1,1793 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Reflection.Emit; +using AbilityUser; +using HarmonyLib; +using Multiplayer.API; +using RimWorld; +using TorannMagic; +using TorannMagic.Golems; +using TorannMagic.ModOptions; +using TorannMagic.TMDefs; +using TorannMagic.Utils; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace Multiplayer.Compat; + +/// A RimWorld of Magic by Torann +/// +/// +[MpCompatFor("Torann.ARimworldOfMagic")] +public class ARimWorldOfMagic +{ + #region Fields + + // MP Compat fields + private static bool isAutoSaving = false; + + // JobDriver_PortalDestination.<>c__DisplayClass7_0 + private static AccessTools.FieldRef portalDestinationInnerClassThisField; + // Building_TMPortal.<>c__DisplayClass43_0 + private static AccessTools.FieldRef portalBuildingInnerClassThisField; + + // TMPawnGolem sync field + [MpCompatSyncField(typeof(TMPawnGolem), nameof(TMPawnGolem.showDormantPosition))] + protected static ISyncField compGolemShowDormantPosition; + // CompGolem sync fields + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.followsMaster))] + protected static ISyncField compGolemFollowsMaster; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.followsMasterDrafted))] + protected static ISyncField compGolemFollowsMasterDrafted; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.checkThreatPath))] + protected static ISyncField compGolemCheckThreatPath; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.remainDormantWhenUpgrading))] + protected static ISyncField compGolemRemainDormantWhenUpgrading; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.useAbilitiesWhenDormant))] + protected static ISyncField compGolemUseAbilitiesWhenDormant; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.threatRange), bufferChanges = true)] + protected static ISyncField compGolemThreatRange; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.minEnergyPctForAbilities), bufferChanges = true)] + protected static ISyncField compGolemMinEnergyPctForAbilities; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.energyPctShouldRest), bufferChanges = true)] + protected static ISyncField compGolemEnergyPctShouldRest; + [MpCompatSyncField(typeof(CompGolem), nameof(CompGolem.energyPctShouldAwaken), bufferChanges = true)] + protected static ISyncField compGolemEnergyPctShouldAwaken; + // TM_GolemUpgrade sync field + [MpCompatSyncField(typeof(CompGolem), $"{nameof(CompGolem.Upgrades)}/[]", nameof(TM_GolemUpgrade.enabled))] + protected static ISyncField golemUpgradeEnabled; + // TM_GolemDef.GolemWorkTypes sync field + [MpCompatSyncField(typeof(CompGolem), $"{nameof(CompGolem.Golem)}/{nameof(TM_Golem.golemDef)}/{nameof(TM_GolemDef.golemWorkTypes)}/[]", nameof(TM_GolemDef.GolemWorkTypes.enabled))] + protected static ISyncField golemWorkTypeEnabled; + + #endregion + + #region Main Patch + + public ARimWorldOfMagic(ModContentPack mod) + { + LongEventHandler.ExecuteWhenFinished(LatePatch); + + #region RNG Patching + + { + var systemRngMethods = new[] + { + "TorannMagic.Laser_LightningBolt:Explosion", + "TorannMagic.Projectile_Icebolt:Explosion", + "TorannMagic.Projectile_LightningCloud:Explosion", + "TorannMagic.TM_Action:DoAction_ApplySplashDamage", + "TorannMagic.Projectile_LightningStorm:Explosion", + "TorannMagic.Projectile_Overwhelm:Explosion", + "TorannMagic.FlyingObject_Advanced_Icebolt:Explosion", + "TorannMagic.Projectile_Snowball:Explosion", + "TorannMagic.Projectile_SummonElemental:Impact", + "TorannMagic.Projectile_SummonMinion:Impact", + "TorannMagic.Projectile_SummonPoppi:Impact", + "TorannMagic.Weapon.Projectile_FireWand:Explosion", + "TorannMagic.Weapon.Projectile_LightningWand:Explosion", + "TorannMagic.Weapon.SeerRing_Fire:Explosion", + "TorannMagic.Weapon.SeerRing_Lightning:Explosion", + "TorannMagic.Projectile_DisablingShot:Impact", + "TorannMagic.Projectile_Fireball:Explosion", + "TorannMagic.Projectile_Fireclaw:Explosion", + "TorannMagic.Verb_ShootDifferentProjectiles:TryCastShot", + }; + + PatchingUtilities.PatchSystemRand(systemRngMethods, false); + + foreach (var method in AccessTools.GetDeclaredMethods(typeof(TM_MoteMaker))) + { + // Shouldn't happen as the type itself is static + if (!method.IsStatic) + { + Log.Warning($"{nameof(TM_MoteMaker)} had a non-static method: {method.Name}"); + continue; + } + + // Skip if returns anything (skip MakeOverlay calls, no need to patch them) + if (method.ReturnType != typeof(void)) + continue; + + var shouldPatch = method.Name switch + { + // Handle ambiguous matches + "ThrowDiseaseMote" when method.GetParameters().Length != 6 => false, + "ThrowArcaneMote" when method.GetParameters().Length != 8 => false, + "ThrowShadowMote" when method.GetParameters().Length != 6 => false, + // ThrowTwinkle has ambiguous match, but we need to patch both. + _ => true, + }; + + if (shouldPatch) + PatchingUtilities.PatchPushPopRand(method); + } + } + + #endregion + + #region Gizmos + + { + MP.RegisterSyncMethod(typeof(TM_Action), nameof(TM_Action.PromoteWanderer)); + MP.RegisterSyncMethod(typeof(TM_Action), nameof(TM_Action.PromoteWayfarer)); + MP.RegisterSyncMethod(typeof(TM_Action), nameof(TM_Action.RemoveSymbiosisCommand)); + + // Target specific cell + MP.RegisterSyncMethodLambda(typeof(Building_60mmMortar), nameof(Building_60mmMortar.GetGizmos), 0); + // Replicate thing, remove replication bills (1) + MpCompat.RegisterLambdaMethod(typeof(Building_TMArcaneForge), nameof(Building_TMArcaneForge.GetGizmos), 0, 1); + } + + #endregion + + #region Golems + + { + // Gizmos + MP.RegisterSyncMethod(typeof(Building_TMGolemBase), nameof(Building_TMGolemBase.InterfaceChangeTargetTemperature)); + // Hold fire (1), force attack target (3), toggle glowing (4), reset temperature (8) + MpCompat.RegisterLambdaMethod(typeof(Building_TMGolemBase), nameof(Building_TMGolemBase.GetGizmos), 1, 3, 4, 8); + // Activate + MP.RegisterSyncDelegateLambda(typeof(Building_TMGolemBase), nameof(Building_TMGolemBase.GetGizmos), 0); + // Deactivate (0), set a rest position (1), draft (3), hold fire (4) + MpCompat.RegisterLambdaMethod(typeof(TMPawnGolem), nameof(TMPawnGolem.GetGizmos), 0, 1, 3, 4); + + // Assign pawn as a golem's master + MP.RegisterSyncDelegateLambda(typeof(GolemUtility), nameof(GolemUtility.MasterButton), 1); + + // Golem Pawn table + MP.RegisterSyncMethod(typeof(PawnColumnWorker_GolemActive), nameof(PawnColumnWorker_GolemActive.SetValue)) + .CancelIfAnyArgNull() + // Argument is unused. Syncing fails since the main tab is not + // a subtype of MainTabWindow_PawnTable, just MainTabWindow, + // so just use a simple reader to create a dummy table. Can't + // use "null" due to "CancelIfAnyArgNull", as it would be + // cancelled otherwise. Need to include a PawnTableDef to + // prevent an error, as the table uses def's minWidth field. + .TransformArgument(2, Serializer.SimpleReader(() => new PawnTable(PawnTableDefOf.Work, null, 0, 0))); + } + + #endregion + } + + private static void LatePatch() + { + MpCompatPatchLoader.LoadPatch(); + + #region RNG + + { + var systemRngMethods = new[] + { + "TorannMagic.Building_TMElementalRift_Defenders:DetermineElementalType", + "TorannMagic.Building_TMElementalRift:DetermineElementalType", + "TorannMagic.FlyingObject_ValiantCharge:Explosion", + "TorannMagic.FlyingObject_Whirlwind:ApplyWhirlwindDamage", + "TorannMagic.FlyingObject_DemonFlight:Explosion", + "TorannMagic.Projectile_ValiantCharge:Explosion", + "TorannMagic.MovingObject:ApplyWhirlwindDamage", + "TorannMagic.Verb_Cleave:ApplyCleaveDamage", + }; + + PatchingUtilities.PatchSystemRand(systemRngMethods); + } + + #endregion + + #region Gizmos + + { + // Toggle: techno bit (3), techno bit repair (5), elemental shot (7) + MpCompat.RegisterLambdaMethod(typeof(CompAbilityUserMagic), nameof(CompAbilityUserMagic.GetGizmoCommands), 3, 5, 7); + + // Toggle: cleave (2), CQC (4), psionic augmentation (6), psionic mind attack (8) + MpCompat.RegisterLambdaMethod(typeof(CompAbilityUserMight), nameof(CompAbilityUserMight.GetGizmoCommands), 2, 4, 6, 8); + } + + #endregion + + #region ITab + + { + // Magic // + // Dev mode level up/reset skills from the ITab + MP.RegisterSyncMethod(typeof(CompAbilityUserMagic), nameof(CompAbilityUserMagic.LevelUp)).SetDebugOnly(); + MP.RegisterSyncMethod(typeof(CompAbilityUserMagic), nameof(CompAbilityUserMagic.ResetSkills)).SetDebugOnly(); + + // Might // + // Dev mode level up/reset skills from the ITab + MP.RegisterSyncMethod(typeof(CompAbilityUserMight), nameof(CompAbilityUserMight.LevelUp)).SetDebugOnly(); + MP.RegisterSyncMethod(typeof(CompAbilityUserMight), nameof(CompAbilityUserMight.ResetSkills)).SetDebugOnly(); + } + + #endregion + + #region Portal + + { + // Only sync 2 fields (map, <>4__this) as we don't need (or want) the other one (myMap) as it would cause issues. + MpCompat.RegisterLambdaDelegate(typeof(JobDriver_PortalDestination), nameof(JobDriver_PortalDestination.ChooseWorldTarget), ["map", "<>4__this"], 1)[0] + .CancelIfAnyFieldNull() + // We don't use a real JobDriver, so we need to sync the important data. + // We can't even expose it, as the mod doesn't do that for one of the fields + // we need to sync. This field may cause issues with JobDriver on save/reload. + .TransformField("<>4__this", Serializer.New( + (JobDriver_PortalDestination job) => (Pawn: job.pawn, Portal: job.portalBldg), + networked => new JobDriver_PortalDestination + { + pawn = networked.Pawn, + comp = networked.Pawn.GetCompAbilityUserMagic(), + portalBldg = networked.Portal, + })) + // Syncing data on potentially multiple maps, and MP doesn't allow for that. + // We need to manually sync the other map here to handle this. + .TransformField("map", Serializer.New( + (Map map) => map.uniqueID, + id => Find.Maps.Find(map => map.uniqueID == id))); + + // Prepare field refs for compiled generated classes (over using slow Traverse) + // JobDriver + var lambda = MpMethodUtil.GetLambda(typeof(JobDriver_PortalDestination), nameof(JobDriver_PortalDestination.ChooseWorldTarget), lambdaOrdinal: 1); + portalDestinationInnerClassThisField = AccessTools.FieldRefAccess(lambda.DeclaringType, "<>4__this"); + + // Building itself + lambda = MpMethodUtil.GetLambda(typeof(Building_TMPortal), nameof(Building.GetFloatMenuOptions), lambdaOrdinal: 0); + portalBuildingInnerClassThisField = AccessTools.FieldRefAccess(lambda.DeclaringType, "<>4__this"); + } + + #endregion + } + + #endregion + + #region Living Wall Multithreading + + // Living wall works by targeting a wall that will become "alive", + // visible by an icon (projectile) on top of it. It'll move around + // the wall when there's enemies on the map, trying to approach them. + // It will attack adjacent enemies and repair parts of the wall it's in. + // + // Living wall ticking uses MP unsafe multithreading, so we need to + // get rid of it and replace it with a safe alternative. + // + // Another issue here is with multiple maps. The living wall has a static + // Pawn field for the target to attack, however it's assigned from one + // thread, accessed in another, and if there's living walls on multiple + // maps it may attempt to target the pawn from an inactive map. Sadly + // not something we can fix without making more major changes. + + private static bool ReplacedDirectPathThread(bool threadLocked, FlyingObject_LivingWall instance) + { + // If not in MP, return the field that was accessed here. + // It'll use multithreading out of MP. + if (!MP.IsInMultiplayer) + return threadLocked; + + // This thing does not care for the proper map of the + // threat. Ignore executing if not the same map. Also, + // this method will only be called if the closestThreat + // is not null, so no reason to check it for null here. + // Also, make sure to do the check when idleFor is 0, + // as otherwise it'll keep repeatedly performing this + // expensive operation on the first possible tick. This + // will ensure we only do it on the last possible tick. + if (instance.idleFor == 0 && instance.Map == FlyingObject_LivingWall.closestThreat.Map && instance.OccupiedWall != null) + { + // As opposed to the other thread, this one is a bit heavier. + // It will, attempt to find a new path towards the closest + // threat. It checks all the walls in the map for the closest + // one, and then tries to calculate path towards it. + // When this call ends it'll go idle for at least 5 or 60 ticks, + // depending on if there's a target path or not. + instance.DirectPath(); + } + + // If MP, return true (will be negated in the if statement) to prevent + // the method from starting a new thread. + return true; + } + + private static bool ReplacedDoThreadedActionsThread(bool threadLocked, FlyingObject_LivingWall instance) + { + // If not in MP, return the field that was accessed here. + // It'll use multithreading out of MP. + if (!MP.IsInMultiplayer) + return threadLocked; + + // Doesn't seem like there's much that would cause performance issues + // if on main thread. There's 3 checks that are done periodically + // based on current tick. There's also another check that's only + // done when there's a target position (different from current one) + // and there's no current path set. + var wallUpdate = instance.nextWallUpdate; + instance.DoThreadedActions(); + + // Connected wall update is a pretty expensive operation, + // make it less common. Normally happens once every 10-20 + // ticks, change it to 60-120. + if (wallUpdate > instance.nextWallUpdate) + instance.nextWallUpdate *= 6; + + // If MP, return true (will be negated in the if statement) to prevent + // the method from starting a new thread. + return true; + } + + [MpCompatTranspiler(typeof(FlyingObject_LivingWall), nameof(FlyingObject_LivingWall.Tick))] + private static IEnumerable ReplaceLivingWallMultithreading(IEnumerable instr, MethodBase baseMethod) + { + var targetField = AccessTools.DeclaredField(typeof(FlyingObject_LivingWall), nameof(FlyingObject_LivingWall.threadLocked)); + var firstTarget = MpMethodUtil.MethodOf(ReplacedDirectPathThread); + var secondTarget = MpMethodUtil.MethodOf(ReplacedDoThreadedActionsThread); + var encounteredFields = 0; + + foreach (var ci in instr) + { + yield return ci; + + if (ci.opcode == OpCodes.Ldfld && ci.operand is FieldInfo field && field == targetField) + { + if (encounteredFields < 2) + { + // Insert "this" argument + yield return new CodeInstruction(OpCodes.Ldarg_0); + + // Call our extra method + yield return new CodeInstruction(OpCodes.Call, + encounteredFields == 0 + ? firstTarget + : secondTarget); + } + + encounteredFields++; + } + } + + const int expected = 2; + if (encounteredFields != expected) + { + var name = (baseMethod.DeclaringType?.Namespace).NullOrEmpty() ? baseMethod.Name : $"{baseMethod.DeclaringType!.Name}:{baseMethod.Name}"; + Log.Warning($"Tried to replace incorrect number of calls to FlyingObject_LivingWall.threadLocked field (encountered {encounteredFields}, expected {expected}) for method {name}"); + } + } + + #endregion + + #region Autocasting + + private static void SyncMagicPowerAutoCast(MagicPower magicPower, bool target, Pawn pawn) + { + if (!MP.IsInMultiplayer) + { + magicPower.AutoCast = target; + return; + } + + // Prevent spam + // The gizmo normally has a 5 tick cooldown before being able to change the auto cast state + if (magicPower.interactionTick >= Find.TickManager.TicksGame) + return; + magicPower.interactionTick = Find.TickManager.TicksGame + 5; + + SyncedSetMagicAutoCast(pawn, magicPower.abilityDef, target); + } + + private static void SyncMightPowerAutoCast(MightPower mightPower, bool target, Pawn pawn) + { + if (!MP.IsInMultiplayer) + { + mightPower.AutoCast = target; + return; + } + + // Prevent spam + // The gizmo normally has a 5 tick cooldown before being able to change the auto cast state + if (mightPower.interactionTick >= Find.TickManager.TicksGame) + return; + mightPower.interactionTick = Find.TickManager.TicksGame + 5; + + SyncedSetMightAutoCast(pawn, mightPower.abilityDef, target); + } + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedSetMagicAutoCast(Pawn pawn, AbilityUser.AbilityDef abilityDef, bool target) + { + var power = pawn.GetCompAbilityUserMagic()?.MagicData?.AllMagicPowers?.Find(p => p.abilityDef == abilityDef); + if (power == null) + return; + + // Reset the interaction tick, otherwise the setter may not change the value as it was "interacted" with too recently + power.interactionTick = 0; + power.AutoCast = target; + } + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedSetMightAutoCast(Pawn pawn, AbilityUser.AbilityDef abilityDef, bool target) + { + var power = pawn.GetCompAbilityUserMight()?.MightData?.AllMightPowers?.Find(p => p.abilityDef == abilityDef); + if (power == null) + return; + + // Reset the interaction tick, otherwise the setter may not change the value as it was "interacted" with too recently + power.interactionTick = 0; + power.AutoCast = target; + } + + [MpCompatTranspiler(typeof(TM_Action), nameof(TM_Action.DrawAutoCastForGizmo))] + private static IEnumerable SyncAutocastingSetter(IEnumerable instr) + { + var magicAutoCastTarget = AccessTools.DeclaredPropertySetter(typeof(MagicPower), nameof(MagicPower.AutoCast)); + var mightAutoCastTarget = AccessTools.DeclaredPropertySetter(typeof(MightPower), nameof(MightPower.AutoCast)); + var magicAutoCastReplacement = AccessTools.Method(typeof(ARimWorldOfMagic), nameof(SyncMagicPowerAutoCast)); + var mightAutoCastReplacement = AccessTools.Method(typeof(ARimWorldOfMagic), nameof(SyncMightPowerAutoCast)); + + var pawnAbilityField = AccessTools.Field(typeof(Command_PawnAbility), nameof(Command_PawnAbility.pawnAbility)); + var pawnGetter = AccessTools.PropertyGetter(typeof(PawnAbility), nameof(PawnAbility.Pawn)); + + foreach (var ci in instr) + { + if (ci.opcode == OpCodes.Callvirt && ci.operand is MethodInfo method) + { + var loadPawnParam = false; + + if (method == magicAutoCastTarget) + { + // Replace the method call with our own + ci.operand = magicAutoCastReplacement; + loadPawnParam = true; + } + else if (method == mightAutoCastTarget) + { + // Replace the method call with our own + ci.operand = mightAutoCastReplacement; + loadPawnParam = true; + } + + if (loadPawnParam) + { + // Load the command + yield return new CodeInstruction(OpCodes.Ldarg_0); + // Get the PawnAbility field + yield return new CodeInstruction(OpCodes.Ldfld, pawnAbilityField); + // Call the Pawn getter, to be passed as argument to our method + yield return new CodeInstruction(OpCodes.Callvirt, pawnGetter); + } + } + + yield return ci; + } + } + + #endregion + + #region Verify synced methods pre execution + + [MpCompatPrefix(typeof(TM_Action), nameof(TM_Action.PromoteWanderer))] + private static bool ShouldCancelPromoteWanderer(Pawn pawn) => ShouldCancelPromotion(pawn, "TM_Gifted"); + + [MpCompatPrefix(typeof(TM_Action), nameof(TM_Action.PromoteWayfarer))] + private static bool ShouldCancelPromoteWayfarer(Pawn pawn) => ShouldCancelPromotion(pawn, "PhysicalProdigy"); + + private static bool ShouldCancelPromotion(Pawn pawn, string requiredTraitDefName) + { + if (!MP.IsInMultiplayer || !MP.IsExecutingSyncCommand || pawn?.story?.traits?.allTraits == null) + return true; + + // Only allow execution if the pawn still has the required trait + return pawn.story.traits.allTraits.Any(trait => trait.def.defName == requiredTraitDefName); + } + + [MpCompatPrefix(typeof(Building_TMArcaneForge), nameof(Building_TMArcaneForge.GetGizmos), 0)] + private static bool PreReplicateRecipe(Building_WorkTable __instance) + { + if (!MP.IsInMultiplayer || !MP.IsExecutingSyncCommand) + return true; + + // The mod doesn't let you pick a new object to replicate if + // there's a replication recipe already active. + return __instance.BillStack.Bills.All(bill => bill.recipe.defName != "ArcaneForge_Replication"); + } + + [MpCompatPrefix(typeof(JobDriver_PortalDestination), nameof(JobDriver_PortalDestination.ChooseWorldTarget), 1)] + private static bool PreChoosePortalDestination(object __instance) + { + if (!MP.IsInMultiplayer || !MP.IsExecutingSyncCommand) + return true; + + var jobDriver = portalDestinationInnerClassThisField(__instance); + // Cannot setup a portal if it has a target already + if (jobDriver.portalBldg == null || jobDriver.portalBldg.isPaired) + return false; + + var comp = jobDriver.pawn?.GetCompAbilityUserMagic(); + if (comp == null) + return false; + + // Make sure the pawn has the prerequisite spell, the field + // needs to be true or spell's power needs to be learned. + if (!comp.spell_FoldReality && !comp.MagicData.MagicPowersA.FirstOrDefault(p => p.abilityDef == TorannMagicDefOf.TM_FoldReality).learned) + return false; + + // Make sure pawn still has enough mana + return comp.Mana is { CurLevel: >= 0.7f }; + } + + #endregion + + #region Fix comp syncing + + // Magic/might comps fails to sync (likely due to not having props) + // so we make a sync worker delegate for them both to handle them. + [MpCompatSyncWorker(typeof(CompAbilityUserMagic))] + private static void SyncMagicUserComp(SyncWorker sync, ref ThingComp comp) + { + if (sync.isWriting) + sync.Write(comp?.parent); + else + comp = sync.Read()?.GetCompAbilityUserMagic(); + } + + [MpCompatSyncWorker(typeof(CompAbilityUserMight))] + private static void SyncMightUserComp(SyncWorker sync, ref ThingComp comp) + { + if (sync.isWriting) + sync.Write(comp?.parent); + else + comp = sync.Read()?.GetCompAbilityUserMight(); + } + + #endregion + + #region Improve portal target selection + + // Portals require you to order a pawn to pick destination, which creates a job, + // which then opens world map and requires you to select a destination. In MP, + // this is rather inconvenient. Skip the job entirely and just let the player pick. + + [MpCompatPrefix(typeof(Building_TMPortal), nameof(Building_TMPortal.GetFloatMenuOptions), 0)] + private static bool PreStartChoosingDestinationJob(Pawn ___myPawn, object __instance) + { + if (!MP.IsInMultiplayer) + return true; + + var building = portalBuildingInnerClassThisField(__instance); + // Setup dummy job driver and start choosing destination + new JobDriver_PortalDestination + { + pawn = ___myPawn, + portalBldg = building, + job = new Job(null, building), + }.StartChoosingDestination(); + + return false; + } + + #endregion + + #region Skill level-up handling + + // Handle "+" level-up buttons. + + #region Magic + + [MpCompatSyncMethod] + private static void SyncedLevelUpMagicSkill(Pawn pawn, AbilityUser.AbilityDef abilityDef, int magicPowerSkillIndex, int currentLevel) + { + // Can't use cancelIfAnyArgNull as we expect abilityDef to + // potentially be null, so include a null pawn check in here. + if (pawn == null) + return; + + // Make sure indices aren't negative + if (magicPowerSkillIndex < 0) + return; + + var comp = pawn.GetCompAbilityUserMagic(); + // Make sure that the comp and lists aren't null and that they contain the correct data + if (comp?.MagicData?.AllMagicPowerSkills == null || comp.MagicData.AllMagicPowerSkills.Count <= magicPowerSkillIndex) + return; + + // If there's one, make sure the parent power is not null and learned + if (abilityDef != null) + { + var power = comp.MagicData.AllMagicPowers.Find(p => p.abilityDef == abilityDef); + if (power is not { learned: true }) + return; + } + + var skill = comp.MagicData.AllMagicPowerSkills[magicPowerSkillIndex]; + // Make sure that we aren't accidentally leveling up when unwanted + if (skill.level != currentLevel) + return; + // Make sure we aren't overleveling + if (skill.level >= skill.levelMax) + return; + // Make sure we can level up + if (comp.MagicData.MagicAbilityPoints < skill.costToLevel) + return; + + // Level up, remove ability points + skill.level++; + comp.MagicData.MagicAbilityPoints -= skill.costToLevel; + + // Special handling for specific abilities + if (skill.label == "TM_Cantrips_eff") + { + if (skill.level >= 15) + TM_PawnTracker.ResolveMightComp(pawn.GetCompAbilityUserMight()); + } + else if (skill.label == "TM_LightSkip_pwr") + { + if (skill.level == 1) + comp.AddPawnAbility(TorannMagicDefOf.TM_LightSkipMass); + else if (skill.level == 2) + comp.AddPawnAbility(TorannMagicDefOf.TM_LightSkipGlobal); + } + } + + private static bool ReplacedLevelUpMagicButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, + CompAbilityUserMagic compMagic, MagicPower power, List.Enumerator skillEnumerator) + { + var result = Widgets.ButtonText(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMagic.Pawn.Faction != Faction.OfPlayer) + return result; + + var pawn = compMagic.Pawn; + + // The mod itself Doesn't check for genes in the mod itself, + // it also doesn't check for enum flags and instead only the value. + if (power != null && pawn.story is { DisabledWorkTagsBackstoryAndTraits: WorkTags.Violent } && power.abilityDef.MainVerb.isViolent) + { + // The mod originally has this as a historical message, it's a bit pointless. + // It also only provides the first argument, but not second one, causing an error. + Messages.Message("IsIncapableOfViolenceLower".Translate(compMagic.parent.LabelShort, compMagic.parent), MessageTypeDefOf.RejectInput, false); + return false; + } + + var skill = skillEnumerator.Current; + var magicPowerSkillIndex = compMagic.MagicData.AllMagicPowerSkills.IndexOf(skill); + if (magicPowerSkillIndex < 0) + return false; + + SyncedLevelUpMagicSkill(pawn, power?.abilityDef, magicPowerSkillIndex, skill!.level); + return false; + } + + private static bool ReplacedGlobalLevelUpMagicButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, + CompAbilityUserMagic compMagic, List.Enumerator clarityEnumerator, List.Enumerator focusEnumerator, List.Enumerator spiritEnumerator) + { + List.Enumerator target; + if (clarityEnumerator.Current != null) + target = clarityEnumerator; + else if (focusEnumerator.Current != null) + target = focusEnumerator; + else if (spiritEnumerator.Current != null) + target = spiritEnumerator; + // Shouldn't happen + else + return false; + + return ReplacedLevelUpMagicButton(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor, compMagic, null, target); + } + + #endregion + + #region Might + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedLevelUpMightSkill(Pawn pawn, int mightPowerSkillIndex, int currentLevel) + { + // We don't need to check MightPower, similarly to how magic does with MagicPower, + // as might doesn't have checks here if the base power is learned at all. + // Seems like it allows you to upgrade mutually-exclusive skill upgrades for + // super soldier pawns. However, in general might skills don't need learning, + // so that's likely why there's no checks for learned powers in here, + + // Make sure indices aren't negative + if (mightPowerSkillIndex < 0) + return; + + var comp = pawn.GetCompAbilityUserMight(); + // Make sure that the comp and lists aren't null and that they contain the correct data + if (comp?.MightData?.AllMightPowerSkills == null || comp.MightData.AllMightPowerSkills.Count <= mightPowerSkillIndex) + return; + + var skill = comp.MightData.AllMightPowerSkills[mightPowerSkillIndex]; + // Make sure that we aren't accidentally leveling up when unwanted + if (skill.level != currentLevel) + return; + // Make sure we aren't overleveling + if (skill.level >= skill.levelMax) + return; + // Make sure we can level up + if (comp.MightData.MightAbilityPoints < skill.costToLevel) + return; + + // Level up, remove ability points + skill.level++; + comp.MightData.MightAbilityPoints -= skill.costToLevel; + + // Special handling for specific abilities + if (skill.label == "TM_FieldTraining_eff" && skill.level >= 15) + TM_PawnTracker.ResolveMagicComp(pawn.GetCompAbilityUserMagic()); + } + + private static bool ReplacedLevelUpMightButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, CompAbilityUserMight compMight, MightPower power, List.Enumerator skillEnumerator) + { + var result = Widgets.ButtonText(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMight.Pawn.Faction != Faction.OfPlayer) + return result; + + var pawn = compMight.Pawn; + + // The mod itself Doesn't check for genes in the mod itself, + // it also doesn't check for enum flags and instead only the value. + if (power != null && pawn.story is { DisabledWorkTagsBackstoryAndTraits: WorkTags.Violent } && power.abilityDef.MainVerb.isViolent) + { + // The mod originally has this as a historical message, it's a bit pointless. + // It also only provides the first argument, but not second one, causing an error. + Messages.Message("IsIncapableOfViolenceLower".Translate(compMight.parent.LabelShort, compMight.parent), MessageTypeDefOf.RejectInput, false); + return false; + } + + var skill = skillEnumerator.Current; + var mightPowerSkillIndex = compMight.MightData.AllMightPowerSkills.IndexOf(skill); + if (mightPowerSkillIndex < 0) + return false; + + SyncedLevelUpMightSkill(pawn, mightPowerSkillIndex, skill!.level); + return false; + } + + private static bool ReplacedGlobalLevelUpMightButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, + CompAbilityUserMight compMight, List.Enumerator fitnessEnumerator, List.Enumerator coordinationEnumerator, List.Enumerator strengthEnumerator, List.Enumerator enduranceEnumerator) + { + List.Enumerator target; + if (fitnessEnumerator.Current != null) + target = fitnessEnumerator; + else if (coordinationEnumerator.Current != null) + target = coordinationEnumerator; + else if (strengthEnumerator.Current != null) + target = strengthEnumerator; + else if (enduranceEnumerator.Current != null) + target = enduranceEnumerator; + // Shouldn't happen + else + return false; + + return ReplacedLevelUpMightButton(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor, compMight, null, target); + } + + #endregion + + #region Shared + + [MpCompatTranspiler(typeof(MagicCardUtility), nameof(MagicCardUtility.CustomSkillHandler))] + [MpCompatTranspiler(typeof(MightCardUtility), nameof(MightCardUtility.CustomSkillHandler))] + private static IEnumerable UniversalReplaceLevelUpPlusButton(IEnumerable instr, MethodBase baseMethod) + { + var target = AccessTools.DeclaredMethod(typeof(Widgets), nameof(Widgets.ButtonText), + [typeof(Rect), typeof(string), typeof(bool), typeof(bool), typeof(bool), typeof(TextAnchor?)]); + MethodInfo replacement; + + if (baseMethod.DeclaringType == typeof(MagicCardUtility)) + replacement = MpMethodUtil.MethodOf(ReplacedLevelUpMagicButton); + else if (baseMethod.DeclaringType == typeof(MightCardUtility)) + replacement = MpMethodUtil.MethodOf(ReplacedLevelUpMightButton); + // Shouldn't happen + else throw new Exception($"Trying to apply transpiler ({nameof(UniversalReplaceLevelUpPlusButton)}) for an unsupported type ({baseMethod.DeclaringType.FullDescription()})."); + + IEnumerable ExtraInstructions() => + [ + // Load the magic/might comp parameter + new CodeInstruction(OpCodes.Ldarg_1), + // Load the magic/might power parameter + new CodeInstruction(OpCodes.Ldarg_2), + // Load the List.Enumerator, + // it's simpler than calling CS$<>8__locals1.skill. + new CodeInstruction(OpCodes.Ldloc_0), + ]; + + return ReplaceMethod(instr, baseMethod, target, replacement, ExtraInstructions, "+", 1); + } + + [MpCompatTranspiler(typeof(MagicCardUtility), nameof(MagicCardUtility.DrawLevelBar))] + [MpCompatTranspiler(typeof(MightCardUtility), nameof(MightCardUtility.DrawLevelBar))] + private static IEnumerable UniversalReplaceGlobalLevelUpPlusButton(IEnumerable instr, MethodBase baseMethod) + { + var target = AccessTools.DeclaredMethod(typeof(Widgets), nameof(Widgets.ButtonText), + [typeof(Rect), typeof(string), typeof(bool), typeof(bool), typeof(bool), typeof(TextAnchor?)]); + MethodInfo replacement; + int expected; + Func> extraInstructions; + + if (baseMethod.DeclaringType == typeof(MagicCardUtility)) + { + replacement = MpMethodUtil.MethodOf(ReplacedGlobalLevelUpMagicButton); + expected = 3; + extraInstructions = () => + [ + // Load the pawn argument + new CodeInstruction(OpCodes.Ldarg_1), + // Load all the List.Enumerator locals + new CodeInstruction(OpCodes.Ldloc_S, 19), + new CodeInstruction(OpCodes.Ldloc_S, 28), + new CodeInstruction(OpCodes.Ldloc_S, 36), + ]; + } + else if (baseMethod.DeclaringType == typeof(MightCardUtility)) + { + replacement = MpMethodUtil.MethodOf(ReplacedGlobalLevelUpMightButton); + expected = 4; + extraInstructions = () => + [ + // Load the pawn argument + new CodeInstruction(OpCodes.Ldarg_1), + // Load all the List.Enumerator locals + new CodeInstruction(OpCodes.Ldloc_S, 22), + new CodeInstruction(OpCodes.Ldloc_S, 31), + new CodeInstruction(OpCodes.Ldloc_S, 39), + new CodeInstruction(OpCodes.Ldloc_S, 47), + ]; + } + // Shouldn't happen + else throw new Exception($"Trying to apply transpiler ({nameof(UniversalReplaceLevelUpPlusButton)}) for an unsupported type ({baseMethod.DeclaringType.FullDescription()})."); + + return ReplaceMethod(instr, baseMethod, target, replacement, extraInstructions, "+", expected); + } + + #endregion + + #endregion + + #region Power learn/level-up handling + + // Handle the "Learn" (text) and level-up (image) buttons. + + #region Magic + + #region Learning + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedLearnMagicSkill(Pawn pawn, TMAbilityDef abilityDef) + { + var compMagic = pawn.GetCompAbilityUserMagic(); + var power = compMagic?.MagicData?.AllMagicPowers?.Find(p => p.abilityDef == abilityDef); + // Make sure the power is not null, not learned yet, and (shouldn't happen here) doesn't require a scroll + if (power == null || power.learned || power.requiresScroll) + return; + // Make sure we have enough ability points to level up + if (compMagic.MagicData.MagicAbilityPoints < power.costToLevel) + return; + + // No max level checks, etc. as some skills that can only + // be learned (but not leveled up) have a max level of 0. + + // Execute everything in the same order as in the mod + power.learned = true; + + if (abilityDef.shouldInitialize && abilityDef.defName != "TM_TechnoBit") + compMagic.AddPawnAbility(abilityDef); + if (abilityDef.defName == "TM_TechnoWeapon") + { + compMagic.AddPawnAbility(TorannMagicDefOf.TM_NanoStimulant); + compMagic.MagicData.MagicPowersStandalone.FirstOrDefault( + p => p.abilityDef == TorannMagicDefOf.TM_NanoStimulant).learned = true; + } + if (abilityDef.childAbilities is { Count: > 0 }) + { + // The mod uses a for loop. A foreach loop should be safe, + // but let's not risk it in case the mod does some weird stuff. + for (var i = 0; i < abilityDef.childAbilities.Count; i++) + { + var childAbilityDef = abilityDef.childAbilities[i]; + if (childAbilityDef.shouldInitialize) + compMagic.AddPawnAbility(childAbilityDef); + } + } + + compMagic.MagicData.MagicAbilityPoints -= power.learnCost; + } + + private static bool ReplacedLearnMagicSkillButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, + CompAbilityUserMagic compMagic, List.Enumerator powerEnumerator) + { + var result = Widgets.ButtonText(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMagic.Pawn.Faction != Faction.OfPlayer) + return result; + + var power = powerEnumerator.Current; + if (power != null) + SyncedLearnMagicSkill(compMagic.Pawn, (TMAbilityDef)power.abilityDef); + + return false; + } + + #endregion + + #region Level-up + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedLevelUpMagicPower(Pawn pawn, AbilityUser.AbilityDef abilityDef, int currentLevel) + { + var comp = pawn.GetCompAbilityUserMagic(); + // Make sure that the comp and lists aren't null and that they contain the correct data + if (comp?.MagicData?.AllMagicPowerSkills == null) + return; + + var power = comp.MagicData.AllMagicPowers.Find(p => p.abilityDef == abilityDef); + if (power is not { learned: true }) + return; + + // Make sure that we aren't accidentally leveling up when unwanted + if (power.level != currentLevel) + return; + // Make sure we aren't overleveling + if (power.level >= power.maxLevel) + return; + // Make sure we can level up + if (comp.MagicData.MagicAbilityPoints < power.costToLevel) + return; + + comp.LevelUpPower(power); + comp.MagicData.MagicAbilityPoints -= power.costToLevel; + } + + private static bool ReplacedLevelUpMagicPowerButton(Rect butRect, Texture2D tex, bool doMouseoverSound, string tooltip, + CompAbilityUserMagic compMagic, List.Enumerator powerEnumerator) + { + var result = Widgets.ButtonImage(butRect, tex, doMouseoverSound, tooltip); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMagic.Pawn.Faction != Faction.OfPlayer) + return result; + + var power = powerEnumerator.Current; + if (power != null) + SyncedLevelUpMagicPower(compMagic.Pawn, power.abilityDef, power.level); + + return false; + } + + #endregion + + #endregion + + #region Might + + #region Learning + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedLearnMightSkill(Pawn pawn, TMAbilityDef abilityDef) + { + var compMight = pawn.GetCompAbilityUserMight(); + var power = compMight?.MightData?.AllMightPowers?.Find(p => p.abilityDef == abilityDef); + // Make sure the power is not null and not learned yet + if (power == null || power.learned) + return; + + // No max level checks, etc. as some skills that can only + // be learned (but not leveled up) have a max level of 0. + // Don't bother with cost checks. The mod technically + // does a cost check, but never reduces the ability points. + + power.learned = true; + + if (abilityDef == TorannMagicDefOf.TM_PistolSpec) + { + compMight.AddPawnAbility(TorannMagicDefOf.TM_PistolWhip); + compMight.skill_PistolWhip = true; + } + else if (abilityDef == TorannMagicDefOf.TM_RifleSpec) + { + compMight.AddPawnAbility(TorannMagicDefOf.TM_SuppressingFire); + compMight.skill_SuppressingFire = true; + compMight.AddPawnAbility(TorannMagicDefOf.TM_Mk203GL); + compMight.skill_Mk203GL = true; + } + else if (abilityDef == TorannMagicDefOf.TM_ShotgunSpec) + { + compMight.AddPawnAbility(TorannMagicDefOf.TM_Buckshot); + compMight.skill_Buckshot = true; + compMight.AddPawnAbility(TorannMagicDefOf.TM_BreachingCharge); + compMight.skill_BreachingCharge = true; + } + } + + private static bool ReplacedLearnMightSkillButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, + CompAbilityUserMight compMight, List.Enumerator powerEnumerator) + { + var result = Widgets.ButtonText(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMight.Pawn.Faction != Faction.OfPlayer) + return result; + + var power = powerEnumerator.Current; + if (power != null) + SyncedLearnMightSkill(compMight.Pawn, (TMAbilityDef)power.abilityDef); + + return false; + } + + #endregion + + #region Level-up + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedLevelUpMightPower(Pawn pawn, AbilityUser.AbilityDef abilityDef, int currentLevel) + { + var comp = pawn.GetCompAbilityUserMight(); + // Make sure that the comp and lists aren't null and that they contain the correct data + if (comp?.MightData?.AllMightPowerSkills == null) + return; + + var power = comp.MightData.AllMightPowers.Find(p => p.abilityDef == abilityDef); + if (power is not { learned: true }) + return; + + // Make sure that we aren't accidentally leveling up when unwanted + if (power.level != currentLevel) + return; + // Make sure we aren't overleveling + if (power.level >= power.maxLevel) + return; + // Make sure we can level up + if (comp.MightData.MightAbilityPoints < power.costToLevel) + return; + + comp.LevelUpPower(power); + comp.MightData.MightAbilityPoints -= power.costToLevel; + } + + private static bool ReplacedLevelUpMightPowerButton(Rect butRect, Texture2D tex, bool doMouseoverSound, string tooltip, + CompAbilityUserMight compMight, List.Enumerator powerEnumerator) + { + var result = Widgets.ButtonImage(butRect, tex, doMouseoverSound, tooltip); + // If not in MP, the button not pressed, or the faction is not player faction, return as-is. + if (!MP.IsInMultiplayer || !result || compMight.Pawn.Faction != Faction.OfPlayer) + return result; + + var power = powerEnumerator.Current; + if (power != null) + SyncedLevelUpMightPower(compMight.Pawn, power.abilityDef, power.level); + + return false; + } + + #endregion + + #endregion + + #region Shared + + [MpCompatTranspiler(typeof(MagicCardUtility), nameof(MagicCardUtility.CustomPowersHandler))] + [MpCompatTranspiler(typeof(MightCardUtility), nameof(MightCardUtility.CustomPowersHandler))] + private static IEnumerable ReplaceLearnSkillButton(IEnumerable instr, MethodBase baseMethod) + { + var targetTextButton = AccessTools.DeclaredMethod(typeof(Widgets), nameof(Widgets.ButtonText), + [typeof(Rect), typeof(string), typeof(bool), typeof(bool), typeof(bool), typeof(TextAnchor?)]); + var targetImageButton = AccessTools.DeclaredMethod(typeof(Widgets), nameof(Widgets.ButtonImage), + [typeof(Rect), typeof(Texture2D), typeof(bool), typeof(string)]); + MethodInfo textButtonReplacement; + MethodInfo imageButtonReplacement; + int enumeratorIndex; + + if (baseMethod.DeclaringType == typeof(MagicCardUtility)) + { + textButtonReplacement = MpMethodUtil.MethodOf(ReplacedLearnMagicSkillButton); + imageButtonReplacement = MpMethodUtil.MethodOf(ReplacedLevelUpMagicPowerButton); + enumeratorIndex = 4; + } + else if (baseMethod.DeclaringType == typeof(MightCardUtility)) + { + textButtonReplacement = MpMethodUtil.MethodOf(ReplacedLearnMightSkillButton); + imageButtonReplacement = MpMethodUtil.MethodOf(ReplacedLevelUpMightPowerButton); + enumeratorIndex = 5; + } + // Shouldn't happen + else throw new Exception($"Trying to apply transpiler ({nameof(ReplaceLearnSkillButton)}) for an unsupported type ({baseMethod.DeclaringType.FullDescription()})."); + + IEnumerable ExtraInstructions() => + [ + // Load the magic/might comp parameter + new CodeInstruction(OpCodes.Ldarg_1), + // Load the List.Enumerator, + // it's simpler than calling CS$<>8__locals1.power. + new CodeInstruction(OpCodes.Ldloc_S, enumeratorIndex), + ]; + + // Replace the "TM_Learn" button to learn a power + var replacedLearnButton = ReplaceMethod(instr, baseMethod, targetTextButton, textButtonReplacement, ExtraInstructions, "TM_Learn", 1, "TM_MCU_PointsToLearn"); + // Replace the image button to level-up a power + return ReplaceMethod(replacedLearnButton, baseMethod, targetImageButton, imageButtonReplacement, ExtraInstructions, null, 1); + } + + #endregion + + #endregion + + #region Sprite area fixes + + // Two possible approaches here. + // First - replace call to TM_Calc.GetSpriteArea with our method with + // another argument, and insert self (or some other argument), and + // call it with the correct map ourselves. + // Second (done here) - replace the ldnull used for the map argument + // and insert the correct map (without replacing the method). + + [MpCompatTranspiler(typeof(Verb_EarthSprites), nameof(Verb_EarthSprites.TryCastShot))] + private static IEnumerable SpriteAreaInsertMapToVerbEarthSprites(IEnumerable instr, MethodBase baseMethod) + { + var casterPawnGetter = AccessTools.PropertyGetter(typeof(Verb_EarthSprites), nameof(Verb_EarthSprites.CasterPawn)); + var mapGetter = AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.Map)); + + IEnumerable ExtraInstructions(CodeInstruction ci) + { + // Replace the null with "this.CasterPawn.Map". + + // Replace the null with "this" (Verb_EarthSprites) + ci.opcode = OpCodes.Ldarg_0; + // insert "CasterPawn" getter + yield return new CodeInstruction(OpCodes.Callvirt, casterPawnGetter); + // insert "Map" getter + yield return new CodeInstruction(OpCodes.Callvirt, mapGetter); + } + + return PatchSpriteAreaMethod(instr, ExtraInstructions, baseMethod, 2); + } + + [MpCompatTranspiler(typeof(CompAbilityUserMagic), nameof(CompAbilityUserMagic.ResolveEarthSpriteAction))] + private static IEnumerable SpriteAreaInsertMapToCompAbilityUserMagic(IEnumerable instr, MethodBase baseMethod) + { + var earthSpriteMapField = AccessTools.DeclaredField(typeof(CompAbilityUserMagic), nameof(CompAbilityUserMagic.earthSpriteMap)); + + IEnumerable ExtraInstructions(CodeInstruction ci) + { + // Replace the null with "this.earthSpriteMap". + // The sprites have their map remembered, and + // it may be different from the pawn's map. + // This field is used for basically everything, + // besides getting the area for the sprites. + + // Replace the null with "this" (CompAbilityUserMagic) + ci.opcode = OpCodes.Ldarg_0; + // Insert "earthSpriteMap" field + yield return new CodeInstruction(OpCodes.Ldfld, earthSpriteMapField); + } + + return PatchSpriteAreaMethod(instr, ExtraInstructions, baseMethod, 4); + } + + private static IEnumerable PatchSpriteAreaMethod(IEnumerable instr, Func> method, MethodBase baseMethod, int expectedPatches) + { + var target = MpMethodUtil.MethodOf(TM_Calc.GetSpriteArea); + var patchedCount = 0; + var instrArr = instr.ToArray(); + + for (var i = 0; i < instrArr.Length; i++) + { + var ci = instrArr[i]; + + yield return ci; + + if (ci.opcode == OpCodes.Ldnull && i + 2 < instrArr.Length && instrArr[i + 2].Calls(target)) + { + foreach (var newInstr in method(ci)) + yield return newInstr; + + patchedCount++; + } + } + + if (patchedCount != expectedPatches) + { + var name = (baseMethod.DeclaringType?.Namespace).NullOrEmpty() ? baseMethod.Name : $"{baseMethod.DeclaringType!.Name}:{baseMethod.Name}"; + Log.Warning($"Patched incorrect number of TM_Calc.GetSpriteArea calls (patched {patchedCount}, expected {expectedPatches}) for method {name}"); + } + } + + #endregion + + #region Golem ITab field watching + + [MpCompatPrefix(typeof(ITab_GolemPawn), nameof(ITab_GolemPawn.FillTab))] + [MpCompatPrefix(typeof(ITab_GolemWorkstation), nameof(ITab_GolemWorkstation.FillTab))] + private static void PreITabGolemFillTab(ref bool __state) + { + if (!MP.IsInMultiplayer) + return; + + var selected = Find.Selector.SingleSelectedThing; + // ITab_GolemPawn uses TMPawnGolem, ITab_GolemWorkstation uses Building_TMGolemBase + var golem = selected as TMPawnGolem ?? (selected as Building_TMGolemBase)?.GolemPawn; + if (golem == null) + return; + + MP.WatchBegin(); + __state = true; + + // TMPawnGolem + compGolemShowDormantPosition.Watch(golem); + + // CompGolem + compGolemFollowsMaster.Watch(golem.Golem); + compGolemFollowsMasterDrafted.Watch(golem.Golem); + compGolemCheckThreatPath.Watch(golem.Golem); + compGolemRemainDormantWhenUpgrading.Watch(golem.Golem); + compGolemUseAbilitiesWhenDormant.Watch(golem.Golem); + compGolemThreatRange.Watch(golem.Golem); + compGolemMinEnergyPctForAbilities.Watch(golem.Golem); + compGolemEnergyPctShouldRest.Watch(golem.Golem); + compGolemEnergyPctShouldAwaken.Watch(golem.Golem); + } + + [MpCompatFinalizer(typeof(ITab_GolemPawn), nameof(ITab_GolemPawn.FillTab))] + [MpCompatFinalizer(typeof(ITab_GolemWorkstation), nameof(ITab_GolemWorkstation.FillTab))] + private static void PostITabGolemFillTab(bool __state) + { + if (__state) + MP.WatchEnd(); + } + + #endregion + + #region Golem abilities and work types changing + + [MpCompatSyncMethod] + private static void SyncedApplyChangesToGolemAbilitiesAndWorkTypes(CompGolem cg, HashSet upgradeDefs) + { + if (cg == null) + return; + + // Create a dummy window, setup the comp and the + // list of upgrades that were active when synced, + // and the call "Close" to trigger the code we + // want to sync. + new GolemAbilitiesWindow + { + cg = cg, + upgrades = upgradeDefs == null + // If upgradeDefs is null, use an empty list + ? [] + // If upgradeDefs isn't null, find all the upgrades from the list + : cg.Upgrades.Where(u => upgradeDefs.Contains(u.golemUpgradeDef)).ToList(), + }.Close(); + } + + [MpCompatPrefix(typeof(GolemAbilitiesWindow), nameof(GolemAbilitiesWindow.Close))] + private static bool PreCloseDialog(GolemAbilitiesWindow __instance, bool doCloseSound) + { + // If not in MP or not in interface (can't sync, would end up in endless loop) + if (!MP.IsInMultiplayer || !MP.InInterface) + return true; + + // Close the dialog manually, since we canceled the close method. + Find.WindowStack.TryRemove(__instance, doCloseSound); + + if (__instance.upgrades != null) + { + // A slight precaution against null values. + // Should not happen, but let's take this safe. + __instance.upgrades.RemoveAll(x => x == null); + // Sync the "Close" method. + SyncedApplyChangesToGolemAbilitiesAndWorkTypes(__instance.cg, + __instance.upgrades.Select(u => u.golemUpgradeDef).ToHashSet()); + } + + // We cannot let the close method run, as it would change game state in interface. + return false; + } + + [MpCompatPrefix(typeof(GolemAbilitiesWindow), nameof(GolemAbilitiesWindow.DoWindowContents))] + private static void PreGolemAbilitiesWindow(GolemAbilitiesWindow __instance) + { + if (!MP.IsInMultiplayer) + return; + + MP.WatchBegin(); + + var upgrades = __instance.cg.Upgrades; + if (upgrades != null) + { + for (var i = 0; i < upgrades.Count; i++) + golemUpgradeEnabled.Watch(__instance.cg, i); + } + + // Def shouldn't be null, but let's be safe + var workTypes = __instance.cg.Golem.golemDef?.golemWorkTypes; + if (workTypes != null) + { + for (var i = 0; i < workTypes.Count; i++) + golemWorkTypeEnabled.Watch(__instance.cg, i); + } + } + + [MpCompatFinalizer(typeof(GolemAbilitiesWindow), nameof(GolemAbilitiesWindow.DoWindowContents))] + private static void PostGolemAbilitiesWindow() + { + if (MP.IsInMultiplayer) + MP.WatchEnd(); + } + + #endregion + + #region Golem renaming + + // The golem renaming dialog sets CompGolem.GolemName and Pawn.Name at the same time. + // The issue happens due to Pawn.Name using CompGolem.GolemName, which isn't synced yet + + [MpCompatSyncMethod(cancelIfAnyArgNull = true)] + private static void SyncedSetGolemName(CompGolem golem, string targetName) + => golem.PawnGolem.Name = golem.GolemName = NameTriple.FromString(targetName); + + private static bool ReplacedApplyGolemNameButton(Rect rect, string label, bool drawBackground, bool doMouseoverSound, bool active, TextAnchor? overrideTextAnchor, GolemNameWindow window) + { + var result = Widgets.ButtonText(rect, label, drawBackground, doMouseoverSound, active, overrideTextAnchor); + if (!MP.IsInMultiplayer || !result) + return result; + + SyncedSetGolemName(window.cg, window.golemName); + return false; + } + + [MpCompatTranspiler(typeof(GolemNameWindow), nameof(GolemNameWindow.DoWindowContents))] + private static IEnumerable ReplaceApplyGolemNameButtonTranspiler(IEnumerable instr, MethodBase baseMethod) + { + var target = AccessTools.DeclaredMethod(typeof(Widgets), nameof(Widgets.ButtonText), + [typeof(Rect), typeof(string), typeof(bool), typeof(bool), typeof(bool), typeof(TextAnchor?)]); + var replacement = MpMethodUtil.MethodOf(ReplacedApplyGolemNameButton); + + IEnumerable ExtraInstructions() => + [ + // Load in "this" (GolemNameWindow) + new CodeInstruction(OpCodes.Ldarg_0), + ]; + + // The "Apply" text isn't translated in the mod... + return ReplaceMethod(instr, baseMethod, target, replacement, ExtraInstructions, "Apply", 1); + } + + #endregion + + #region Golem main tab window + + [MpCompatPrefix(typeof(PawnColumnWorker_GolemAwakenPercent), nameof(PawnColumnWorker_GolemAwakenPercent.DoCell))] + private static void PreGolemPawnColumnWorkerAwakenPercentDoCell(Pawn pawn, ref bool __state) + => PreGolemPawnColumnWorkerDoCell(pawn, compGolemEnergyPctShouldRest, ref __state); + + [MpCompatPrefix(typeof(PawnColumnWorker_GolemRestPercent), nameof(PawnColumnWorker_GolemRestPercent.DoCell))] + private static void PreGolemPawnColumnWorkerRestPercentDoCell(Pawn pawn, ref bool __state) + => PreGolemPawnColumnWorkerDoCell(pawn, compGolemEnergyPctShouldAwaken, ref __state); + + [MpCompatPrefix(typeof(PawnColumnWorker_GolemThreatRange), nameof(PawnColumnWorker_GolemThreatRange.DoCell))] + private static void PreGolemPawnColumnWorkerThreatRangeDoCell(Pawn pawn, ref bool __state) + => PreGolemPawnColumnWorkerDoCell(pawn, compGolemThreatRange, ref __state); + + private static void PreGolemPawnColumnWorkerDoCell(Pawn pawn, ISyncField syncField, ref bool state) + { + if (!MP.IsInMultiplayer || pawn.Faction != Faction.OfPlayer) + return; + + var golemComp = pawn.GetComp(); + if (golemComp == null) + return; + + state = true; + MP.WatchBegin(); + syncField.Watch(golemComp); + } + + [MpCompatFinalizer(typeof(PawnColumnWorker_GolemAwakenPercent), nameof(PawnColumnWorker_GolemAwakenPercent.DoCell))] + [MpCompatFinalizer(typeof(PawnColumnWorker_GolemRestPercent), nameof(PawnColumnWorker_GolemRestPercent.DoCell))] + [MpCompatFinalizer(typeof(PawnColumnWorker_GolemThreatRange), nameof(PawnColumnWorker_GolemThreatRange.DoCell))] + private static void PostGolemPawnColumnWorkerDoCell(bool __state) + { + if (__state) + MP.WatchEnd(); + } + + [MpCompatPrefix(typeof(PawnColumnWorker_GolemActive), nameof(PawnColumnWorker_GolemActive.SetValue))] + private static bool CancelGolemActivationToggleIfStateAlreadyMatches(Pawn pawn, bool value) + { + if (!MP.IsInMultiplayer) + return true; + + var golemComp = pawn.GetComp(); + // The method would not do anything anyway, just cancel the call + if (golemComp == null) + return false; + + // If executing sync command, make sure we aren't changing the state to the wrong one. + // If the pawn is spawned the value should be false to deactivate it, + // and when it's despawned it should be true to activate it. + if (MP.IsExecutingSyncCommand) + return pawn.Spawned != value; + + // I guess since we're already patching this method, we may as well + // stop it from syncing the call if that would be entirely pointless + // (trying to (de)activate golem while it's already doing that). + if (pawn.Spawned) + return !golemComp.shouldDespawn; + + if (golemComp.parent.ParentHolder is Building_TMGolemBase building) + return !building.activating; + + return true; + } + + [MpCompatTranspiler(typeof(PawnColumnWorker_GolemActive), nameof(PawnColumnWorker_GolemActive.DoCell))] + private static IEnumerable InsertCurrentStateToGolemActivation(IEnumerable instr, MethodBase baseMethod) + { + var target = AccessTools.DeclaredMethod(typeof(PawnColumnWorker_Checkbox), nameof(PawnColumnWorker_Checkbox.SetValue)); + CodeInstruction lastLdc_I4_1 = null; + var replacedCount = 0; + + foreach (var ci in instr) + { + yield return ci; + + if (ci.opcode == OpCodes.Ldc_I4_1) + lastLdc_I4_1 = ci; + + // Insert the new current state in place of a constant "true". + // We could also technically call insert loc 7 or call + // GetValue(Pawn), but we'd need to invert those in our prefix. + // We could also replace the whole method as well if we wanted + // to, but that's not really necessary. + if (lastLdc_I4_1 != null && ci.Calls(target)) + { + lastLdc_I4_1.opcode = OpCodes.Ldloc_S; + lastLdc_I4_1.operand = 8; + + replacedCount++; + } + } + + const int expected = 1; + if (replacedCount != expected) + { + var name = (baseMethod.DeclaringType?.Namespace).NullOrEmpty() ? baseMethod.Name : $"{baseMethod.DeclaringType!.Name}:{baseMethod.Name}"; + Log.Warning($"Patched incorrect number of PawnColumnWorker_GolemActive.SetValue calls (patched {replacedCount}, expected {expected}) for method {name}"); + } + } + + #endregion + + #region Sync static fields on join + + [MpCompatPrefix("Multiplayer.Client.Autosaving", "SaveGameToFile_Overwrite")] + private static void PreStartHosting() => isAutoSaving = true; + + [MpCompatFinalizer("Multiplayer.Client.Autosaving", "SaveGameToFile_Overwrite")] + private static void PostStartHosting() => isAutoSaving = false; + + [MpCompatPostfix("Multiplayer.Client.Comp.MultiplayerGameComp", "ExposeData")] + private static void PostMpCompExposeData() + { + // Do not save the data to the actual save file, + // as the mod does not save this data itself. + // Just return when autosaving the game. We could + // attempt to make something more complex, like + // not exposing data when loading the game. This + // would be more complex due to + if (isAutoSaving) + return; + + // The mod has a lot of static fields that aren't cleared on save/load, + // nor are they saved at any point. Resetting some of them would be an + // option, but in many cases it would cause issues, like resetting + // pawnInFlight could cause some maps to be removed due to no active + // pawns (while something is flying at the moment). We sync the static + // fields by exposing data in MultiplayerGameComp using a postfix to + // not affect the SP (since this type won't exist in SP). + + // Living wall's current target + Scribe_References.Look(ref FlyingObject_LivingWall.closestThreat, "RoMClosestThreat"); + + // A bunch of static fields used by the mod in random places. + Scribe_Values.Look(ref Constants.pawnInFlight, "RoMPawnInFlight"); + Scribe_Values.Look(ref Constants.lastGrowthMoteTick, "RoMLastGrowthMoteTick"); + Scribe_Values.Look(ref Constants.technoWeaponCount, "RoMTechnoWeaponCount"); + Scribe_Values.Look(ref Constants.bypassPrediction, "RoMBypassPrediction"); + Scribe_Deep.Look(ref Constants.undeadApparelPolicy, "RoMUndeadApparelPolicy"); + Scribe_Collections.Look(ref Constants.overdrivePawns, "RoMOverdrivePawns", LookMode.Reference); + Constants.overdrivePawns ??= []; + Scribe_Values.Look(ref Constants.pistolSpecCount, "RoMPistolSpecCount"); + Scribe_Values.Look(ref Constants.rifleSpecCount, "RoMRifleSpecCount"); + Scribe_Values.Look(ref Constants.shotgunSpecCount, "RoMShotgunSpecCount"); + + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + // The mod attempts to clear growth cells and then re-add + // them again, but it doesn't do it too well. Just clear + // it safely in here and let it re-add all the cells. + Constants.growthCells.Clear(); + + // The mod has some dynamic data in the defs that determine + // stuff like when to next apply a workstation effects. We + // need to reset them to default to prevent any issues. + // Also, this will cause issues when you have multiple + // golems of the same type on your map, as they'll be + // attempting to use and modify the same data. This + // basically means that only 1 golem at a time will + // be able to use some of those upgrades. This also means + // that if you save your very late game and load a much + // earlier game (or start a new game) the golems won't + // be able to use those upgrades until they match up in + // time, unless you quit the game first. This specific + // issue in the mod will also mean that with Async time, + // only the person who's the most ahead in time will be + // able to use those specific golem upgrades, as the other + // players won't be able to activate them since the next + // allowed tick is too far ahead into the future. Also, + // GolemWorkstationEffect happens to be exposable, but is + // never exposed (and it would cause issues if it was). + foreach (var def in DefDatabase.AllDefs) + { + if (def.workstationEffects != null) + { + foreach (var effect in def.workstationEffects) + { + // Clear the data to fix the join desyncs. + effect.target = default; + effect.parent = default; + effect.parentUpgrade = default; + effect.currentLevel = default; + effect.nextEffectTick = default; + effect.startTick = default; + } + } + } + } + } + + #endregion + + #region Shared + + private static IEnumerable ReplaceMethod(IEnumerable instr, MethodBase baseMethod, MethodInfo target, MethodInfo replacement, Func> extraInstructions = null, string buttonText = null, int expectedReplacements = -1, string excludedText = null) + { + // Check for text only if expected text isn't null + var isCorrectText = buttonText == null; + var skipNextCall = false; + var replacedCount = 0; + + foreach (var ci in instr) + { + if (ci.opcode == OpCodes.Ldstr && ci.operand is string s) + { + // Excluded text (if not null) will cancel replacement of the next occurrence + // of the method. Used by `MagicCardUtility:CustomPowersHandler`, as the text + // `TM_Learn` appears twice there, but in a single case it's combined with + // `TM_MCU_PointsToLearn`, in which case we ignore the button (as the + // button does nothing in that particular case). + if (excludedText != null && s == excludedText) + skipNextCall = true; + else if (s == buttonText) + isCorrectText = true; + } + else if (isCorrectText) + { + if (ci.Calls(target)) + { + if (skipNextCall) + { + skipNextCall = false; + } + else + { + if (extraInstructions != null) + { + foreach (var extraInstr in extraInstructions()) + yield return extraInstr; + } + + // Replace method with our own + ci.opcode = OpCodes.Call; + ci.operand = replacement; + + replacedCount++; + // Check for text only if expected text isn't null + isCorrectText = buttonText == null; + } + } + } + + yield return ci; + } + + string MethodName() => (baseMethod.DeclaringType?.Namespace).NullOrEmpty() ? baseMethod.Name : $"{baseMethod.DeclaringType!.Name}:{baseMethod.Name}"; + if (replacedCount != expectedReplacements && expectedReplacements >= 0) + Log.Warning($"Patched incorrect number of {target.DeclaringType?.Name ?? "null"}.{target.Name} calls (patched {replacedCount}, expected {expectedReplacements}) for method {MethodName()}"); + // Special case (-2) - expected some patched methods, but amount unspecified + else if (replacedCount == 0 && expectedReplacements == -2) + Log.Warning($"No calls of {target.DeclaringType?.Name ?? "null"}.{target.Name} were patched for method {MethodName()}"); + } + + #endregion + + #region Optimizations + + [MpCompatPrefix(typeof(TM_Calc), nameof(TM_Calc.FindConnectedWalls))] + private static bool FasterFindConnectedWalls(Building start, float maxAllowedDistance, float maxDistanceFromStart, ref List __result) + { + // Tested original and 2 optimized versions + // by running all of them 1000 times. + // Original: 74945.925 ms + // Optimized: 179.0462 ms + // Optimized with HashSets: 165.098 ms + + var map = start.Map; + var connectedBuildings = new HashSet { start }; + var newBuildings = new HashSet { start }; + var addedBuilding = new HashSet(); + + // We avoid call to LengthHorizontal and instead use LengthHorizontalSquared. + // because of this we also need a squared value for maxDistanceFromStart and + // maxAllowedDistance. After all, multiplying (especially only once) is going + // to be faster than squaring a number (especially if done multiple times). + var maxDistanceSquared = maxDistanceFromStart * maxDistanceFromStart; + var maxAllowedDistanceSquared = maxAllowedDistance * maxAllowedDistance; + + // Rather than using ListerThings to search for buildings, use ListerBuildings. + // Since there's no global "all buildings", concat the colonist and non-colonist + // buildings as that should cover everything. We also don't need to check if + // the current thing is a Building, since we only work on buildings. Likewise, + // we don't need to cast it all to Building at the end either. Finally, We call + // ToList at the end to avoid multiple enumerations on the list, which the mod does. + var allBuildings = map.listerBuildings.allBuildingsColonist.Concat(map.listerBuildings.allBuildingsNonColonist) + .Where(b => TM_Calc.IsWall(b) && (b.Position - start.Position).LengthHorizontalSquared <= maxDistanceSquared) + .ToList(); + + for (var i = 0; i < 200; i++) + { + addedBuilding.Clear(); + foreach (var b in newBuildings) + { + foreach (var t in allBuildings) + { + if ((t.Position - b.Position).LengthHorizontalSquared <= maxAllowedDistanceSquared && connectedBuildings.Add(t)) + { + addedBuilding.Add(t); + } + } + } + + newBuildings.Clear(); + newBuildings.AddRange(addedBuilding); + if(newBuildings.Count <= 0) + break; + } + + // Needs to be ordered to be deterministic + __result = connectedBuildings.OrderBy(x => x.thingIDNumber).ToList(); + + return false; + } + + [MpCompatPrefix(typeof(FlyingObject_LivingWall), nameof(FlyingObject_LivingWall.FindClosestWallFromTarget))] + private static bool FasterFindClosestWallFromTarget(FlyingObject_LivingWall __instance, ref Thing __result) + { + // Tested original and optimized by running both 1000 times: + // Original: 1099.7684 ms + // Optimized: 39.382 ms + + Thing tmp = null; + // The mod uses 999, but since we operate on squared + // values we need to square the 999 as well. + var closest = 998001f; + + // No need to call ToList, as it's iterated over only once. + var allThings = __instance.Map.listerBuildings.allBuildingsColonist.Concat(__instance.Map.listerBuildings.allBuildingsNonColonist) + .Where(TM_Calc.IsWall); + + foreach(var b in allThings) + { + var dist = (b.Position - FlyingObject_LivingWall.closestThreat.Position).LengthHorizontalSquared; + if (dist < closest) + { + closest = dist; + tmp = b; + } + } + + __result = tmp; + + return false; + } + + [MpCompatPrefix(typeof(TM_Calc), nameof(TM_Calc.FindNearestWall))] + private static bool FasterFindNearestWall(Map map, IntVec3 center, Faction faction, ref Building __result) + { + // Tested original and optimized by running both 1000 times: + // Original: 395.6876 ms + // Optimized: 2.7747 ms + + foreach(var b in map.listerBuildings.allBuildingsColonist.Concat(map.listerBuildings.allBuildingsNonColonist)) + { + if(TM_Calc.IsWall(b) && (b.Position - center).LengthHorizontalSquared <= 1.9599999F) + { + if(faction != null) + { + if (faction == b.Faction) + { + __result = b; + return false; + } + } + else + { + __result = b; + return false; + } + } + } + + __result = null; + return false; + } + + /* + // Seems to have issues, would need to test more to see what's safe and what's not. + // Leaving as-is for now. Probably won't have enough impact on things anyway. + + // [MpCompatPrefix(typeof(FlyingObject_LivingWall), nameof(FlyingObject_LivingWall.FindClosestWallToTarget))] + [MpCompatPrefix(typeof(FlyingObject_LivingWall), nameof(FlyingObject_LivingWall.DirectPath))] + // Ignore FlyingObject_LivingWall.FindClosestWallFromTarget, as we replace the method with a faster one. + // Ignore FlyingObject_LivingWall.FindClosestThreat, as the search range of 999 would not be squared. + [MpCompatPrefix(typeof(FlyingObject_PsiStorm), nameof(FlyingObject_PsiStorm.DrawBoltMeshes))] + [MpCompatPrefix(typeof(JobGiver_AIClean), nameof(JobGiver_AIClean.TryGiveJob))] + [MpCompatPrefix(typeof(TM_Calc), nameof(TM_Calc.FindClosestCellPlus1VisibleToTarget))] + [MpCompatPrefix(typeof(TM_Calc), nameof(TM_Calc.SnipPath))] + // Results for this one are ignored... Changing it won't have any effect whatsoever on gameplay. + [MpCompatPrefix(typeof(AoECombat), nameof(AoECombat.Evaluate))] + // We could patch more code, especially a lot of autocasting code, but that would require + // changing extra code. Too much work for too little gain. Patch for this is included specifically + // due to living wall having some performance issues already (if not multithreaded). + private static IEnumerable ReplaceLengthHorizontalCalls(IEnumerable instr, MethodBase baseMethod) + { + // Whenever it won't affect the code, replace the usage of + // IntVec3's LengthHorizontal with LengthHorizontalSquared, + // as both call the same code but non-squared one calls + // GenMath.Sqrt (Math.Sqrt), which tends to be quite slow. + // Especially useful when trying to determine the closest + // target - it won't change which one is closest or not, + // only that the numbers we work on are bigger (weren't + // squared). Same applies when comparing which of the 2 + // values is bigger, it will be the same both before and + // after squaring the numbers. + var target = AccessTools.DeclaredPropertyGetter(typeof(IntVec3), nameof(IntVec3.LengthHorizontal)); + var replacement = AccessTools.DeclaredPropertyGetter(typeof(IntVec3), nameof(IntVec3.LengthHorizontalSquared)); + + return ReplaceMethod(instr, baseMethod, target, replacement, expectedReplacements: -2); + } + */ + + #endregion +} \ No newline at end of file