Skip to content

EA 23.287 Stable โ€‹

March 20, 2026

19 files modified.

Important Changes โ€‹

Possible breaking changes. Click the filename to view the chunk.

AIAct (1) โ€‹

cs
public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null) 
public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null) 

AI_Fuck (1) โ€‹

cs
public override void OnSetOwner() 

AI_Shear (1) โ€‹

cs
public override void OnSetOwner() 

AI_Slaughter (1) โ€‹

cs
public override void OnSetOwner() 

ListPeopleParty (1) โ€‹

cs
public override void OnCreate() 

TaskPlow (1) โ€‹

cs
public override void OnSetOwner() 

TaskPoint (1) โ€‹

cs
public override void OnSetOwner() 

AIAct โ€‹

public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Fun

cs

	public Status DoGoto(Card card, Func<Status> _onChildFail = null)
	{
		return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail); 
		return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, ignoreConnection: false, _onChildFail); 
	}

	public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null) 
	public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null) 
	{
		if (card != null && card == owner.held)
		{

public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)

cs
		{
			return _onChildFail?.Invoke() ?? Cancel();
		}
		SetChild(new AI_Goto(card, dist), _onChildFail); 
		SetChild(new AI_Goto(card, dist, ignoreConnection), _onChildFail); 
		return TickChild();
	}

AI_Fuck โ€‹

public override IEnumerable<Status> Run()

cs
	int destDist = ((Type == FuckType.fuck) ? 1 : 1);
	if (owner.host != target)
	{
		yield return DoGoto(target.pos, destDist); 
		yield return DoGoto(target.pos, destDist, ignoreConnection: true); 
	}
	cc.Say((variation == Variation.Slime) ? "slime_start" : ((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc);
	isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;

public override IEnumerable<Status> Run()

cs
		progress = i;
		if (owner.host != target)
		{
			yield return DoGoto(target.pos, destDist); 
			yield return DoGoto(target.pos, destDist, ignoreConnection: true); 
		}
		switch (Type)
		{

static void SuccubusExp(Chara c, Chara tg)

cs
			}
		}
	}
	public override void OnSetOwner() 
	{ 
		if (parent is AI_Goto aI_Goto) 
		{ 
			aI_Goto.ignoreConnection = true; 
		} 
	} 
}

AI_Shear โ€‹

public override bool Perform()

cs

	public override IEnumerable<Status> Run()
	{
		yield return DoGoto(target); 
		yield return DoGoto(target, 1, ignoreConnection: true); 
		int furLv = GetFurLv(target.Chara);
		Progress_Custom seq = new Progress_Custom
		{

public override IEnumerable<Status> Run()

cs
		yield return Do(seq);
	}

	public override void OnSetOwner() 
	{ 
		if (parent is AI_Goto aI_Goto) 
		{ 
			aI_Goto.ignoreConnection = true; 
		} 
	} 
	public static int GetFurLv(Chara c)
	{
		return Mathf.Clamp(c.c_fur / 10 + 1, 1, 5);

AI_Slaughter โ€‹

public override bool Perform()

cs

	public override IEnumerable<Status> Run()
	{
		yield return DoGoto(target); 
		yield return DoGoto(target, 1, ignoreConnection: true); 
		if (target != owner)
		{
			target.Chara.AddCondition<ConWait>(1000, force: true);

public override void OnCancelOrSuccess()

cs
			target.SetCensored(enable: false);
		}
	}
	public override void OnSetOwner() 
	{ 
		if (parent is AI_Goto aI_Goto) 
		{ 
			aI_Goto.ignoreConnection = true; 
		} 
	} 
}

ActEffect โ€‹

void AddCon<T>(int rate, int power) where T : Condition

cs
	{
		CC.PlaySound("clean_floor");
		Msg.Say("exterminate");
		List<Chara> list2 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList(); 
		if (list2.Count == 0) 
		List<Chara> list3 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList(); 
		if (list3.Count == 0) 
		{
			Msg.SayNothingHappen();
			return;
		}
		foreach (Chara item in list2) 
		foreach (Chara item in list3) 
		{
			item.Say("split_fail", item);
			item.PlayEffect("vanish");

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			return;
		}
		Thing thing2 = ThingGen.Create("mine"); 
		thing2.c_idRefCard = "dog_mine"; 
		Thing thing3 = ThingGen.Create("mine"); 
		thing3.c_idRefCard = "dog_mine"; 
		Zone.ignoreSpawnAnime = true;
		EClass._zone.AddCard(thing2, CC.pos).Install(); 
		EClass._zone.AddCard(thing3, CC.pos).Install(); 
		break;
	}
	case EffectId.LittleSisterMigration:
	case EffectId.SilverCatMigration:
	{
		bool flag6 = id == EffectId.SilverCatMigration; 
		if (!EClass.game.IsSurvival && ((flag6 && EClass._zone.id != "startVillage2") || (!flag6 && !(EClass._zone is Zone_LittleGarden)))) 
		bool flag3 = id == EffectId.SilverCatMigration; 
		if (!EClass.game.IsSurvival && ((flag3 && EClass._zone.id != "startVillage2") || (!flag3 && !(EClass._zone is Zone_LittleGarden)))) 
		{
			Msg.SayNothingHappen();
			return;
		}
		List<Chara> list3 = new List<Chara>(); 
		bool flag7 = false; 
		List<Chara> list2 = new List<Chara>(); 
		bool flag4 = false; 
		foreach (Chara chara2 in EClass._map.charas)
		{
			if (!chara2.IsPCFactionOrMinion && chara2.id == (flag6 ? "cat_silver" : "littleOne")) 
			if (!chara2.IsPCFactionOrMinion && chara2.id == (flag3 ? "cat_silver" : "littleOne")) 
			{
				if (flag7) 
				if (flag4) 
				{
					flag7 = false; 
					flag4 = false; 
					continue;
				}
				list3.Add(chara2); 
				flag7 = true; 
				list2.Add(chara2); 
				flag4 = true; 
			}
		}
		if (list3.Count == 0) 
		if (list2.Count == 0) 
		{
			Msg.SayNothingHappen();
			return;
		}
		EClass.pc.PlaySound("chime_angel");
		foreach (Chara item2 in list3) 
		foreach (Chara item2 in list2) 
		{
			item2.PlayEffect("revive");
			item2.Destroy();
		}
		Msg.Say(flag6 ? "cat_migration" : "little_migration", list3.Count.ToString() ?? ""); 
		EClass._zone.ModInfluence(list3.Count); 
		if (flag6) 
		Msg.Say(flag3 ? "cat_migration" : "little_migration", list2.Count.ToString() ?? ""); 
		EClass._zone.ModInfluence(list2.Count); 
		if (flag3) 
		{
			EClass.player.stats.catDepart += list3.Count; 
			EClass.player.stats.catDepart += list2.Count; 
		}
		else
		{
			EClass.player.stats.sistersDepart += list3.Count; 
			EClass.player.stats.sistersDepart += list2.Count; 
		}
		break;
	}

void AddCon<T>(int rate, int power) where T : Condition

cs
		TC.PlaySound("curse3");
		TC.PlayEffect("curse");
		TC.Say("forgetItems", TC);
		int num2 = power / 50 + 1 + EClass.rnd(3); 
		int num4 = power / 50 + 1 + EClass.rnd(3); 
		List<Thing> source = TC.things.List((Thing t) => t.c_IDTState == 0);
		for (int i = 0; i < num2; i++) 
		for (int i = 0; i < num4; i++) 
		{
			source.RandomItem().c_IDTState = 5;
		}

void AddCon<T>(int rate, int power) where T : Condition

cs
	case EffectId.EnchantArmorGreat:
	{
		bool armor = id == EffectId.EnchantArmor || id == EffectId.EnchantArmorGreat;
		bool flag8 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat; 
		bool flag7 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat; 
		if (!tc.isThing)
		{
			LayerDragGrid.CreateEnchant(CC, armor, flag8, state); 
			LayerDragGrid.CreateEnchant(CC, armor, flag7, state); 
			return;
		}
		cc.PlaySound("identify");

void AddCon<T>(int rate, int power) where T : Condition

cs
			tc.ModEncLv(-1);
			break;
		}
		int num7 = (flag8 ? 4 : 2) + (blessed ? 1 : 0); 
		if (tc.encLV >= num7) 
		int num5 = (flag7 ? 4 : 2) + (blessed ? 1 : 0); 
		if (tc.encLV >= num5) 
		{
			cc.Say("enc_resist", tc);
			break;

void AddCon<T>(int rate, int power) where T : Condition

cs
	case EffectId.Identify:
	case EffectId.GreaterIdentify:
	{
		bool flag3 = id == EffectId.GreaterIdentify; 
		bool flag6 = id == EffectId.GreaterIdentify; 
		if (flag)
		{
			Redirect(EffectId.ForgetItems, flag3 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef)); 
			Redirect(EffectId.ForgetItems, flag6 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef)); 
			break;
		}
		if (!tc.isThing)
		{
			int count = ((!blessed) ? 1 : (flag3 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3)))); 
			LayerDragGrid.CreateIdentify(CC, flag3, state, 0, count); 
			int count = ((!blessed) ? 1 : (flag6 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3)))); 
			LayerDragGrid.CreateIdentify(CC, flag6, state, 0, count); 
			return;
		}
		cc.PlaySound("identify");
		cc.PlayEffect("identify");
		tc.Thing.Identify(cc.IsPCParty, (!flag3) ? IDTSource.Identify : IDTSource.SuperiorIdentify); 
		tc.Thing.Identify(cc.IsPCParty, (!flag6) ? IDTSource.Identify : IDTSource.SuperiorIdentify); 
		break;
	}
	case EffectId.Uncurse:

void AddCon<T>(int rate, int power) where T : Condition

cs
			LayerDragGrid.CreateUncurse(CC, state);
			return;
		}
		Thing thing = tc.Thing; 
		if (thing.blessedState == BlessedState.Cursed) 
		Thing thing2 = tc.Thing; 
		if (thing2.blessedState == BlessedState.Cursed) 
		{
			thing.SetBlessedState(BlessedState.Normal); 
			thing2.SetBlessedState(BlessedState.Normal); 
		}
		else if (thing.blessedState == BlessedState.Doomed) 
		else if (thing2.blessedState == BlessedState.Doomed) 
		{
			thing.SetBlessedState(BlessedState.Normal); 
			thing2.SetBlessedState(BlessedState.Normal); 
		}
		thing.GetRootCard()?.TryStack(thing); 
		LayerInventory.SetDirty(thing); 
		thing2.GetRootCard()?.TryStack(thing2); 
		LayerInventory.SetDirty(thing2); 
		break;
	}
	case EffectId.Lighten:

void AddCon<T>(int rate, int power) where T : Condition

cs
		}
		cc.PlaySound("offering");
		cc.PlayEffect("buff");
		int num = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight); 
		int num3 = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight); 
		tc.isWeightChanged = true;
		Element orCreateElement = tc.elements.GetOrCreateElement(64);
		Element orCreateElement2 = tc.elements.GetOrCreateElement(65);
		Element orCreateElement3 = tc.elements.GetOrCreateElement(67);
		Element orCreateElement4 = tc.elements.GetOrCreateElement(66);
		bool flag2 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon; 
		bool flag5 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon; 
		if (flag)
		{
			num = (int)(0.01f * (float)num * (float)power * 0.75f + 500f); 
			if (num < 0 || num > 10000000) 
			num3 = (int)(0.01f * (float)num3 * (float)power * 0.75f + 500f); 
			if (num3 < 0 || num3 > 10000000) 
			{
				num = 10000000; 
				flag2 = false; 
				num3 = 10000000; 
				flag5 = false; 
			}
			if (flag2) 
			if (flag5) 
			{
				if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
				{

void AddCon<T>(int rate, int power) where T : Condition

cs
		}
		else
		{
			num = num * (100 - power / 10) / 100; 
			num3 = num3 * (100 - power / 10) / 100; 
			if (blessed)
			{
				power /= 4;
			}
			if (flag2) 
			if (flag5) 
			{
				if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
				{

void AddCon<T>(int rate, int power) where T : Condition

cs
			}
			cc.Say("lighten", tc);
		}
		tc.c_weight = num; 
		tc.c_weight = num3; 
		tc.SetDirtyWeight();
		if (tc.parent == null)
		{

void AddCon<T>(int rate, int power) where T : Condition

cs
		cc.PlayEffect("identify");
		cc.Say("reconstruct", tc);
		EClass.game.cards.uidNext += EClass.rnd(30);
		int num5 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest); 
		int num6 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest); 
		CardBlueprint.Set(new CardBlueprint
		{
			blesstedState = state
		});
		Thing thing3 = ThingGen.Create(tc.id, -1, (int)((long)num5 * (long)power / 400)); 
		thing3.genLv = num5; 
		Thing thing4 = ThingGen.Create(tc.id, -1, (int)((long)num6 * (long)power / 400)); 
		thing4.genLv = num6; 
		if (tc.c_uidAttune != 0)
		{
			thing3.c_uidAttune = tc.c_uidAttune; 
			if (thing3.id == "amulet_engagement" || thing3.id == "ring_engagement") 
			thing4.c_uidAttune = tc.c_uidAttune; 
			if (thing4.id == "amulet_engagement" || thing4.id == "ring_engagement") 
			{
				if (tc.c_uidAttune != EClass.pc.uid)
				{
					thing3.elements.ModBase(484, 3); 
					thing4.elements.ModBase(484, 3); 
				}
				if (thing3.rarity < Rarity.Mythical) 
				if (thing4.rarity < Rarity.Mythical) 
				{
					thing3.rarity = Rarity.Mythical; 
					thing4.rarity = Rarity.Mythical; 
				}
			}
		}
		tc.Destroy();
		CC.Pick(thing3, msg: false); 
		CC.Pick(thing4, msg: false); 
		if (!CC.IsPC)
		{
			CC.TryEquip(thing3); 
			CC.TryEquip(thing4); 
		}
		break;
	}

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			tc = tc.Split(1);
		}
		string name = tc.Name; 
		string name2 = tc.Name; 
		if (row == null)
		{
			bool num3 = id == EffectId.ChangeMaterialGreater; 
			bool flag4 = id == EffectId.ChangeMaterialLesser; 
			bool num7 = id == EffectId.ChangeMaterialGreater; 
			bool flag8 = id == EffectId.ChangeMaterialLesser; 
			string text2 = tc.Thing.source.tierGroup;
			Dictionary<string, SourceMaterial.TierList> tierMap = SourceMaterial.tierMap;
			int num4 = 1; 
			int num8 = 1; 
			if (flag)
			{
				num4 -= 2; 
				num8 -= 2; 
			}
			if (blessed)
			{
				num4++; 
				num8++; 
			}
			if (num3) 
			if (num7) 
			{
				num4++; 
				num8++; 
			}
			if (flag4) 
			if (flag8) 
			{
				num4 -= 2; 
				num8 -= 2; 
			}
			num4 = Mathf.Clamp(num4 + EClass.rnd(2), 0, 4); 
			num8 = Mathf.Clamp(num8 + EClass.rnd(2), 0, 4); 
			if (EClass.rnd(10) == 0)
			{
				text2 = ((text2 == "metal") ? "leather" : "metal");

void AddCon<T>(int rate, int power) where T : Condition

cs
			SourceMaterial.TierList tierList = (text2.IsEmpty() ? tierMap.RandomItem() : tierMap[text2]);
			for (int j = 0; j < 1000; j++)
			{
				row = tierList.tiers[num4].Select(); 
				row = tierList.tiers[num8].Select(); 
				if (row != tc.material)
				{
					break;

void AddCon<T>(int rate, int power) where T : Condition

cs
			DNA.Type type = DNA.GetType(tc.material.alias);
			tc.c_DNA.Generate(type);
		}
		cc.Say("materialChanged", name, row.GetName()); 
		cc.Say("materialChanged", name2, row.GetName()); 
		if (CC != null)
		{
			if (tc.parent == null)

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			tc = tc.Split(1);
		}
		string name2 = tc.Name; 
		string name = tc.Name; 
		cc.PlaySound("offering");
		cc.PlayEffect("buff");
		bool flag5 = tc.rarity == Rarity.Legendary; 
		bool flag2 = tc.rarity == Rarity.Legendary; 
		CardBlueprint.Set(new CardBlueprint
		{
			rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary), 
			rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary), 
			generation = CardBlueprint.Generation.GarokkHammer
		});
		Rand.SetBaseSeed(tc.uid + 1);
		Rand.SetSeed(tc.uid + 2);
		Thing thing4 = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv); 
		Thing thing = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv); 
		Rand.SetSeed();
		Rand.SetBaseSeed();
		int num6 = 0; 
		foreach (Element item4 in thing4.elements.dict.Values.ToList().Shuffle()) 
		thing.SetEncLv(tc.encLV); 
		thing.SetBlessedState(tc.blessedState); 
		int num = 0; 
		foreach (Element item4 in thing.elements.dict.Values.ToList().Shuffle()) 
		{
			if (tc.elements.Has(item4.id) && tc.elements.GetElement(item4.id).vBase == item4.vBase) 
			int num2 = (tc.elements.Has(item4.id) ? tc.elements.GetElement(item4.id).vBase : 0); 
			if (num2 != 0 && (Mathf.Abs(item4.vBase) <= Mathf.Abs(num2) || !MathEx.IsSameSign(item4.vBase, num2))) 
			{
				continue;
			}
			tc.elements.SetBase(item4.id, item4.vBase); 
			Debug.Log(item4.Name + "/" + item4.vBase); 
			int id2 = item4.id;
			if ((uint)(id2 - 64) > 3u) 
			if (id2 != 11) 
			{
				num6++; 
				if (flag5) 
				if ((uint)(id2 - 64) > 3u) 
				{ 
					num++; 
				} 
				tc.elements.SetBase(item4.id, item4.vBase); 
				Debug.Log(item4.Name + "/" + item4.vBase); 
				if (flag2 && num >= 2) 
				{
					_ = 2; 
					break; 
				}
			}
		}
		tc.rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary); 
		EClass.pc.Say("reconstruct", name2); 
		tc.isCrafted = false; 
		tc.rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary); 
		EClass.pc.Say("reconstruct", name); 
		break;
	}
	case EffectId.ChangeAlias:
	{
		Chara c2 = CC;
		if (!c2.IsPC && !c2.trait.UseRandomAlias && blessed) 
		{ 
			c2._alias = null; 
			c2.Say("reconstruct", c2); 
			SE.Change(); 
			c2.PlayEffect("mutation"); 
			break; 
		} 
		EClass.ui.AddLayer<LayerList>().SetStringList(delegate
		{
			List<string> list11 = new List<string>();
			for (int num16 = 0; num16 < 10; num16++) 
			for (int num17 = 0; num17 < 10; num17++) 
			{
				list11.Add(AliasGen.GetRandomAlias());
			}

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			break;
		}
		int num13 = 0; 
		int num14 = 0; 
		foreach (Condition condition5 in TC.conditions)
		{
			if (condition5.Type == ConditionType.Debuff)
			{
				num13++; 
				num14++; 
			}
		}
		if (num13 == 0) 
		if (num14 == 0) 
		{
			CC.SayNothingHappans();
			break;

void AddCon<T>(int rate, int power) where T : Condition

cs
		TC.Say("abShutterHex", TC);
		Point center = CC.pos.Copy();
		List<Chara> list10 = TC.pos.ListCharasInRadius(TC, 4, (Chara c) => c == TC || c.IsHostile(CC));
		for (int m = 0; m < num13; m++) 
		for (int m = 0; m < num14; m++) 
		{
			TweenUtil.Delay((float)m * 0.1f, delegate
			{

void AddCon<T>(int rate, int power) where T : Condition

cs
					{
						effect.Play(center, 0f, pos);
					});
					int num14 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item6.DamageHP(num14, 919, power, AttackSource.None, CC, showEffect: false); 
					int num15 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item6.DamageHP(num15, 919, power, AttackSource.None, CC, showEffect: false); 
				}
			}
		}

void AddCon<T>(int rate, int power) where T : Condition

cs
		List<Thing> list = new List<Thing>();
		TC.things.Foreach(delegate(Thing t)
		{
			int num15 = 0; 
			int num16 = 0; 
			if ((t.isEquipped || t.IsRangedWeapon || blessed) && t.blessedState < BlessedState.Normal)
			{
				if (t.blessedState == BlessedState.Cursed)
				{
					num15 = EClass.rnd(200); 
					num16 = EClass.rnd(200); 
				}
				if (t.blessedState == BlessedState.Doomed)
				{
					num15 = EClass.rnd(1000); 
					num16 = EClass.rnd(1000); 
				}
				if (blessed)
				{
					num15 /= 2; 
					num16 /= 2; 
				}
				if (id == EffectId.UncurseEQGreater)
				{
					num15 /= 10; 
					num16 /= 10; 
				}
				if (power >= num15) 
				if (power >= num16) 
				{
					TC.Say("uncurseEQ_success", t);
					t.SetBlessedState(BlessedState.Normal);

void AddCon<T>(int rate, int power) where T : Condition

cs
			power = power * 2 / 3;
		}
		int a2 = power;
		int num11 = TC.WIL * (isPowerful ? 20 : 5); 
		int num12 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition3 = TC.GetCondition<ConHolyVeil>();
		if (condition3 != null)
		{
			num11 += condition3.power * 5; 
			num12 += condition3.power * 5; 
		}
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num11 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num12 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		{
			TC.Say("debuff_resist", TC);
			CC.DoHostileAction(TC);

void AddCon<T>(int rate, int power) where T : Condition

cs
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int num12 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num12 == 0) 
		int num13 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num13 == 0) 
		{
			num12 = tc.GetInt(118); 
			if (num12 == 0) 
			num13 = tc.GetInt(118); 
			if (num13 == 0) 
			{
				num12 = EClass.game.seed + tc.uid; 
				num13 = EClass.game.seed + tc.uid; 
			}
			num12++; 
			num13++; 
		}
		tc.Say("transBlood", tc);
		tc.Talk("tail");
		tc.c_bloodData = null;
		tc.SetInt(118, num12); 
		tc.SetInt(118, num13); 
		break;
	}
	case EffectId.Youth:

void AddCon<T>(int rate, int power) where T : Condition

cs
	{
		bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
		bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
		int num10 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		int num11 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		if (id == EffectId.Weaken)
		{
			flag12 = EClass.rnd(2) == 0;
			mind2 = !flag12;
			num10 = 1; 
			num11 = 1; 
		}
		else
		{

void AddCon<T>(int rate, int power) where T : Condition

cs
			TC.PlaySound("debuff");
		}
		TC.Say(flag12 ? "damageBody" : "damageMind", TC);
		for (int l = 0; l < num10; l++) 
		for (int l = 0; l < num11; l++) 
		{
			TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken);
		}

void AddCon<T>(int rate, int power) where T : Condition

cs
		{
			EClass.game.religions.Healing.Talk("ability");
		}
		int num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		int num10 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		if (actRef.refThing != null)
		{
			num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
			num10 = num10 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
		}
		if (flag)
		{
			TC.DamageHP(num9 / 2, 919, power); 
			TC.DamageHP(num10 / 2, 919, power); 
			break;
		}
		TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.HealHPHost(num10, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.CureHost(CureType.Heal, power, state);
		TC.Say((power >= 300) ? "heal_heavy" : "heal_light", TC);
		break;

void AddCon<T>(int rate, int power) where T : Condition

cs
		if (TC.HasElement(1211))
		{
			TC.Say("drinkSaltWater_snail", TC);
			int num8 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num8, AttackSource.None, CC); 
			int num9 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num9, AttackSource.None, CC); 
		}
		else if (TC.IsPC)
		{

ActPlan โ€‹

public Func<bool> GetAction()

cs
	Item item = list[0];
	return delegate
	{
		if (item.act is AIAct) 
		{ 
			(item.act as AIAct).owner = EClass.pc; 
		} 
		if (performed && !item.act.CanPressRepeat)
		{
			return false;

ActZap โ€‹

public override bool Perform()

cs
		Act.TC = Act.CC;
		EffectId idEffect = trait.IdEffect;
		long a = trait.Power * (100 + (long)Act.CC.Evalue(305) * 10L + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100;
		ActEffect.ProcAt(idEffect, MathEx.Min(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
		ActEffect.ProcAt(idEffect, MathEx.ClampToInt(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
		{
			refThing = trait.owner.Thing,
			aliasEle = trait.aliasEle,

AttackProcess โ€‹

public class AttackProcess : EClass

cs

	public long toHitBase;

	public long evasion; 
	public int dNum;

	public int dDim;

public class AttackProcess : EClass

cs

	public int toHitFix;

	public int evasion; 
	public int penetration;

	public int distMod;

public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,

cs
	toolRange = weapon?.trait as TraitToolRange;
	attackType = AttackType.Slash;
	attackStyle = AttackStyle.Default;
	evasion = 0; 
	evasion = 0L; 
	penetration = 0;
	distMod = 100;
	attackIndex = _attackIndex;

public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,

cs
		evasion = EClass.curve(TC.PER / 3 + TC.Evalue(150), 50, 10) + TC.DV + 25;
		if (TC.isChara && TC.Chara.isBlind)
		{
			evasion /= 2; 
			evasion /= 2L; 
		}
		if (TC.HasCondition<ConDim>())
		{
			evasion /= 2; 
			evasion /= 2L; 
		}
		if (TC.isChara && TC.Chara.HasHigherGround(CC))
		{

public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
				continue;
			}
			int num10 = 25;
			int num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5); 
			long num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5); 
			num11 = num11 * (100 + GetTwoHandEncBonus(CC, weapon)) / 100;
			if (num11 >= 0)
			{

Chara โ€‹

public override void OnCreate(int genLv)

cs
			num = tuple.Item3 + base.LV - source.LV;
		}
	}
	if (source.name == "*r") 
	if (trait.UseRandomName) 
	{
		base.c_altName = NameGen.getRandomName();
	}
	if (source.GetText("aka") == "*r" || trait.UseRandomAlias) 
	if (trait.UseRandomAlias) 
	{
		_alias = AliasGen.GetRandomAlias();
	}

EClass โ€‹

public static int rndSeed(int a, int seed)

cs

	public static int rnd(long a)
	{
		return Rand.rnd((int)a); 
		return Rand.rnd(MathEx.ClampToInt(a)); 
	}

	public static int rnd(int a)

GrowSystem โ€‹

public int Convert(int tile)

cs
		}
	}

	public static SourceObj.Row[] sourceSnowTree = new SourceObj.Row[2] 
	{ 
		EClass.sources.objs.map[54], 
		EClass.sources.objs.map[55] 
	}; 
	private static SourceObj.Row[] _sourceSnowTree; 

	public const int DivStage = 30;

public int Convert(int tile)

cs

	public string idHarvestThing;

	public static SourceObj.Row[] SourceSnowTree 
	{ 
		get 
		{ 
			object obj = _sourceSnowTree; 
			if (obj == null) 
			{ 
				obj = new SourceObj.Row[2] 
				{ 
					EClass.sources.objs.map[54], 
					EClass.sources.objs.map[55] 
				}; 
				_sourceSnowTree = (SourceObj.Row[])obj; 
			} 
			return (SourceObj.Row[])obj; 
		} 
	} 
	public virtual RenderData RenderHarvest => source.renderData;

	public virtual int Step => 5;

ListPeopleParty โ€‹

``

cs

public class ListPeopleParty : BaseListPeople
{
	public override void OnCreate() 
	{ 
		list.sorts = new UIList.SortMode[3] 
		{ 
			UIList.SortMode.ByFeat, 
			UIList.SortMode.ByJob, 
			UIList.SortMode.ByRace 
		}; 
		list.sortMode = UIList.SortMode.ByFeat; 
	} 
	public bool CanJoinParty(Chara c)
	{
		if (!c.IsPC)

Recipe โ€‹

public virtual void Build(Chara chara, Card t, Point pos, int mat, int dir, int

cs
		EClass._map.SetBlock(pos.x, pos.z, mat, ramp, dir);
		if (tileType.IsBlockPass && pos.HasChara)
		{
			foreach (Chara item in pos.ListCharas()) 
			foreach (Chara item in pos.ListCharas().Copy()) 
			{
				chara.Kick(item, ignoreSelf: false, karmaLoss: false);
			}

TaskBuild โ€‹

public override void OnProgressComplete()

cs
	{
		bridgeHeight = 150;
	}
	Chara chara = owner; 
	recipe.Build(this);
	owner = chara; 
	resources.Clear();
	EClass.player.flags.OnBuild(recipe); 
	if (owner.IsPC) 
	{ 
		EClass.player.flags.OnBuild(recipe); 
	} 
	EClass._map.RefreshShadow(pos.x, pos.z);
	EClass._map.RefreshShadow(pos.x, pos.z - 1);
	EClass._map.RefreshFOV(pos.x, pos.z);

TaskPlow โ€‹

public class TaskPlow : TaskDesignation

cs
{
	public override CursorInfo CursorIcon => CursorSystem.Dig;

	public override bool destIgnoreConnection => false; 
	public override bool CanPressRepeat => true;

	public override int destDist

public override HitResult GetHitResult()

cs
		}
		return HitResult.Valid;
	}
	public override void OnSetOwner() 
	{ 
	} 
}

TaskPoint โ€‹

public class TaskPoint : Task, IInspect

cs

	public virtual int destDist => 0;

	public virtual bool destIgnoreConnection => false; 
	public virtual bool destIgnoreConnection => true; 

	public virtual bool isBlock => false;

public override IEnumerable<Status> Run()

cs
		while (Loop);
	}

	public override void OnSetOwner() 
	{ 
		if (parent is AI_Goto aI_Goto) 
		{ 
			aI_Goto.ignoreConnection = true; 
		} 
	} 
	public void OnInspect()
	{
	}

Trait โ€‹

public void OnBarter(bool reroll = false)

cs
		{
			AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(10));
		}
		Add("scroll_alias", 1, 0); 
		Add("scroll_biography", 1, 0); 
		Add("scroll_alias", 10, 0); 
		Add("scroll_biography", 10, 0); 
		Add("1329", 1, 0);
		break;
	}

TraitChara โ€‹

public virtual bool CanGiveRandomQuest

cs
		}
	}

	public virtual bool UseRandomAlias => false; 
	public virtual bool UseRandomName => owner.source.name == "*r"; 
	public virtual bool UseRandomAlias => owner.source.GetText("aka") == "*r"; 

	public virtual bool IsWearingPanty => EClass.pc.faction.IsWearingPanty(owner);

UIMultiList โ€‹

public void Build(UIList.SortMode m = UIList.SortMode.ByNone)

cs
{
	foreach (ListOwner owner in owners)
	{
		owner.list.sortMode = ((owner is ListPeopleParty) ? UIList.SortMode.ByFeat : m); 
		owner.list.sortMode = m; 
	}
	if (Double)
	{