Skip to content

EA 23.256 Nightly Patch 1

January 7, 2026

15 files modified.

Important Changes

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

CardFilter (1)

cs
public static FilterItem GetFilterItem(string text) 

LayerDragGrid (1)

cs
public static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state = BlessedState.Normal, int price = 0, int count = 1) 
public static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state = BlessedState.Normal, int power = 100, int price = 0, int count = 1) 

ActEffect

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

cs
	{
		if (!tc.isThing)
		{
			LayerDragGrid.CreateReconstruction(CC, state); 
			LayerDragGrid.CreateReconstruction(CC, state, power); 
			return;
		}
		if (tc.Num > 1)

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

cs
		break;
	case EffectId.StripBlessing:
	{
		List<Condition> list9 = new List<Condition>(); 
		List<Condition> list4 = new List<Condition>(); 
		foreach (Condition condition4 in TC.conditions)
		{
			if (GetBlessingDifficulty(condition4) > 0 && EClass.rnd(GetBlessingDifficulty(condition4)) == 0)
			{
				list9.Add(condition4); 
				list4.Add(condition4); 
			}
		}
		if (list9.Count == 0) 
		if (list4.Count == 0) 
		{
			CC.SayNothingHappans();
			break;

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

cs
		TC.pos.PlayEffect("holyveil");
		TC.pos.PlaySound("holyveil");
		TC.Say("unpolluted", TC);
		list9.Shuffle(); 
		list4.Shuffle(); 
		{
			foreach (Condition item4 in list9) 
			foreach (Condition item4 in list4) 
			{
				item4.Kill();
				if (CC.IsHostile(TC))

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

cs
			TC.Say((actRef.n1 == "money") ? "abStealNegateMoney" : "abStealNegate", TC);
			break;
		}
		Thing thing5 = null; 
		bool flag7 = actRef.n1 == "food"; 
		Thing thing6 = null; 
		bool flag9 = actRef.n1 == "food"; 
		if (actRef.n1 == "money")
		{
			int currency = TC.GetCurrency();
			if (currency > 0)
			{
				currency = Mathf.Clamp(EClass.rnd(currency / 10), 1, 100 + EClass.rndHalf(CC.LV * 200));
				thing5 = ThingGen.Create("money").SetNum(currency); 
				thing6 = ThingGen.Create("money").SetNum(currency); 
				TC.ModCurrency(-currency);
			}
		}
		else
		{
			Func<Thing, bool> func = (Thing t) => true;
			if (flag7) 
			if (flag9) 
			{
				func = (Thing t) => t.IsFood;
			}
			List<Thing> list5 = TC.things.List(delegate(Thing t) 
			List<Thing> list9 = TC.things.List(delegate(Thing t) 
			{
				if (t.parentCard?.trait is TraitChestMerchant || t.trait is TraitTool || t.IsThrownWeapon)
				{

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

cs
				}
				return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped && t.blessedState == BlessedState.Normal && func(t);
			}, onlyAccessible: true);
			if (list5.Count > 0) 
			if (list9.Count > 0) 
			{
				thing5 = list5.RandomItem(); 
				if (thing5.Num > 1) 
				thing6 = list9.RandomItem(); 
				if (thing6.Num > 1) 
				{
					thing5 = thing5.Split(1); 
					thing6 = thing6.Split(1); 
				}
			}
			CC.AddCooldown(6640, 200);
		}
		if (thing5 == null) 
		if (thing6 == null) 
		{
			CC.Say("abStealNothing", CC, TC);
			break;
		}
		thing5.SetInt(116, 1); 
		TC.PlaySound(thing5.material.GetSoundDrop(thing5.sourceCard)); 
		CC.Pick(thing5, msg: false); 
		CC.Say("abSteal", CC, TC, thing5.Name); 
		thing6.SetInt(116, 1); 
		TC.PlaySound(thing6.material.GetSoundDrop(thing6.sourceCard)); 
		CC.Pick(thing6, msg: false); 
		CC.Say("abSteal", CC, TC, thing6.Name); 
		if (actRef.n1 == "food")
		{
			if (CC.hunger.value != 0)
			{
				CC.InstantEat(thing5); 
				CC.InstantEat(thing6); 
			}
		}
		else

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

cs
		{
			break;
		}
		List<Thing> list4 = TC.things.List(delegate(Thing t) 
		List<Thing> list5 = TC.things.List(delegate(Thing t) 
		{
			if (!t.isEquipped || t.blessedState == BlessedState.Doomed || t.IsToolbelt)
			{

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

cs
			}
			return (t.blessedState < BlessedState.Blessed || EClass.rnd(10) == 0) ? true : false;
		});
		if (list4.Count == 0) 
		if (list5.Count == 0) 
		{
			CC.SayNothingHappans();
			break;
		}
		Thing thing4 = list4.RandomItem(); 
		Thing thing4 = list5.RandomItem(); 
		TC.Say("curse_hit", TC, thing4);
		thing4.SetBlessedState((thing4.blessedState == BlessedState.Cursed) ? BlessedState.Doomed : BlessedState.Cursed);
		LayerInventory.SetDirty(thing4);

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

cs
				text3 = text4;
			}
		}
		Condition condition2 = Condition.Create(text3, power, delegate(Condition con) 
		Condition condition = Condition.Create(text3, power, delegate(Condition con) 
		{
			if (!actRef.aliasEle.IsEmpty())
			{
				con.SetElement(EClass.sources.elements.alias[actRef.aliasEle].id);
			}
		});
		condition2.isPerfume = TC.IsPC && actRef.isPerfume; 
		Condition condition3 = TC.AddCondition(condition2); 
		if (condition3 != null && condition3.isPerfume) 
		condition.isPerfume = TC.IsPC && actRef.isPerfume; 
		Condition condition2 = TC.AddCondition(condition); 
		if (condition2 != null && condition2.isPerfume) 
		{
			condition3.value = 3; 
			condition2.value = 3; 
			Msg.Say("perfume", TC);
		}
		if (!text4.IsEmpty())

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

cs
	{
		EClass.game.religions.Trickery.Talk("ability");
		bool hex = CC.IsHostile(TC);
		List<SourceStat.Row> list6 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex ? "Debuff" : "Buff")).ToList(); 
		List<SourceStat.Row> list7 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex ? "Debuff" : "Buff")).ToList(); 
		int power2 = power;
		for (int k = 0; k < 4 + EClass.rnd(2); k++)
		{
			SourceStat.Row row2 = list6.RandomItem(); 
			list6.Remove(row2); 
			SourceStat.Row row2 = list7.RandomItem(); 
			list7.Remove(row2); 
			Proc(hex ? EffectId.DebuffKizuami : EffectId.Buff, CC, TC, power2, new ActRef
			{
				n1 = row2.alias

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

cs
			power = power * 2 / 3;
		}
		int a2 = power;
		int num7 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition = TC.GetCondition<ConHolyVeil>(); 
		if (condition != null) 
		int num10 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition3 = TC.GetCondition<ConHolyVeil>(); 
		if (condition3 != null) 
		{
			num7 += condition.power * 5; 
			num10 += condition3.power * 5; 
		}
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num7 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num10 / 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.bio.SetGender(gender2);
		tc.Say("transGender", tc, Gender.Name(tc.bio.gender));
		tc.Talk("tail");
		int age = tc.bio.GetAge(tc.Chara); 
		if (blessed && age > 1) 
		int age3 = tc.bio.GetAge(tc.Chara); 
		if (blessed && age3 > 1) 
		{
			tc.Say("ageDown", tc);
			tc.bio.SetAge(tc.Chara, age - 1); 
			tc.bio.SetAge(tc.Chara, age3 - 1); 
		}
		else if (flag)
		{
			tc.Say("ageUp", tc);
			tc.bio.SetAge(tc.Chara, age + 1); 
			tc.bio.SetAge(tc.Chara, age3 + 1); 
		}
		break;
	}

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

cs
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int num8 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num8 == 0) 
		int num11 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num11 == 0) 
		{
			num8 = tc.GetInt(118); 
			if (num8 == 0) 
			num11 = tc.GetInt(118); 
			if (num11 == 0) 
			{
				num8 = EClass.game.seed + tc.uid; 
				num11 = EClass.game.seed + tc.uid; 
			}
			num8++; 
			num11++; 
		}
		tc.Say("transBlood", tc);
		tc.Talk("tail");
		tc.c_bloodData = null;
		tc.SetInt(118, num8); 
		tc.SetInt(118, num11); 
		break;
	}
	case EffectId.Youth:
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int age3 = tc.bio.GetAge(tc.Chara); 
		if (!flag && age3 <= 0) 
		int age = tc.bio.GetAge(tc.Chara); 
		if (!flag && age <= 0) 
		{
			tc.SayNothingHappans();
			break;
		}
		age3 = Mathf.Max(0, age3 * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0); 
		age = Mathf.Max(0, age * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0); 
		tc.Say(flag ? "ageUp" : "ageDown", tc);
		tc.bio.SetAge(tc.Chara, age3); 
		tc.bio.SetAge(tc.Chara, age); 
		break;
	}
	case EffectId.EternalYouth:

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

cs
		{
			EClass.game.religions.Wind.Talk("ability");
		}
		if (flag) 
		{ 
			if (id == EffectId.BuffStats) 
			{ 
				id = EffectId.DebuffStats; 
			} 
			else if (id == EffectId.DebuffStats) 
			{ 
				id = EffectId.BuffStats; 
			} 
		} 
		if (power < 0 || id == EffectId.DebuffStats)
		{
			power = Mathf.Abs(power);

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

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

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

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

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

cs
	case EffectId.EnhanceBodyGreat:
	case EffectId.EnhanceMindGreat:
	{
		bool flag8 = id == EffectId.EnhanceBody || id == EffectId.EnhanceBodyGreat; 
		bool flag7 = id == EffectId.EnhanceBody || id == EffectId.EnhanceBodyGreat; 
		bool mind = id == EffectId.EnhanceMind || id == EffectId.EnhanceMindGreat;
		if (id != EffectId.EnhanceBody && id != EffectId.EnhanceMind)
		{
			EClass.rnd(4);
		}
		TC.Say(flag8 ? "enhanceBody" : "enhanceMind", TC); 
		TC.Say(flag7 ? "enhanceBody" : "enhanceMind", TC); 
		TC.PlayEffect("buff");
		TC.PlaySound("buff");
		TC.EnhanceTempElements(power, flag8, mind, onlyRenew: true); 
		TC.EnhanceTempElements(power, flag7, mind, onlyRenew: true); 
		break;
	}
	case EffectId.RestoreBody:
	case EffectId.RestoreMind:
	{
		bool flag9 = id == EffectId.RestoreBody; 
		bool flag8 = id == EffectId.RestoreBody; 
		if (flag)
		{
			Redirect(flag9 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef)); 
			Redirect(flag8 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef)); 
			break;
		}
		TC.Say(flag9 ? "restoreBody" : "restoreMind", TC); 
		TC.Say(flag8 ? "restoreBody" : "restoreMind", TC); 
		TC.PlaySound("heal");
		TC.PlayEffect("heal");
		TC.CureHost(flag9 ? CureType.CureBody : CureType.CureMind, power, state); 
		TC.CureHost(flag8 ? CureType.CureBody : CureType.CureMind, power, state); 
		if (blessed)
		{
			Redirect(flag9 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef)); 
			Redirect(flag8 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef)); 
		}
		break;
	}

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

cs
		{
			EClass.game.religions.Healing.Talk("ability");
		}
		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(); 
		int num8 = 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)
		{
			num10 = num10 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
			num8 = num8 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
		}
		if (flag)
		{
			TC.DamageHP(num10 / 2, 919, power); 
			TC.DamageHP(num8 / 2, 919, power); 
			break;
		}
		TC.HealHPHost(num10, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.HealHPHost(num8, (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 num9 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num9, AttackSource.None, CC); 
			int num7 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num7, AttackSource.None, CC); 
		}
		else if (TC.IsPC)
		{

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

cs
		{
			power /= 4;
		}
		List<Thing> list7 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false); 
		if (list7.Count != 0) 
		List<Thing> list6 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false); 
		if (list6.Count != 0) 
		{
			Thing thing6 = list7.RandomItem(); 
			Thing thing5 = list6.RandomItem(); 
			TC.Say("acid_hit", TC);
			if (thing6.isAcidproof) 
			if (thing5.isAcidproof) 
			{
				TC.Say("acid_nullify", thing6); 
				TC.Say("acid_nullify", thing5); 
			}
			else if (thing6.encLV > -5) 
			else if (thing5.encLV > -5) 
			{
				TC.Say("acid_rust", TC, thing6); 
				thing6.ModEncLv(-1); 
				LayerInventory.SetDirty(thing6); 
				TC.Say("acid_rust", TC, thing5); 
				thing5.ModEncLv(-1); 
				LayerInventory.SetDirty(thing5); 
			}
			if (TC.IsPCParty)
			{

CardFilter

public class FilterItem

cs
	{
		public bool exclude;

		public bool supersede; 
		public string name;
	}

public bool Pass(CardRow source)

cs
	for (int i = 0; i < tags.Count; i++)
	{
		FilterItem filterItem = tags[i];
		if (filterItem.exclude) 
		if (filterItem.supersede) 
		{ 
			if (ContainsTag(source, filterItem.name)) 
			{ 
				flag = true; 
				break; 
			} 
		} 
		else if (filterItem.exclude) 
		{
			if (ContainsTag(source, filterItem.name))
			{
				return false;
			}
			continue; 
		}
		flag2 = true; 
		if (!flag && ContainsTag(source, filterItem.name)) 
		else
		{
			flag = true; 
			flag2 = true; 
			if (!flag && ContainsTag(source, filterItem.name)) 
			{ 
				flag = true; 
			} 
		}
	}
	if (flag2 && !flag)

public bool Pass(CardRow source)

cs
	for (int j = 0; j < filters.Count; j++)
	{
		FilterItem filterItem2 = filters[j];
		if (filterItem2.supersede) 
		{ 
			break; 
		} 
		if (filterItem2.exclude)
		{
			if (source.filter.Contains(filterItem2.name))

public bool Pass(CardRow source)

cs

	public void BuildList(List<FilterItem> list, string[] strs)
	{
		if (strs != null) 
		if (strs == null) 
		{ 
			return; 
		} 
		foreach (string text in strs) 
		{
			foreach (string text in strs) 
			if (text.Length != 0) 
			{
				list.Add(GetFilterItem(text)); 
				FilterItem filterItem = new FilterItem(); 
				_ = text[0]; 
				switch (text[0]) 
				{ 
				case '*': 
					filterItem.supersede = true; 
					filterItem.name = text.Substring(1); 
					break; 
				case '-': 
					filterItem.exclude = true; 
					filterItem.name = text.Substring(1); 
					break; 
				default: 
					filterItem.name = text; 
					break; 
				} 
				list.Add(filterItem); 
			}
		}
	}
	public static FilterItem GetFilterItem(string text) 
	{ 
		bool flag = text.StartsWith("-"); 
		return new FilterItem
		{ 
			exclude = flag, 
			name = (flag ? text.Substring(1) : text) 
		}; 
	} 
}

Chara

public void RefreshSpeed(Element.BonusInfo info = null)

cs
		info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
	}
	int num = 100;
	if (EClass._zone.map != null && EClass._zone.IsUnderwater) 
	if (EClass._zone.map != null && (EClass._zone.IsUnderwater || (base.Cell.IsTopWater && !base.Cell.isFloating))) 
	{
		int num2 = Evalue(200);
		num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, 0, 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25); 
		int num3 = Evalue(1252); 
		num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, (num3 > 0) ? 50 : 0, 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25); 
		if (info != null && num != 100)
		{
			info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
		}
		if (num3 > 0) 
		{ 
			num += num3 * 20; 
			info?.AddFix(num3 * 20, EClass.sources.elements.map[1252].GetName().ToTitleCase()); 
		} 
	}
	if (IsPCFaction)
	{

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
			EClass.pc.SetPCCState(PCCState.ShoesOff);
		}
	}
	bool flag6 = flag4 || EClass._zone.IsUnderwater; 
	if (wasInWater != flag6) 
	{ 
		wasInWater = flag6; 
		RefreshSpeed(); 
	} 
	hasMovedThisTurn = true;
	return MoveResult.Success;
}

public bool IsHostile(Chara c)

cs
				return true;
			}
		}
		if (id == "unicorn" && c.HasElement(1216)) 
		{ 
			return true; 
		} 
		return false;
	}

FEAT

public class FEAT

cs

	public const int featDismantler = 1661;

	public const int featComat = 1750; 
	public const int featSpike = 1221; 

	public const int featFate = 1220;

public class FEAT

cs

	public const int featHealer = 1422;

	public const int featSpike = 1221; 
	public const int featGod_harvest1 = 1325; 
	public const int featFarmer = 1403; 
	public const int featArcher = 1404; 
	public const int featPianist = 1405; 
	public const int featTourist = 1406; 
	public const int featPaladin = 1407; 
	public const int featPaladin2 = 1408; 
	public const int featBoost = 1409; 
	public const int featWizard = 1402; 
	public const int featReboot = 1410; 
	public const int featLuckyCat = 1412; 
	public const int featFairysan = 1413; 
	public const int featWhiteVixen = 1414; 
	public const int featFoxMaid = 1415; 
	public const int featInquisitor = 1416; 
	public const int featWitch = 1417; 
	public const int featSwordsage = 1418; 
	public const int featEarthStrength = 1411; 
	public const int featThief = 1401; 
	public const int featWarrior = 1400; 
	public const int featComat = 1750; 

	public const int featGod_strife1 = 1355; 
	public const int featExecutioner = 1420; 

	public const int featAshborn = 1251;

	public const int featAquatic = 1252; 
	public const int featGoodKarma = 1270;

	public const int featBadKarma = 1271;

public class FEAT

cs

	public const int featGod_healing1 = 1320;

	public const int featMiscreation = 1248; 
	public const int featGod_luck1 = 1330;

	public const int featGod_harmony1 = 1335;

public class FEAT

cs

	public const int featGod_moonshadow1 = 1350;

	public const int featMilitant = 1419; 
	public const int featGod_strife1 = 1355; 
	public const int featWarrior = 1400; 
	public const int featThief = 1401; 
	public const int featWizard = 1402; 
	public const int featFarmer = 1403; 
	public const int featArcher = 1404; 

	public const int featVampire = 1250;

	public const int featExecutioner = 1420; 
	public const int featBloodBond = 1249; 

	public const int featPegasus = 1246; 
	public const int featMiscreation = 1248; 
	public const int featLibra = 1247; 

	public const int featBaby = 1232;

public class FEAT

cs

	public const int featShiva = 1224;

	public const int featLibra = 1247; 
	public const int featCosmicHorror = 1233;

	public const int featBloodBond = 1249; 
	public const int featPianist = 1405; 

	public const int featLightEater = 1235; 
	public const int featHeavyEater = 1234; 

	public const int featSevenSense = 1245; 
	public const int featNorland = 1236; 

	public const int featCentaur = 1244; 
	public const int featRoran = 1237; 

	public const int featEternalYouth = 1243; 
	public const int featElder = 1238; 

	public const int featNorland = 1236; 
	public const int featDemon = 1239; 

	public const int featGeneSlot = 1242; 
	public const int featMassSummoner = 1240; 

	public const int featMeatCushion = 1241;

	public const int featMassSummoner = 1240; 
	public const int featGeneSlot = 1242; 

	public const int featDemon = 1239; 
	public const int featEternalYouth = 1243; 

	public const int featElder = 1238; 
	public const int featCentaur = 1244; 

	public const int featRoran = 1237; 
	public const int featSevenSense = 1245; 

	public const int featHeavyEater = 1234; 
	public const int featPegasus = 1246; 
	public const int featLightEater = 1235; 
	public const int featTourist = 1406; 
	public const int featGod_harvest1 = 1325; 
	public const int featPaladin2 = 1408; 
	public const int featMilitant = 1419; 
	public const int featSwordsage = 1418; 
	public const int featWitch = 1417; 
	public const int featInquisitor = 1416; 
	public const int featFoxMaid = 1415; 
	public const int featPaladin = 1407; 
	public const int featFairysan = 1413; 
	public const int featBoost = 1409; 
	public const int featReboot = 1410; 
	public const int featWhiteVixen = 1414; 
	public const int featLuckyCat = 1412; 
	public const int featEarthStrength = 1411; 

	public static readonly int[] IDS = new int[136] 
	public static readonly int[] IDS = new int[137] 
	{
		1223, 1650, 1649, 1648, 1647, 1646, 1645, 1644, 1643, 1642,
		1641, 1640, 1636, 1635, 1634, 1651, 1633, 1631, 1630, 1629,

public class FEAT

cs
		1611, 1632, 1652, 1653, 1654, 1222, 1200, 1201, 1202, 1203,
		1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
		1214, 1215, 1655, 1656, 1657, 1658, 1659, 1660, 1610, 1661,
		1750, 1220, 1219, 1218, 1217, 1216, 1662, 1422, 1221, 1325, 
		1403, 1404, 1405, 1406, 1407, 1408, 1409, 1402, 1410, 1412, 
		1413, 1414, 1415, 1416, 1417, 1418, 1411, 1401, 1400, 1355, 
		1251, 1270, 1271, 1272, 1273, 1290, 1300, 1305, 1310, 1315, 
		1320, 1248, 1330, 1335, 1340, 1345, 1350, 1419, 1250, 1420, 
		1246, 1232, 1231, 1421, 1230, 1229, 1228, 1227, 1226, 1225, 
		1224, 1247, 1233, 1249, 1235, 1245, 1244, 1243, 1236, 1242, 
		1241, 1240, 1239, 1238, 1237, 1234
		1221, 1220, 1219, 1218, 1217, 1216, 1662, 1422, 1750, 1420, 
		1251, 1252, 1270, 1271, 1272, 1273, 1290, 1300, 1305, 1310, 
		1315, 1320, 1330, 1335, 1340, 1345, 1350, 1355, 1400, 1401, 
		1402, 1403, 1404, 1250, 1249, 1248, 1247, 1232, 1231, 1421, 
		1230, 1229, 1228, 1227, 1226, 1225, 1224, 1233, 1405, 1234, 
		1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 
		1246, 1235, 1406, 1325, 1408, 1419, 1418, 1417, 1416, 1415, 
		1407, 1413, 1409, 1410, 1414, 1412, 1411
	};
}
public class Feat : Element

FOOD

public class FOOD

cs
public class FOOD
{
	public const int food_CHA = 700; 
	public const int food_cat = 701; 

	public const int food_god = 758; 
	public const int food_poison = 702; 

	public const int justcooked = 757; 
	public const int food_love = 703; 

	public const int food_blood = 710;

	public const int food_undead = 709; 
	public const int gainWeight = 705; 

	public const int food_human = 708; 
	public const int loseWeight = 706; 

	public const int kirimi = 707; 
	public const int food_CHA = 700; 

	public const int loseWeight = 706; 
	public const int kirimi = 707; 

	public const int food_bug = 704; 
	public const int food_human = 708; 

	public const int food_love = 703; 
	public const int food_undead = 709; 

	public const int food_poison = 702; 
	public const int food_bug = 704; 

	public const int food_cat = 701; 
	public const int food_god = 758; 

	public const int creativeDish = 764;

	public const int gainWeight = 705; 
	public const int justcooked = 757; 

	public static readonly int[] IDS = new int[14]
	{
		700, 758, 757, 710, 709, 708, 707, 706, 704, 703, 
		702, 701, 764, 705
		701, 702, 703, 710, 705, 706, 700, 707, 708, 709, 
		704, 758, 764, 757
	};
}

InvOwnerEffect

public class InvOwnerEffect : InvOwnerDraglet

cs

	public bool superior;

	public int power = 100; 
	public InvOwnerEffect(Card owner = null, Card container = null, CurrencyType _currency = CurrencyType.Money)
		: base(owner, container, _currency)
	{

InvOwnerReconstruction

public override bool ShouldShowGuide(Thing t)

cs

	public override void _OnProcess(Thing t)
	{
		ActEffect.Proc(EffectId.Reconstruction, 100, state, t.GetRootCard(), t); 
		ActEffect.Proc(EffectId.Reconstruction, power, state, t.GetRootCard(), t); 
	}
}

LayerDragGrid

public static LayerDragGrid CreateLighten(Chara cc, BlessedState state = Blessed

cs
		});
	}

	public static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state = BlessedState.Normal, int price = 0, int count = 1) 
	public static LayerDragGrid CreateReconstruction(Chara cc, BlessedState state = BlessedState.Normal, int power = 100, int price = 0, int count = 1) 
	{
		return TryProc(cc, new InvOwnerReconstruction
		{
			state = state,
			price = price,
			count = count 
			count = count, 
			power = power 
		});
	}
}

LayerPeople

public static LayerPeople CreateBed(TraitBed bed)

cs
	});
	layerPeople.multi.AddOwner(1, new ListPeopleBed
	{
		textHeader = "listBedHolder".lang(bed.MaxHolders.ToString() ?? ""), 
		funcHeader = () => "listBedHolder".lang(bed.CountHolders() + " / " + bed.MaxHolders), 
		bed = bed
	});
	ELayer.ui.AddLayer(layerPeople);

ListOwner

using System;

cs
using System; 
public class ListOwner<T1, T2> : ListOwner
{
	public virtual void OnClick(T1 a, T2 b)

public class ListOwner : EClass

cs

	public int index;

	public Func<string> funcHeader; 
	public ListOwner Main
	{
		get

public virtual string TextHeader

cs
	{
		get
		{
			if (!textHeader.IsEmpty()) 
			if (funcHeader == null) 
			{
				return textHeader.lang(); 
				if (!textHeader.IsEmpty()) 
				{ 
					return textHeader.lang(); 
				} 
				return ""; 
			}
			return ""; 
			return funcHeader(); 
		}
	}

public virtual void OnSwitchContent()

cs
		{
			window.SetTitles(IdTitle, IdHeaderRow);
		}
		if (!textHeader.IsEmpty()) 
		RefreshCaption(); 
	} 
	public void RefreshCaption() 
	{ 
		if (!TextHeader.IsEmpty()) 
		{
			window.SetCaption(TextHeader);
		}

public void MoveToOther(object c)

cs
		other.List();
		list.RebuildLayoutTo(layer);
		SE.Resource();
		RefreshCaption(); 
		other.RefreshCaption(); 
	}
}

MUTATION

public class MUTATION

cs
public class MUTATION
{
	public const int mutationSkin = 1510; 
	public const int etherPoisonHand = 1565; 
	public const int mutationColdN = 1527; 
	public const int mutationCold = 1526; 
	public const int mutationBrainN = 1525; 
	public const int mutationSpeedN = 1519; 

	public const int mutationBrain = 1524; 
	public const int mutationSpeed = 1518; 

	public const int mutationCha = 1522;

	public const int mutationStrN = 1521; 
	public const int mutationStr = 1520; 
	public const int mutationLightning = 1528; 
	public const int mutationSpeedN = 1519; 
	public const int mutationRegenN = 1517; 
	public const int mutationRegen = 1516;

	public const int mutationDexN = 1515;

public class MUTATION

cs

	public const int mutationSkinN = 1511;

	public const int mutationSpeed = 1518; 
	public const int mutationSkin = 1510; 

	public const int mutationLightningN = 1529; 
	public const int mutationStr = 1520; 
	public const int mutationStrN = 1521; 
	public const int mutationRegenN = 1517; 

	public const int mutationChaN = 1523;

	public const int mutationBodyN = 1531; 
	public const int mutationBrainN = 1525; 
	public const int etherPoisonHand = 1565; 

	public const int etherManaBattery = 1564;

	public const int etherProvoke = 1563;

	public const int mutationBody = 1530; 
	public const int etherArmor = 1562; 

	public const int etherStupid = 1561;

	public const int etherWeak = 1560; 
	public const int mutationBrain = 1524; 

	public const int etherAddict = 1559;

public class MUTATION

cs

	public const int etherViolence = 1556;

	public const int etherArmor = 1562; 
	public const int etherNeck = 1555; 

	public const int etherWing = 1554;

	public const int etherEye = 1553; 
	public const int etherWeak = 1560; 

	public const int etherFeet = 1552;

	public const int etherUgly = 1551; 
	public const int etherEye = 1553; 

	public const int etherGravity = 1550; 
	public const int mutationCold = 1526; 

	public const int mutationHairN = 1533; 
	public const int mutationColdN = 1527; 
	public const int mutationLightningN = 1529; 
	public const int mutationBody = 1530; 
	public const int mutationLightning = 1528; 

	public const int mutationHair = 1532;

	public const int etherNeck = 1555; 
	public const int mutationHairN = 1533; 
	public const int etherGravity = 1550; 
	public const int etherUgly = 1551; 
	public const int mutationBodyN = 1531; 

	public static readonly int[] IDS = new int[40]
	{
		1510, 1565, 1527, 1526, 1525, 1524, 1522, 1521, 1520, 1528, 
		1519, 1517, 1516, 1515, 1514, 1513, 1512, 1511, 1518, 1529, 
		1523, 1531, 1564, 1563, 1530, 1561, 1560, 1559, 1558, 1557, 
		1556, 1562, 1554, 1553, 1552, 1551, 1550, 1533, 1532, 1555
		1519, 1518, 1522, 1516, 1515, 1514, 1513, 1512, 1511, 1510, 
		1520, 1521, 1517, 1523, 1525, 1565, 1564, 1563, 1562, 1561, 
		1524, 1559, 1558, 1557, 1556, 1555, 1554, 1560, 1552, 1553, 
		1526, 1527, 1529, 1530, 1528, 1532, 1533, 1550, 1551, 1531
	};
}
public class Mutation : Feat

POLICY

``

cs

public class POLICY
{
	public const int legendary_heirloom = 2821; 
	public const int store_premium = 2817;

	public const int license_food = 2818;

public class POLICY

cs

	public const int license_general = 2820;

	public const int legendary_heirloom = 2821; 
	public const int celeb = 2822;

	public const int egg_fan = 2826; 
	public const int license_slaver = 2828; 

	public const int license_stolen = 2824;

	public const int milk_fan = 2825;

	public const int breed_season = 2827; 
	public const int egg_fan = 2826; 

	public const int license_slaver = 2828; 
	public const int breed_season = 2827; 

	public const int store_ripoff = 2816;

public class POLICY

cs

	public static readonly int[] IDS = new int[51]
	{
		2817, 2818, 2819, 2820, 2821, 2822, 2826, 2824, 2825, 2827, 
		2828, 2816, 2823, 2815, 2702, 2813, 2514, 2513, 2505, 2814, 
		2821, 2817, 2818, 2819, 2820, 2822, 2828, 2824, 2825, 2826, 
		2827, 2816, 2823, 2815, 2702, 2813, 2514, 2513, 2505, 2814, 
		2500, 2501, 2512, 2502, 2503, 2511, 2510, 2509, 2508, 2507,
		2506, 2515, 2516, 2504, 2701, 2706, 2707, 2705, 2700, 2709,
		2710, 2711, 2708, 2715, 2800, 2810, 2811, 2812, 2704, 2703,

TraitBed

public bool HasHolder()

cs
		return c_charaList.list.Count > 0;
	}

	public int CountHolders() 
	{ 
		return owner.c_charaList?.Get().Count ?? 0; 
	} 
	public bool CanAssign(Chara c)
	{
		CharaList c_charaList = owner.c_charaList;

TraitShackle

public class TraitShackle : Trait

cs

	public override bool CanBeHeld => !IsRestraining();

	public override bool CanBeDisassembled => !IsRestraining(); 
	public override string LangUse => "ActRestrain";

	public virtual bool AllowTraining => true;

Zone

public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)

cs
	{
		switch (chara.id)
		{
		case "unicorn": 
			if (EClass.pc.HasElement(1216)) 
			{ 
				chara.SetHostility(Hostility.Enemy); 
			} 
			break; 
		case "santa":
		case "silverwolf":
		case "twintail":