Skip to content

EA 23.104 Nightly

March 16, 2025

20 files modified. 2 new files created.

Important Changes

None.

ABILITY

@@ -2,7 +2,7 @@

cs

public class ABILITY
{
	public const int ActChat = 5044; 
	public const int AI_TendAnimal = 5043; 

	public const int ActThrow = 5038;

@@ -14,7 +14,7 @@ public class ABILITY

cs

	public const int ActKick = 5042;

	public const int AI_TendAnimal = 5043; 
	public const int ActChat = 5044; 

	public const int AI_Drink = 5045;

@@ -62,7 +62,7 @@ public class ABILITY

cs

	public const int ActSuicide = 6410;

	public const int ActDuplicate = 6420; 
	public const int ActRush = 6450; 

	public const int AI_Bladder = 5054;

@@ -136,7 +136,7 @@ public class ABILITY

cs

	public const int ActCurse = 6600;

	public const int ActRush = 6450; 
	public const int ActDuplicate = 6420; 

	public const int ActDraw = 6602;

@@ -154,9 +154,9 @@ public class ABILITY

cs

	public const int breathe_Poison = 50205;

	public const int ActEntangle = 6601; 
	public const int breathe_Nether = 50206; 

	public const int breathe_Sound = 50207; 
	public const int ActEntangle = 6601; 

	public const int breathe_Nerve = 50208;

@@ -188,16 +188,16 @@ public class ABILITY

cs

	public const int ActKizuamiTrick = 6903;

	public const int breathe_Nether = 50206; 
	public const int breathe_Sound = 50207; 

	public const int ActJureHeal = 6901;

	public const int ActWeaken = 6610;

	public const int ActLulwyTrick = 6902; 

	public const int ActNTR = 6603;

	public const int ActLulwyTrick = 6902; 

	public const int ActTouchSleep = 6612;

	public const int ActTouchDrown = 6613;

@@ -208,48 +208,48 @@ public class ABILITY

cs

	public const int ActGazeMutation = 6622;

	public const int ActGazeMana = 6623; 

	public const int ActFear = 6611; 
	public const int ActDrainBlood = 6626; 

	public const int ActInsult = 6630;

	public const int ActDrainBlood = 6626; 
	public const int ActGazeMana = 6623; 

	public const int ActSteal = 6640;

	public const int ActStealFood = 6641; 
	public const int ActManaAbsorb = 6900; 

	public const int ActStealMoney = 6642; 
	public const int StManaCost = 6720; 

	public const int ActNeckHunt = 6650; 
	public const int ActScream = 6631; 

	public const int ActDropMine = 6660; 
	public const int StTaunt = 6700; 

	public const int ActThrowPotion = 6661;

	public const int StTaunt = 6700; 
	public const int ActFear = 6611; 

	public const int StManaCost = 6720; 
	public const int ActNeckHunt = 6650; 

	public const int ActManaAbsorb = 6900; 
	public const int ActStealMoney = 6642; 

	public const int ActScream = 6631; 
	public const int ActStealFood = 6641; 

	public const int ActDropMine = 6660; 

	public static readonly int[] IDS = new int[117]
	{
		5044, 5038, 5039, 5040, 5041, 5042, 5043, 5045, 5046, 5047, 
		5043, 5038, 5039, 5040, 5041, 5042, 5044, 5045, 5046, 5047, 
		5048, 5049, 5050, 5051, 5052, 5037, 5053, 5055, 6001, 6003,
		6011, 6012, 6013, 6015, 6018, 6019, 6020, 6050, 6400, 6410,
		6420, 5054, 6500, 5036, 5034, 5004, 5005, 5006, 5007, 5008, 
		6450, 5054, 6500, 5036, 5034, 5004, 5005, 5006, 5007, 5008, 
		5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5035,
		5018, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028,
		5029, 5030, 5031, 5032, 5033, 5019, 6600, 6450, 6602, 7000, 
		50200, 50201, 50202, 50203, 50204, 50205, 6601, 50207, 50208, 6904, 
		5029, 5030, 5031, 5032, 5033, 5019, 6600, 6420, 6602, 7000, 
		50200, 50201, 50202, 50203, 50204, 50205, 50206, 6601, 50208, 6904, 
		50209, 50211, 50212, 50213, 50214, 50215, 50216, 5000, 5001, 5002,
		5003, 50210, 6903, 50206, 6901, 6610, 6902, 6603, 6612, 6613, 
		6620, 6621, 6622, 6623, 6611, 6630, 6626, 6640, 6641, 6642, 
		6650, 6660, 6661, 6700, 6720, 6900, 6631
		5003, 50210, 6903, 50207, 6901, 6610, 6603, 6902, 6612, 6613, 
		6620, 6621, 6622, 6626, 6630, 6623, 6640, 6900, 6720, 6631, 
		6700, 6661, 6611, 6650, 6642, 6641, 6660
	};
}
public class Ability : Act

AI_Idle

@@ -569,7 +569,7 @@ public override IEnumerable<Status> Run()

cs
	}
	if (EClass.rnd(100) == 0 && owner.trait is TraitBitch)
	{
		Chara chara2 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && !c.HasElement(418)); 
		Chara chara2 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0); 
		if (chara2 != null)
		{
			yield return Do(new AI_Fuck

ActNTR

@@ -2,9 +2,9 @@ public class ActNTR : Ability

cs
{
	public override bool CanPerform()
	{
		if (Act.TC.isChara && (Act.TC.Chara.conSleep != null || Act.CC.HasElement(1239))) 
		if (Act.TC.isChara && (Act.TC.Chara.conSleep != null || Act.CC.HasElement(1239) || Act.TC.Evalue(418) < 0)) 
		{
			return !Act.TC.HasElement(418); 
			return Act.TC.Evalue(418) <= 0; 
		}
		return false;
	}

Card

@@ -6320,6 +6320,10 @@ public void TryUnrestrain(bool force = false, Chara c = null)

cs
			EClass.player.ModKarma(2);
		}
	}
	if (EClass._zone.IsPCFaction || EClass._zone is Zone_Tent) 
	{ 
		return; 
	} 
	foreach (Chara item in c.pos.ListCharasInRadius(c, 5, (Chara _c) => _c.id == "fanatic" && _c.faith != Chara.faith))
	{
		c.DoHostileAction(item, immediate: true);

Chara

@@ -3383,7 +3383,7 @@ public void TickConditions()

cs
	case 1:
		if (!IsPC || !EClass.debug.godMode)
		{
			if (EClass.rnd(2) == 0) 
			if (EClass.rnd(2) == 0 && !HasCondition<ConAwakening>()) 
			{
				sleepiness.Mod(1);
			}

@@ -6202,6 +6202,16 @@ public override string GetHoverText2()

cs
		text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
		text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin;
	}
	if (EClass.pc.held?.trait is TraitWhipLove && IsPCFaction) 
	{ 
		text2 += Environment.NewLine; 
		text2 += "<size=14>"; 
		foreach (Hobby item in ListHobbies().Concat(ListWorks())) 
		{ 
			text2 = text2 + item.Name + ", "; 
		} 
		text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>"; 
	} 
	string text3 = "";
	IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
	if (enumerable.Count() > 0)

@@ -6209,15 +6219,15 @@ public override string GetHoverText2()

cs
		text3 += Environment.NewLine;
		text3 += "<size=14>";
		int num = 0;
		foreach (BaseStats item in enumerable) 
		foreach (BaseStats item2 in enumerable) 
		{
			string text4 = item.GetPhaseStr(); 
			string text4 = item2.GetPhaseStr(); 
			if (text4.IsEmpty() || text4 == "#")
			{
				continue;
			}
			Color c = Color.white;
			switch (item.source.group) 
			switch (item2.source.group) 
			{
			case "Bad":
			case "Debuff":

@@ -6230,10 +6240,10 @@ public override string GetHoverText2()

cs
			}
			if (EClass.debug.showExtra)
			{
				text4 = text4 + "(" + item.GetValue() + ")"; 
				if (resistCon != null && resistCon.ContainsKey(item.id)) 
				text4 = text4 + "(" + item2.GetValue() + ")"; 
				if (resistCon != null && resistCon.ContainsKey(item2.id)) 
				{
					text4 = text4 + "{" + resistCon[item.id] + "}"; 
					text4 = text4 + "{" + resistCon[item2.id] + "}"; 
				}
			}
			num++;

@@ -6252,9 +6262,9 @@ public override string GetHoverText2()

cs
	if (EClass.debug.showExtra)
	{
		text3 += Environment.NewLine;
		foreach (ActList.Item item2 in ability.list.items) 
		foreach (ActList.Item item3 in ability.list.items) 
		{
			text3 = text3 + item2.act.Name + ", "; 
			text3 = text3 + item3.act.Name + ", "; 
		}
		text3 = text3.TrimEnd(", ".ToCharArray());
	}

@@ -7125,6 +7135,11 @@ public bool TryUse(Thing t)

cs
	{
		return false;
	}
	if (t.id == "cigar") 
	{ 
		(t.trait as TraitItemProc).OnUse(this); 
		return true; 
	} 
	if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
	{
		SetAIImmediate(new AI_Eat

@@ -7174,7 +7189,7 @@ public void ModAffinity(Chara c, int a, bool show = true, bool showOnlyEmo = fal

cs
		c.ModAffinity(EClass.pc, a, show);
		return;
	}
	int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0); 
	int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0); 
	if (IsPCFaction && homeBranch != null)
	{
		num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;

+ConAwakening

File Created
cs
public class ConAwakening : Condition
{
	public override int GetPhase()
	{
		return 0;
	}

	public override void OnStart()
	{
		base.OnStart();
		owner.sleepiness.Mod(-20);
	}
}

ConSleep

@@ -179,12 +179,12 @@ public static void SuccubusVisit(Chara tg)

cs
	}
	foreach (Chara chara in EClass._map.charas)
	{
		if (chara == tg || chara.IsPC || chara.HasElement(418) || EClass.rnd(3) != 0 || chara.IsDisabled || !chara.IsIdle) 
		if (chara == tg || chara.IsPC || chara.host != null || chara.IsDisabled || !chara.IsIdle || chara.Evalue(418) > 0 || tg.Evalue(418) > 0) 
		{
			continue;
		}
		Thing thing = chara.things.Find<TraitDreamBug>();
		if ((!chara.HasElement(1216) && thing == null) || chara.host != null || (tg.IsPC && thing == null && EClass.rnd(200) != 0)) 
		if ((!chara.HasElement(1216) && thing == null) || (tg.Evalue(418) == 0 && (EClass.rnd(3) != 0 || (tg.IsPC && thing == null && EClass.rnd(200) != 0)))) 
		{
			continue;
		}

+ConSmoking

File Created
cs
public class ConSmoking : Condition
{
	public override int GetPhase()
	{
		return 0;
	}

	public override void Tick()
	{
		base.Tick();
		if (EClass.rnd(2) == 0)
		{
			owner.sleepiness.Mod(-1);
		}
	}
}

CoreRef

@@ -68,6 +68,8 @@ public class Enc

cs

			public Sprite trait;

			public Sprite traitFood; 

			public Sprite mod;

			public Sprite weaponEnc;

CraftUtil

@@ -160,7 +160,7 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
	{
		foreach (Element value3 in product.sourceCard.model.elements.dict.Values)
		{
			if (value3.IsFoodTraitMain) 
			if (value3.IsTrait || value3.IsFoodTraitMain) 
			{
				product.elements.ModBase(value3.id, value3.Value);
			}

DOMAIN

@@ -2,42 +2,42 @@

cs

public class DOMAIN
{
	public const int domEarth = 812; 

	public const int domHealing = 811;

	public const int domEyth = 814; 
	public const int domLuck = 810; 

	public const int domOblivion = 813; 
	public const int domMachine = 809; 

	public const int domTest = 800; 
	public const int domEyth = 814; 

	public const int domElement = 806; 
	public const int domHarmony = 815; 

	public const int domFaith = 802; 
	public const int domEarth = 812; 

	public const int domLuck = 810; 
	public const int domMiracle = 803; 

	public const int domMachine = 809; 
	public const int domTest = 800; 

	public const int domHarvest = 808;

	public const int domWind = 807;

	public const int domElement = 806; 

	public const int domComm = 805;

	public const int domArcane = 804;

	public const int domMiracle = 803; 

	public const int domHarmony = 815; 
	public const int domFaith = 802; 

	public const int domSurvival = 801;

	public const int domOblivion = 813; 

	public static readonly int[] IDS = new int[16]
	{
		812, 811, 814, 813, 800, 806, 802, 810, 809, 808, 
		807, 805, 804, 803, 815, 801
		811, 810, 809, 814, 815, 812, 803, 800, 808, 807, 
		806, 805, 804, 802, 801, 813
	};
}
public class Domain : EClass

ELEMENT

@@ -5,6 +5,10 @@

cs

public class ELEMENT
{
	public const int stimulant = 760; 

	public const int comfort = 750; 

	public const int rare = 751;

	public const int cute = 752;

@@ -17,9 +21,9 @@ public class ELEMENT

cs

	public const int hotspring = 756;

	public const int purity = 759; 
	public const int recharge = 761; 

	public const int comfort = 750; 
	public const int purity = 759; 

	public const int _void = 0;

@@ -39,7 +43,7 @@ public class ELEMENT

cs

	public const int hardness = 13;

	public const int water = 15; 
	public const int growth = 14; 

	public const int heat = 16;

@@ -47,7 +51,7 @@ public class ELEMENT

cs

	public const int taste = 18;

	public const int growth = 14; 
	public const int water = 15; 

	public const int fire = 21;

@@ -67,12 +71,12 @@ public class ELEMENT

cs

	public const int poison = 20;

	public static readonly int[] IDS = new int[31] 
	public static readonly int[] IDS = new int[33] 
	{
		751, 752, 753, 754, 755, 756, 759, 750, 0, 2, 
		1, 3, 5, 10, 11, 12, 13, 15, 16, 17, 
		18, 14, 21, 22, 23, 24, 25, 26, 29, 85, 
		20
		760, 750, 751, 752, 753, 754, 755, 756, 761, 759, 
		0, 2, 1, 3, 5, 10, 11, 12, 13, 14, 
		16, 17, 18, 15, 21, 22, 23, 24, 25, 26, 
		29, 85, 20
	};
}
public class Element : EClass

ENC

@@ -10,16 +10,14 @@ public class ENC

cs

	public const int r_life = 640;

	public const int mod_flurry = 621; 

	public const int mod_chaser = 620;

	public const int mod_feint = 623;

	public const int mod_splash = 608; 

	public const int mod_cleave = 622;

	public const int mod_flurry = 621; 

	public const int living = 653;

	public const int mod_frustration = 624;

@@ -46,7 +44,7 @@ public class ENC

cs

	public const int convertFire = 850;

	public const int mod_scatter = 607; 
	public const int mod_splash = 608; 

	public const int convertImpact = 865;

@@ -54,11 +52,13 @@ public class ENC

cs

	public const int onlyPet = 655;

	public const int mod_drill = 606; 
	public const int mod_scatter = 607; 

	public const int bane_fairy = 462; 
	public const int bane_animal = 463; 

	public const int mod_ammo_recover = 604; 
	public const int mod_precision = 605; 

	public const int allNeckHunt = 428; 

	public const int negateNeckHunt = 427;

@@ -70,7 +70,7 @@ public class ENC

cs

	public const int negateFear = 423;

	public const int negateParalysis = 422; 
	public const int negateBlind = 421; 

	public const int negatePoison = 420;

@@ -84,10 +84,10 @@ public class ENC

cs

	public const int encHit = 414;

	public const int allNeckHunt = 428; 

	public const int slowCorruption = 412;

	public const int encSpell = 411; 

	public const int throwReturn = 410;

	public const int corruption = 409;

@@ -110,15 +110,17 @@ public class ENC

cs

	public const int negateTeleport = 400;

	public const int mod_precision = 605; 

	public const int encSpell = 411; 
	public const int mod_drill = 606; 

	public const int breathing = 429;

	public const int negateBlind = 421; 
	public const int sustain_STR = 440; 

	public const int optimizeMana = 483; 
	public const int negateParalysis = 422; 

	public const int slot_rune = 484; 

	public const int mod_ammo_knockback = 603; 

	public const int mod_rapid = 602;

@@ -126,7 +128,9 @@ public class ENC

cs

	public const int mod_ammo = 600;

	public const int slot_rune = 484; 
	public const int sustain_END = 441; 

	public const int optimizeMana = 483; 

	public const int force_weapon = 482;

@@ -140,13 +144,13 @@ public class ENC

cs

	public const int bane_god = 466;

	public const int bane_machine = 465; 
	public const int bane_man = 464; 

	public const int bane_animal = 463; 
	public const int bane_machine = 465; 

	public const int bane_undead = 461;

	public const int bane_man = 464; 
	public const int bane_dragon = 460; 

	public const int sustain_CHA = 447;

@@ -156,28 +160,24 @@ public class ENC

cs

	public const int sustain_LER = 444;

	public const int sustain_PER = 443; 
	public const int bane_fairy = 462; 

	public const int bane_dragon = 460; 
	public const int sustain_PER = 443; 

	public const int sustain_DEX = 442;

	public const int sustain_END = 441; 

	public const int sustain_STR = 440; 

	public const int mod_ammo_knockback = 603; 
	public const int mod_ammo_recover = 604; 

	public static readonly int[] IDS = new int[84]
	{
		652, 651, 650, 641, 640, 620, 623, 608, 622, 621, 
		653, 624, 654, 851, 656, 660, 661, 662, 663, 664, 
		665, 666, 850, 607, 865, 852, 655, 606, 462, 604, 
		427, 426, 425, 424, 423, 422, 420, 418, 417, 416, 
		415, 414, 428, 412, 410, 409, 408, 407, 406, 405, 
		404, 403, 402, 401, 400, 605, 411, 429, 421, 483, 
		602, 601, 600, 484, 482, 481, 480, 468, 467, 466, 
		465, 463, 461, 464, 447, 446, 445, 444, 443, 460, 
		442, 441, 440, 603
		652, 651, 650, 641, 640, 621, 620, 623, 622, 653, 
		624, 654, 851, 656, 660, 661, 662, 663, 664, 665, 
		666, 850, 608, 865, 852, 655, 607, 463, 605, 428, 
		427, 426, 425, 424, 423, 421, 420, 418, 417, 416, 
		415, 414, 412, 411, 410, 409, 408, 407, 406, 405, 
		404, 403, 402, 401, 400, 606, 429, 440, 422, 484, 
		603, 602, 601, 600, 441, 483, 482, 481, 480, 468, 
		467, 466, 464, 465, 461, 460, 447, 446, 445, 444, 
		462, 443, 442, 604
	};
}

ElementContainer

@@ -815,6 +815,10 @@ public void AddNote(UINote n, Func<Element, bool> isValid = null, Action onAdd =

cs
						sprite = EClass.core.refs.icons.enc.card;
					}
				}
				if (thing.IsFood && e.IsFoodTrait) 
				{ 
					sprite = EClass.core.refs.icons.enc.traitFood; 
				} 
				if (e.id == thing.GetInt(107))
				{
					sprite = EClass.core.refs.icons.enc.cat;

FACTION

@@ -4,7 +4,7 @@

cs

public class FACTION
{
	public const int bfBeach = 3604; 
	public const int bfHill = 3603; 

	public const int bfCave = 3500;

@@ -14,19 +14,19 @@ public class FACTION

cs

	public const int bfSnow = 3602;

	public const int bfHill = 3603; 

	public const int bfFertile = 3700;

	public const int bfSea = 3605;

	public const int bfBeach = 3604; 

	public const int fRation = 2207;

	public const int bfGeyser = 3701;

	public const int fAttraction = 2206;

	public const int fEducation = 2116; 
	public const int fLoyal = 2117; 

	public const int fFood = 2204;

@@ -40,8 +40,6 @@ public class FACTION

cs

	public const int fHeirloom = 2120;

	public const int fLoyal = 2117; 

	public const int fConstruction = 2003;

	public const int bfRuin = 3702;

@@ -52,11 +50,13 @@ public class FACTION

cs

	public const int fAdmin = 2115;

	public const int fEducation = 2116; 

	public const int fSafety = 2205;

	public const int bfTranquil = 3703;

	public const int bfFish = 3706; 
	public const int bfMonster = 3707; 

	public const int bfHunt = 3705;

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

cs

	public const int bfLandmark1 = 3780;

	public const int bfMonster = 3707; 
	public const int bfFish = 3706; 

	public const int bfLandmark3 = 3782;

@@ -110,11 +110,11 @@ public class FACTION

cs

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

FEAT

@@ -57,7 +57,7 @@ public class FEAT

cs

	public const int featEarthStrength = 1411;

	public const int featManaCost = 1657; 
	public const int featChef = 1658; 

	public const int featScavenger = 1656;

@@ -103,7 +103,7 @@ public class FEAT

cs

	public const int featReboot = 1410;

	public const int featChef = 1658; 
	public const int featManaCost = 1657; 

	public const int featPaladin2 = 1408;

@@ -233,10 +233,10 @@ public class FEAT

cs
{
	1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1612,
	1412, 1610, 1421, 1420, 1419, 1418, 1417, 1416, 1415, 1414,
	1413, 1629, 1611, 1630, 1645, 1632, 1411, 1657, 1656, 1655, 
	1413, 1629, 1611, 1630, 1645, 1632, 1411, 1658, 1656, 1655, 
	1654, 1653, 1652, 1651, 1650, 1649, 1631, 1648, 1646, 1644,
	1643, 1642, 1641, 1640, 1636, 1635, 1634, 1633, 1647, 1410,
	1658, 1408, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 
	1657, 1408, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 
	1234, 1235, 1236, 1237, 1238, 1239, 1300, 1305, 1310, 1315,
	1320, 1325, 1330, 1224, 1223, 1222, 1221, 1409, 1200, 1201,
	1202, 1203, 1204, 1205, 1206, 1207, 1208, 1335, 1209, 1211,

FoodEffect

@@ -419,6 +419,7 @@ public static void Proc(Chara c, Thing food)

cs

	public static void ProcTrait(Chara c, Card t)
	{
		bool flag = false; 
		foreach (Element value in t.elements.dict.Values)
		{
			if (!value.IsTrait)

@@ -441,6 +442,27 @@ public static void ProcTrait(Chara c, Card t)

cs
			case 756:
				c.AddCondition<ConHotspring>(value.Value * 2)?.SetPerfume();
				break;
			case 760:
				if (!c.HasCondition<ConAwakening>()) 
				{ 
					flag = true; 
				} 
				c.AddCondition<ConAwakening>(1000 + value.Value * 20); 
				break; 
			case 761:
				if (c.HasCondition<ConAwakening>() && !flag) 
				{ 
					if (c.IsPC) 
					{ 
						Msg.Say("recharge_stamina_fail"); 
					} 
				} 
				else
				{ 
					c.Say("recharge_stamina", c); 
					c.stamina.Mod(value.Value * 2 / 3 + EClass.rnd(5)); 
				} 
				break; 
			}
		}
		else

@@ -457,6 +479,10 @@ public static void ProcTrait(Chara c, Card t)

cs
				c.AddCondition<ConInsane>(-value.Value * 10);
				c.AddCondition<ConHallucination>(-value.Value * 20);
				break;
			case 761:
				c.Say("recharge_stamina_negative", c); 
				c.stamina.Mod(value.Value); 
				break; 
			}
		}
	}

GoalCombat

@@ -486,6 +486,20 @@ public virtual bool TryUseAbility(int dist, bool beforeMove = false)

cs
		}
		switch (act.id)
		{
		case 6603: 
			if (!tc.IsPCParty || tc.Evalue(418) < 0) 
			{ 
				break; 
			} 
			foreach (Chara member in EClass.pc.party.members) 
			{ 
				if (member.Evalue(418) < 0) 
				{ 
					owner.enemy = (tc = member); 
					return false; 
				} 
			} 
			break; 
		case 6602:
			if (dist <= 1 || tc.HasCondition<ConEntangle>())
			{

LayerCraft

@@ -483,10 +483,7 @@ public void RefreshProduct()

cs
	{
		foreach (Element item in thing.elements.dict.Values.ToList())
		{
			if (!item.IsTrait) 
			{ 
				thing.elements.Remove(item.id); 
			} 
			_ = item; 
		}
	}
	info1.buttonProduct.SetCard(thing);

Net

@@ -43,7 +43,11 @@ public class DownloadMeta

cs

		public bool IsValidVersion()
		{
			return !Version.Get(version).IsBelow(EClass.core.versionMoongate); 
			if (!Version.Get(version).IsBelow(EClass.core.versionMoongate)) 
			{ 
				return Version.Get(version).IsSameOrBelow(EClass.core.version); 
			} 
			return false; 
		}
	}

Thing

@@ -889,37 +889,34 @@ public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
			uIItem.text2.SetText(text2);
			if (showEQStats && flag2)
			{
				if (!flag) 
				text2 = ""; 
				if (DV != 0 || PV != 0 || base.HIT != 0 || base.DMG != 0 || Penetration != 0) 
				{
					text2 = ""; 
					if (DV != 0 || PV != 0 || base.HIT != 0 || base.DMG != 0 || Penetration != 0) 
					if (base.DMG != 0) 
					{
						if (base.DMG != 0) 
						{ 
							text2 = text2 + "DMG".lang() + ((base.DMG > 0) ? "+" : "") + base.DMG + ", "; 
						} 
						if (base.HIT != 0) 
						{ 
							text2 = text2 + "HIT".lang() + ((base.HIT > 0) ? "+" : "") + base.HIT + ", "; 
						} 
						if (DV != 0) 
						{ 
							text2 = text2 + "DV".lang() + ((DV > 0) ? "+" : "") + DV + ", "; 
						} 
						if (PV != 0) 
						{ 
							text2 = text2 + "PV".lang() + ((PV > 0) ? "+" : "") + PV + ", "; 
						} 
						if (Penetration != 0) 
						{ 
							text2 = text2 + "PEN".lang() + ((Penetration > 0) ? "+" : "") + Penetration + "%, "; 
						} 
						text2 = text2.TrimEnd(' ').TrimEnd(','); 
						text2 = text2 + "DMG".lang() + ((base.DMG > 0) ? "+" : "") + base.DMG + ", "; 
					}
					if (!text2.IsEmpty()) 
					if (base.HIT != 0) 
					{
						n.AddText("NoteText_eqstats", text2); 
						text2 = text2 + "HIT".lang() + ((base.HIT > 0) ? "+" : "") + base.HIT + ", "; 
					}
					if (DV != 0) 
					{ 
						text2 = text2 + "DV".lang() + ((DV > 0) ? "+" : "") + DV + ", "; 
					} 
					if (PV != 0) 
					{ 
						text2 = text2 + "PV".lang() + ((PV > 0) ? "+" : "") + PV + ", "; 
					} 
					if (Penetration != 0) 
					{ 
						text2 = text2 + "PEN".lang() + ((Penetration > 0) ? "+" : "") + Penetration + "%, "; 
					} 
					text2 = text2.TrimEnd(' ').TrimEnd(','); 
				} 
				if (!text2.IsEmpty()) 
				{ 
					n.AddText("NoteText_eqstats", text2); 
				}
				if (trait is TraitToolRange traitToolRange)
				{

@@ -1283,7 +1280,7 @@ public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
		if (mode == IInspect.NoteMode.Product && HasTag(CTAG.dish_bonus))
		{
			n.AddHeader("HeaderAdditionalTrait", "additional_trait");
			source.model.elements.AddNote(n, (Element e) => e.IsFoodTraitMain, null, ElementContainer.NoteMode.Trait, addRaceFeat: false, delegate(Element e, string s) 
			source.model.elements.AddNote(n, (Element e) => e.IsTrait || e.IsFoodTraitMain, null, ElementContainer.NoteMode.Trait, addRaceFeat: false, delegate(Element e, string s) 
			{
				string text9 = s;
				string text10 = e.source.GetText("textExtra");

@@ -1320,7 +1317,7 @@ public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
	{
		AddText("isReplica", FontColor.Passive);
	}
	if (flag2) 
	if (flag2 && mode != IInspect.NoteMode.Product) 
	{
		Chara chara = GetRootCard() as Chara;
		if (base.parentCard?.trait is TraitChestMerchant)

@@ -1346,6 +1343,10 @@ public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
		n.AddText(base.ammoData.Name);
	}
	onWriteNote?.Invoke(n);
	if (mode == IInspect.NoteMode.Product && base.IsEquipmentOrRangedOrAmmo) 
	{ 
		AddText("isProductWarning", FontColor.Default); 
	} 
	if ((bool)LayerDragGrid.Instance)
	{
		LayerDragGrid.Instance.owner.OnWriteNote(this, n);

TraitDrink

@@ -158,6 +158,7 @@ public override void OnDrink(Chara c)

cs
			refThing = owner.Thing,
			act = ((source != null) ? ACT.Create(source) : null)
		});
		FoodEffect.ProcTrait(c, owner); 
	}

	public override void OnThrowGround(Chara c, Point p)