Skip to content

EA 23.174 Nightly

July 28, 2025

11 files modified.

Important Changes

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

Card (2)

cs
public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, AttackSourceSub attackSourceSub = AttackSourceSub.None) 
public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null) 
cs
public virtual void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None) 
public virtual void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None, Chara originalTarget = null) 

Chara (1)

cs
public override void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None) 
public override void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None, Chara originalTarget = null) 

ActEffect

@@ -2285,11 +2285,13 @@ public static void LoveMiracle(Chara tc, Chara c, int power, bool plus = false,

cs
	{
		if (!plus && EClass.rnd(2) == 0)
		{
			tc.MakeMilk(effect: true, 1, addToZone: true, state); 
			Thing c2 = tc.MakeMilk(effect: true, 1, addToZone: true, state); 
			tc.Say("item_drop", c2); 
		}
		else
		{
			tc.MakeEgg(effect: true, 1, addToZone: true, plus ? 3 : 20, state); 
			Thing c3 = tc.MakeEgg(effect: true, 1, addToZone: true, plus ? 3 : 20, state); 
			tc.Say("item_drop", c3); 
		}
	}
}

Card

@@ -3914,13 +3914,13 @@ public void DamageHP(int dmg, AttackSource attackSource = AttackSource.None, Car

cs
		DamageHP(dmg, 0, 0, attackSource, origin);
	}

	public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, AttackSourceSub attackSourceSub = AttackSourceSub.None) 
	public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null) 
	{
		if (hp < 0)
		{
			return;
		}
		bool flag = attackSourceSub == AttackSourceSub.FleshWall; 
		bool flag = originalTarget != null; 
		if (isChara && !HasElement(1241))
		{
			AttackSource attackSource2 = attackSource;

@@ -3929,9 +3929,10 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
			foreach (Chara chara3 in EClass._map.charas)
			{
				int num = chara3.Evalue(1241);
				if (num != 0 && !chara3.IsDisabled && !chara3.isRestrained && !chara3.IsDeadOrSleeping && chara3 != this && !chara3.IsHostile(Chara) && chara3.Dist(this) <= num) 
				if (num != 0 && !chara3.IsDisabled && !chara3.isRestrained && !chara3.IsDeadOrSleeping && chara3 != this && !chara3.IsHostile(Chara) && (!IsPCFactionOrMinion || chara3.IsPCFactionOrMinion) && chara3.Dist(this) <= num) 
				{
					chara3.DamageHP(dmg, ele, eleP, attackSource, origin, showEffect, weapon, AttackSourceSub.FleshWall); 
					Say("wall_flesh", chara3, this); 
					chara3.DamageHP(dmg, ele, eleP, attackSource, origin, showEffect, weapon, Chara); 
					return;
				}
			}

@@ -4204,7 +4205,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
					if (EClass.player.invlunerable)
					{
						EvadeDeath();
						goto IL_0cdf; 
						goto IL_0d0e; 
					}
				}
				if (IsPC && Evalue(1220) > 0 && Chara.stamina.value >= Chara.stamina.max / 2)

@@ -4216,8 +4217,8 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
			}
		}
	}
	goto IL_0cdf; 
	IL_0cdf: 
	goto IL_0d0e; 
	IL_0d0e: 
	if (trait.CanBeAttacked)
	{
		renderer.PlayAnime(AnimeID.HitObj);

@@ -4230,7 +4231,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
	Chara target;
	if (hp < 0)
	{
		if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null && (origin.isSynced || IsPC)) 
		if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null && originalTarget == null && (origin.isSynced || IsPC)) 
		{
			string text = "";
			if (IsPC && Lang.setting.combatTextStyle == 0)

@@ -4321,7 +4322,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		}
		if (!isDestroyed)
		{
			Die(e, origin, attackSource); 
			Die(e, origin, attackSource, originalTarget); 
			if (trait.CanBeSmashedToDeath && !EClass._zone.IsUserZone)
			{
				Rand.SetSeed(uid);

@@ -4395,7 +4396,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		}
		Msg.SetColor();
	}
	else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null) 
	else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null && originalTarget == null) 
	{
		(IsPC ? EClass.pc : origin).Say("dmgMelee" + num8 + (IsPC ? "pc" : ""), origin, this);
	}

@@ -4735,7 +4736,7 @@ void ProcAbsorb()

cs
		}
	}

	public virtual void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None) 
	public virtual void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None, Chara originalTarget = null) 
	{
		Card rootCard = GetRootCard();
		Point _pos = rootCard?.pos ?? pos;

Chara

@@ -931,7 +931,7 @@ public bool IsWealthy

cs

	public FactionBranch homeBranch => homeZone?.branch;

	public int MaxGeneSlot => race.geneCap - (HasElement(1237) ? 2 : 0); 
	public int MaxGeneSlot => race.geneCap - (HasElement(1237) ? 2 : 0) + Evalue(1242); 

	public int CurrentGeneSlot
	{

@@ -4900,7 +4900,7 @@ public void Vomit()

cs
		hunger.Mod(30);
	}

	public override void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None) 
	public override void Die(Element e = null, Card origin = null, AttackSource attackSource = AttackSource.None, Chara originalTarget = null) 
	{
		combatCount = 0;
		if (isDead || host != null)

@@ -4996,7 +4996,7 @@ public override void Die(Element e = null, Card origin = null, AttackSource atta

cs
		}
		else
		{
			if (origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range)) 
			if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range)) 
			{
				Msg.Say(text, this, "", text2);
			}

FACTION

@@ -36,7 +36,7 @@ public class FACTION

cs

	public const int fMoral = 2203;

	public const int fSoil = 2200; 
	public const int fElec = 2201; 

	public const int fHeirloom = 2120;

@@ -108,16 +108,16 @@ public class FACTION

cs

	public const int fConstruction = 2003;

	public const int fElec = 2201; 
	public const int fSoil = 2200; 

	public static readonly int[] IDS = new int[53]
	{
		3600, 3601, 3602, 3603, 3605, 3606, 3500, 3700, 3701, 3604,
		3702, 2202, 2206, 2205, 2204, 2203, 2200, 2120, 2119, 2118, 
		3702, 2202, 2206, 2205, 2204, 2203, 2201, 2120, 2119, 2118, 
		3703, 2116, 2117, 2207, 3704, 3803, 3706, 4006, 2115, 4005,
		4004, 4003, 4002, 4001, 4000, 3900, 3805, 3804, 3802, 3801,
		3800, 3784, 3783, 3782, 3781, 3780, 3710, 3709, 3708, 3707,
		3705, 2003, 2201
		3705, 2003, 2200
	};
}
public class Faction : EClass

FEAT

@@ -29,9 +29,9 @@ public class FEAT

cs

	public const int featHardy = 1630;

	public const int featSPD = 1629; 
	public const int featParty = 1645; 

	public const int featLuck = 1628; 
	public const int featSPD = 1629; 

	public const int featCHA = 1627;

@@ -55,11 +55,13 @@ public class FEAT

cs

	public const int featLife = 1610;

	public const int featParty = 1645; 
	public const int featHealer = 1422; 

	public const int featLonelySoul = 1646; 
	public const int featLuck = 1628; 

	public const int featSummoner = 1647; 
	public const int featManaMeat = 1421; 
	public const int featLonelySoul = 1646; 

	public const int featRapidMagic = 1648;

@@ -87,7 +89,7 @@ public class FEAT

cs

	public const int featUndead = 1210;

	public const int featHealer = 1422; 
	public const int featSummoner = 1647; 

	public const int featSnail = 1211;

@@ -117,14 +119,16 @@ public class FEAT

cs

	public const int featFairyResist = 1212;

	public const int featManaMeat = 1421; 
	public const int featExecutioner = 1420; 

	public const int featElea = 1213;

	public const int featMilitant = 1419; 
	public const int featSwordsage = 1418; 

	public const int featMeatCushion = 1241;

	public const int featGeneSlot = 1242; 
	public const int featGod_element1 = 1300;

	public const int featGod_earth1 = 1305;

@@ -137,7 +141,7 @@ public class FEAT

cs

	public const int featGod_harvest1 = 1325;

	public const int featGod_luck1 = 1330; 
	public const int featGod_harmony1 = 1335; 

	public const int featGod_oblivion1 = 1340;

@@ -163,17 +167,15 @@ public class FEAT

cs

	public const int featPaladin = 1407;

	public const int featPaladin2 = 1408; 
	public const int featMassSummoner = 1240;

	public const int featBoost = 1409; 
	public const int featPaladin2 = 1408; 

	public const int featDemon = 1239;

	public const int featRoran = 1237;

	public const int featExecutioner = 1420; 
	public const int featMilitant = 1419; 

	public const int featMetal = 1218;

@@ -217,40 +219,40 @@ public class FEAT

cs

	public const int featElder = 1238;

	public const int featReboot = 1410; 
	public const int featBoost = 1409; 

	public const int featGod_harmony1 = 1335; 
	public const int featGod_luck1 = 1330; 

	public const int featLuckyCat = 1412; 
	public const int featEarthStrength = 1411; 

	public const int featFairysan = 1413; 
	public const int featWitch = 1417; 

	public const int featWhiteVixen = 1414; 
	public const int featInquisitor = 1416; 

	public const int featFoxMaid = 1415;

	public const int featInquisitor = 1416; 
	public const int featReboot = 1410; 

	public const int featWitch = 1417; 
	public const int featFairysan = 1413; 

	public const int featSwordsage = 1418; 
	public const int featLuckyCat = 1412; 

	public const int featEarthStrength = 1411; 
	public const int featWhiteVixen = 1414; 

	public static readonly int[] IDS = new int[117] 
	public static readonly int[] IDS = new int[118] 
	{
		1216, 1644, 1643, 1642, 1641, 1640, 1636, 1635, 1634, 1633,
		1632, 1631, 1630, 1629, 1628, 1627, 1626, 1625, 1624, 1623, 
		1622, 1621, 1620, 1612, 1611, 1610, 1645, 1646, 1647, 1648, 
		1215, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 
		1209, 1210, 1422, 1211, 1214, 1659, 1658, 1657, 1656, 1655, 
		1654, 1653, 1652, 1651, 1650, 1649, 1212, 1421, 1213, 1419, 
		1241, 1300, 1305, 1310, 1315, 1320, 1325, 1330, 1340, 1345, 
		1350, 1355, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 
		1408, 1240, 1409, 1239, 1237, 1420, 1218, 1219, 1220, 1221, 
		1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1217, 
		1231, 1232, 1233, 1234, 1235, 1236, 1238, 1410, 1335, 1412, 
		1413, 1414, 1415, 1416, 1417, 1418, 1411
		1632, 1631, 1630, 1645, 1629, 1627, 1626, 1625, 1624, 1623, 
		1622, 1621, 1620, 1612, 1611, 1610, 1422, 1628, 1421, 1646, 
		1648, 1215, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 
		1208, 1209, 1210, 1647, 1211, 1214, 1659, 1658, 1657, 1656, 
		1655, 1654, 1653, 1652, 1651, 1650, 1649, 1212, 1420, 1213, 
		1418, 1241, 1242, 1300, 1305, 1310, 1315, 1320, 1325, 1335, 
		1340, 1345, 1350, 1355, 1400, 1401, 1402, 1403, 1404, 1405, 
		1406, 1407, 1240, 1408, 1239, 1237, 1419, 1218, 1219, 1220, 
		1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 
		1217, 1231, 1232, 1233, 1234, 1235, 1236, 1238, 1409, 1330, 
		1411, 1417, 1416, 1415, 1410, 1413, 1412, 1414
	};
}
public class Feat : Element

@@ -723,10 +725,16 @@ public List<string> Apply(int a, ElementContainer owner, bool hint = false)

cs
			{
				int num2 = 0;
				string[] array = text2.Split(',');
				for (int i = 0; i < array.Length; i++) 
				foreach (string obj in array) 
				{
					string item = array[i].Replace("#1", featRef[num2]); 
					hints.Add(item); 
					string text3 = featRef[num2]; 
					string text4 = obj; 
					if (text3.ToInt() < 0) 
					{ 
						text4 = text4.Replace("+#1", text3); 
					} 
					text4 = text4.Replace("#1", text3); 
					hints.Add(text4); 
					num2++;
				}
			}

FOOD

@@ -1,32 +1,32 @@

cs
public class FOOD
{
	public const int food_CHA = 700; 
	public const int food_god = 758; 
	public const int justcooked = 757; 

	public const int food_cat = 701;

	public const int food_poison = 702; 
	public const int food_human = 708; 

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

	public const int gainWeight = 705;

	public const int food_love = 703; 
	public const int food_bug = 704; 

	public const int kirimi = 707; 
	public const int food_love = 703; 

	public const int food_human = 708; 
	public const int food_poison = 702; 

	public const int food_undead = 709;

	public const int justcooked = 757; 
	public const int loseWeight = 706; 
	public const int food_god = 758; 
	public const int food_CHA = 700; 

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

MUTATION

@@ -1,14 +1,6 @@

cs
public class MUTATION
{
	public const int mutationStrN = 1521; 
	public const int mutationStr = 1520; 
	public const int mutationSpeedN = 1519; 
	public const int mutationSpeed = 1518; 
	public const int mutationSkin = 1510; 
	public const int etherFeet = 1552; 

	public const int mutationDexN = 1515;

@@ -20,72 +12,80 @@ public class MUTATION

cs

	public const int mutationSkinN = 1511;

	public const int mutationCha = 1522; 
	public const int etherNeck = 1555; 

	public const int mutationRegen = 1516; 
	public const int etherViolence = 1556; 

	public const int mutationChaN = 1523; 
	public const int etherEye = 1553; 

	public const int mutationRegenN = 1517; 
	public const int etherRain = 1558; 

	public const int mutationBrainN = 1525; 
	public const int etherAddict = 1559; 

	public const int etherPoisonHand = 1565; 
	public const int etherWeak = 1560; 

	public const int etherManaBattery = 1564; 
	public const int etherStupid = 1561; 
	public const int etherArmor = 1562; 

	public const int etherProvoke = 1563;

	public const int mutationBrain = 1524; 
	public const int etherManaBattery = 1564; 

	public const int etherStupid = 1561; 
	public const int mutationSkin = 1510; 

	public const int etherWeak = 1560; 
	public const int etherPoisonHand = 1565; 

	public const int etherAddict = 1559; 
	public const int mutationRegen = 1516; 

	public const int etherRain = 1558; 
	public const int mutationRegenN = 1517; 

	public const int etherHead = 1557;

	public const int etherViolence = 1556; 
	public const int mutationSpeed = 1518; 

	public const int etherNeck = 1555; 
	public const int etherUgly = 1551; 

	public const int etherWing = 1554;

	public const int etherArmor = 1562; 
	public const int etherGravity = 1550; 

	public const int etherFeet = 1552; 
	public const int mutationHairN = 1533; 

	public const int etherEye = 1553; 
	public const int mutationHair = 1532; 

	public const int mutationColdN = 1527; 
	public const int mutationBodyN = 1531; 
	public const int mutationLightningN = 1529; 

	public const int mutationLightning = 1528;

	public const int mutationLightningN = 1529; 
	public const int mutationColdN = 1527; 

	public const int mutationBody = 1530;

	public const int mutationCold = 1526;

	public const int mutationHair = 1532; 
	public const int mutationBrainN = 1525; 

	public const int mutationHairN = 1533; 
	public const int mutationBrain = 1524; 

	public const int etherGravity = 1550; 
	public const int mutationChaN = 1523; 

	public const int etherUgly = 1551; 
	public const int mutationCha = 1522; 

	public const int mutationBodyN = 1531; 
	public const int mutationStrN = 1521; 
	public const int mutationStr = 1520; 
	public const int mutationSpeedN = 1519; 

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

POLICY

@@ -3,7 +3,7 @@

cs

public class POLICY
{
	public const int bed_quality = 2812; 
	public const int license_food = 2818; 

	public const int suite_room = 2813;

@@ -15,14 +15,16 @@ public class POLICY

cs

	public const int store_premium = 2817;

	public const int license_food = 2818; 
	public const int bed_quality = 2812; 

	public const int license_furniture = 2819;

	public const int celeb = 2822; 
	public const int license_slaver = 2828; 

	public const int legendary_heirloom = 2821;

	public const int celeb = 2822; 
	public const int legendary_exhibition = 2823;

	public const int license_stolen = 2824;

@@ -33,8 +35,6 @@ public class POLICY

cs

	public const int breed_season = 2827;

	public const int license_slaver = 2828; 
	public const int tourist_safety = 2811;

	public const int license_general = 2820;

@@ -107,8 +107,8 @@ public class POLICY

cs

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

SerializedCards

@@ -417,7 +417,7 @@ public void Add(Card c)

cs
		refVal = c.refVal,
		idSkin = c.idSkin,
		idDeity = c.c_idDeity,
		isEmpty = (c.things.Count == 0) 
		isEmpty = (c.things.Count == 0 && c.c_lockLv == 0) 
	};
	if (c.c_idBacker != 0)
	{

@@ -747,9 +747,17 @@ public void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial = nu

cs
				bool isHidden = (card2.isMasked = false);
				card3.isHidden = isHidden;
			}
			if (card2.IsContainer && card4.isEmpty) 
			if (card2.IsContainer) 
			{
				card2.things.DestroyAll(); 
				if (card4.isEmpty) 
				{ 
					card2.things.DestroyAll(); 
					card2.c_lockLv = 0; 
				} 
				else
				{ 
					card2.c_lockLv = 1; 
				} 
			}
		}
		if (card2.isChara)

TraitWhipEgg

@@ -24,7 +24,8 @@ public override void TrySetHeldAct(ActPlan p)

cs
				{
					c.Chara.OnInsulted();
				}
				c.MakeEgg(); 
				Thing c2 = c.MakeEgg(); 
				c.Say("item_drop", c2); 
				owner.ModCharge(-1);
				if (owner.c_charges <= 0)
				{