private void TransformPawn(Pawn pawn) { TransformationRequest request; Mutagen mutagen; switch (_state) { case ChamberState.Transforming: request = new TransformationRequest(pawnTFKind, pawn) { forcedGender = TFGender.Switch, forcedGenderChance = 50, manhunterSettingsOverride = ManhunterTfSettings.Never, factionResponsible = Faction, forcedFaction = Faction }; mutagen = MutagenDefOf.defaultMutagen.MutagenCached; break; case ChamberState.MergeInto: request = new TransformationRequest(pawnTFKind, pawn, (Pawn)linkTo.innerContainer[0]) { forcedGender = TFGender.Switch, forcedGenderChance = 50, manhunterSettingsOverride = ManhunterTfSettings.Never, factionResponsible = Faction, forcedFaction = Faction }; mutagen = MutagenDefOf.MergeMutagen.MutagenCached; break; case ChamberState.MergeOutOf: return; case ChamberState.Idle: default: throw new ArgumentOutOfRangeException(); } TransformedPawn pmInst = mutagen.Transform(request); if (pmInst == null) { Log.Error($"mutagenic chamber could not transform pawns {string.Join(",",request.originals.Select(p => p.Name.ToStringFull).ToArray())} using mutagen {mutagen.def.defName}"); return; } SendLetter(pawn); base.EjectContents(); if (_state == ChamberState.MergeInto) { linkTo.EjectContents(); } foreach (Pawn pmInstOriginalPawn in pmInst.OriginalPawns) { if (pmInstOriginalPawn == null) { continue; } TransformerUtility.CleanUpHumanPawnPostTf(pmInstOriginalPawn, null); } foreach (Pawn pmInstOriginalPawn in pmInst.OriginalPawns) { pmInstOriginalPawn.DeSpawn(); } var comp = Find.World.GetComponent <PawnmorphGameComp>(); comp.AddTransformedPawn(pmInst); Find.TickManager.slower.SignalForceNormalSpeedShort(); PawnComponentsUtility.AddComponentsForSpawn(pmInst.TransformedPawns.First()); pawn.ownership.UnclaimAll(); if (modulator != null) { modulator.triggered = true; if (modulator.merging) { modulator.merging = false; modulator.random = true; } } if (!Destroyed) { SoundDefOf.CryptosleepCasket_Eject.PlayOneShot(SoundInfo.InMap(new TargetInfo(base.Position, base.Map))); fuelComp.ConsumeFuel(fuelComp.Fuel); } }