Skip to content

EA 23.150 Nightly

June 5, 2025

16 files modified.

Important Changes

None.

ActEffect

@@ -1342,8 +1342,8 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			{
				if (!item3.IsFriendOrAbove(CC))
				{
					int num11 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item3.DamageHP(num11 * hex2, 919, power, AttackSource.None, CC); 
					int num10 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item3.DamageHP(num10 * hex2, 919, power, AttackSource.None, CC); 
				}
			}
		});

@@ -1381,7 +1381,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			break;
		}
		Thing thing4 = null;
		bool flag7 = actRef.n1 == "food"; 
		bool flag8 = actRef.n1 == "food"; 
		if (actRef.n1 == "money")
		{
			int currency = TC.GetCurrency();

@@ -1395,11 +1395,11 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		else
		{
			Func<Thing, bool> func = (Thing t) => true;
			if (flag7) 
			if (flag8) 
			{
				func = (Thing t) => t.IsFood;
			}
			List<Thing> list4 = TC.things.List(delegate(Thing t) 
			List<Thing> list3 = TC.things.List(delegate(Thing t) 
			{
				if (t.parentCard?.trait is TraitChestMerchant || t.trait is TraitTool || t.IsThrownWeapon)
				{

@@ -1407,9 +1407,9 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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 (list4.Count > 0) 
			if (list3.Count > 0) 
			{
				thing4 = list4.RandomItem(); 
				thing4 = list3.RandomItem(); 
				if (thing4.Num > 1)
				{
					thing4 = thing4.Split(1);

@@ -1455,7 +1455,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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

@@ -1463,12 +1463,12 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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

@@ -1490,26 +1490,26 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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

@@ -1577,12 +1577,12 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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

@@ -1605,13 +1605,13 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
			power = power * 2 / 3;
		}
		int a2 = power;
		int num7 = TC.WIL * (isPowerful ? 20 : 5); 
		int num8 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition3 = TC.GetCondition<ConHolyVeil>();
		if (condition3 != null)
		{
			num7 += condition3.power * 5; 
			num8 += 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) < num8 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		{
			TC.Say("debuff_resist", TC);
			CC.DoHostileAction(TC);

@@ -1754,16 +1754,16 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		break;
	case EffectId.Revive:
	{
		List<KeyValuePair<int, Chara>> list3 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList(); 
		List<KeyValuePair<int, Chara>> list7 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList(); 
		if (TC.IsPCFaction || TC.IsPCFactionMinion)
		{
			if (TC.IsPC && list3.Count == 0) 
			if (TC.IsPC && list7.Count == 0) 
			{
				list3 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList(); 
				list7 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList(); 
			}
			if (list3.Count > 0) 
			if (list7.Count > 0) 
			{
				list3.RandomItem().Value.Chara.GetRevived(); 
				list7.RandomItem().Value.Chara.GetRevived(); 
				break;
			}
		}

@@ -1776,24 +1776,24 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
	case EffectId.DamageMindGreat:
	case EffectId.Weaken:
	{
		bool flag9 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat; 
		bool flag7 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat; 
		bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
		int num9 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		int num6 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		if (id == EffectId.Weaken)
		{
			flag9 = EClass.rnd(2) == 0; 
			mind2 = !flag9; 
			num9 = 1; 
			flag7 = EClass.rnd(2) == 0; 
			mind2 = !flag7; 
			num6 = 1; 
		}
		else
		{
			TC.PlayEffect("debuff");
			TC.PlaySound("debuff");
		}
		TC.Say(flag9 ? "damageBody" : "damageMind", TC); 
		for (int m = 0; m < num9; m++) 
		TC.Say(flag7 ? "damageBody" : "damageMind", TC); 
		for (int k = 0; k < num6; k++) 
		{
			TC.DamageTempElements(power, flag9, mind2, id != EffectId.Weaken); 
			TC.DamageTempElements(power, flag7, mind2, id != EffectId.Weaken); 
		}
		if (TC.IsPC)
		{

@@ -1808,32 +1808,32 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

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

@@ -1853,17 +1853,17 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		{
			Debug.Log(actRef.act.id);
		}
		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(); 
		int num7 = 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)
		{
			num8 = num8 * (100 + actRef.refThing.Evalue(7500)) / 100; 
			num7 = num7 * (100 + actRef.refThing.Evalue(7500)) / 100; 
		}
		if (flag)
		{
			TC.DamageHP(num8 / 2, 919, power); 
			TC.DamageHP(num7 / 2, 919, power); 
			break;
		}
		TC.HealHPHost(num8, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.HealHPHost(num7, (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;

@@ -2134,10 +2134,10 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		{
			power /= 4;
		}
		List<Thing> list5 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false); 
		if (list5.Count != 0) 
		List<Thing> list4 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false); 
		if (list4.Count != 0) 
		{
			Thing thing5 = list5.RandomItem(); 
			Thing thing5 = list4.RandomItem(); 
			TC.Say("acid_hit", TC);
			if (thing5.isAcidproof)
			{

Chara

@@ -8876,6 +8876,7 @@ public void Cure(CureType type, int p = 100, BlessedState state = BlessedState.N

cs
		if (type == CureType.Death || type == CureType.Boss)
		{
			SAN.Mod(-20);
			RemoveCondition<ConBrightnessOfLife>(); 
		}
		if (type == CureType.Jure)
		{

@@ -9451,33 +9452,34 @@ public void ModTempElement(int ele, int a, bool naturalDecay = false, bool onlyR

cs
	{
		return;
	}
	bool flag = HasElement(1215); 
	if (tempElements == null)
	{
		tempElements = new ElementContainer();
		tempElements.SetParent(this);
	}
	int num = Mathf.Abs(elements.ValueWithoutLink(ele)) + 20; 
	int num2 = Mathf.Max(-num, -100); 
	int num3 = tempElements.Base(ele); 
	int num4 = num3 + a; 
	if (a > 0 && flag) 
	{ 
		a = a * 150 / 100; 
	} 
	int num = elements.ValueWithoutLink(ele); 
	int num2 = Mathf.Abs(num) + 100; 
	int num3 = num2 / (flag ? 2 : 4); 
	int num4 = -num - 100; 
	int num5 = tempElements.Base(ele); 
	int num6 = num5 + a; 
	if (onlyRenew)
	{
		if (a > 0 && num3 >= a) 
		{ 
			a = 0; 
		} 
		if (a < 0 && num3 <= a) 
		{ 
			a = 0; 
		} 
		num3 = Mathf.Min(a, num3); 
		num4 = Mathf.Max(a, -num2 / 3); 
	}
	if (num4 > num) 
	if (a > 0 && num6 > num3) 
	{
		a = ((num > num3) ? (num - num3) : 0); 
		a = ((num3 > num5) ? (num3 - num5) : 0); 
	}
	if (num4 < num2) 
	if (a < 0 && num6 < num4) 
	{
		a = ((num2 < num3) ? (num2 - num3) : 0); 
		a = ((num4 < num5) ? (num4 - num5) : 0); 
	}
	Element element = tempElements.ModBase(ele, a);
	if (element.vBase == 0)

@@ -9494,34 +9496,31 @@ public void DamageTempElements(int p, bool body, bool mind, bool onlyRenew = fal

cs
	{
		if (body)
		{
			DamageTempElement(Element.List_Body.RandomItem(), p); 
			DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew); 
		}
		if (mind)
		{
			DamageTempElement(Element.List_Mind.RandomItem(), p); 
			DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew); 
		}
	}

	public void DamageTempElement(int ele, int p, bool onlyRenew = false)
	{
		ModTempElement(ele, -(p / 100 + EClass.rnd(p / 100 + 1) + 1), naturalDecay: false, onlyRenew); 
		ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew); 
	}

	public void EnhanceTempElements(int p, bool body, bool mind, bool onlyRenew = false)
	{
		if (body) 
		{ 
			EnhanceTempElement(Element.List_Body.RandomItem(), p); 
		} 
		if (mind) 
		int[] array = (body ? Element.List_Body : Element.List_Mind); 
		foreach (int ele in array) 
		{
			EnhanceTempElement(Element.List_Mind.RandomItem(), p); 
			EnhanceTempElement(ele, p, onlyRenew); 
		}
	}

	public void EnhanceTempElement(int ele, int p, bool onlyRenew = false)
	{
		ModTempElement(ele, p / 100 + EClass.rnd(p / 100 + 1), naturalDecay: false, onlyRenew); 
		ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew); 
	}

	public void DiminishTempElements(int a = 1)

CoreDebug

@@ -445,6 +445,7 @@ public void QuickStart()

cs
		{
			thing.AddCard(ThingGen.Create("mathammer", MATERIAL.GetRandomMaterial(100).alias)).SetNum(10);
		}
		thing.AddCard(ThingGen.Create("mathammer", 103)).SetNum(10); 
		thing.AddCard(ThingGen.Create("mathammer", 102)).SetNum(10);
		thing.AddCard(ThingGen.Create("mathammer", 33)).SetNum(10);
		thing.AddCard(ThingGen.Create("mathammer", 18)).SetNum(10);

ELEMENT

@@ -1042,6 +1042,7 @@ public virtual Act.Cost GetCost(Chara c)

cs
		case 6020:
			result2.cost = Mathf.Min(c.stamina.max / 3 + 10, 30);
			break;
		case 6663:
		case 6664:
		{
			int num2 = -2;

FactionBranch

@@ -1229,17 +1229,21 @@ public void OnClaimZone()

cs

	public void OnUnclaimZone()
	{
		List<Element> list = owner.ListLandFeats(); 
		elements.SetBase(list[1].id, 0); 
		elements.SetBase(list[2].id, 0); 
		if (lv < 5) 
		List<Element> source = owner.ListLandFeats(); 
		if (lv >= 5) 
		{
			return; 
			foreach (Element item in source.Where((Element a) => a.HasTag("network")).ToList()) 
			{ 
				EClass.pc.faction.elements.ModBase(item.id, -item.Value); 
			} 
		}
		foreach (Element item in list.Where((Element a) => a.HasTag("network")).ToList()) 
		Element[] array = elements.dict.Values.ToArray(); 
		foreach (Element element in array) 
		{
			EClass.pc.faction.elements.ModBase(item.id, -item.Value); 
			elements.SetBase(element.id, 0); 
		}
		owner.landFeats = null; 
		owner.ListLandFeats(); 
	}

	public void ValidateUpgradePolicies()

GrowSystem

@@ -92,7 +92,9 @@ public int Convert(int tile)

cs

	public virtual bool NeedSunlight => true;

	public virtual bool NeedUndersea => false; 
	public virtual bool GrowOnLand => true; 
	public virtual bool GrowUndersea => false; 

	public virtual AnimeID AnimeProgress => AnimeID.HitObj;

@@ -273,6 +275,21 @@ public bool CanGrow(VirtualDate date)

cs
	{
		return false;
	}
	if (GrowUndersea) 
	{ 
		if (EClass._zone.IsUnderwater || cell.sourceFloor.tileType.IsDeepWater) 
		{ 
			return true; 
		} 
	} 
	else if (EClass._zone.IsUnderwater) 
	{ 
		return false; 
	} 
	if (!GrowOnLand) 
	{ 
		return false; 
	} 
	if (NeedSunlight)
	{
		if (date.sunMap == null)

@@ -284,17 +301,6 @@ public bool CanGrow(VirtualDate date)

cs
				return false;
			}
		}
		if (NeedUndersea) 
		{ 
			if (!EClass._zone.IsUnderwater && !cell.sourceFloor.tileType.IsDeepWater) 
			{ 
				return false; 
			} 
		} 
		else if (EClass._zone.IsUnderwater) 
		{ 
			return false; 
		} 
		return true;
	}

GrowSystemSeaweed

@@ -2,7 +2,9 @@ public class GrowSystemSeaweed : GrowSystemWheat

cs
{
	public override int HarvestStage => -1;

	public override bool NeedUndersea => true; 
	public override bool GrowOnLand => false; 
	public override bool GrowUndersea => true; 

	public override bool NeedSunlight => false;

GrowSystemTreeCoralwood

@@ -2,6 +2,8 @@

cs

public class GrowSystemTreeCoralwood : GrowSystemTreeSingle
{
	public override bool GrowUndersea => true; 
	public override int GetShadow(int index)
	{
		return 34;

GrowSystemTreeFeywood

@@ -1,3 +1,4 @@

cs
public class GrowSystemTreeFeywood : GrowSystemTree
{
	public override bool GrowUndersea => true; 
}

TraitDeed

@@ -13,28 +13,21 @@ public override void OnRead(Chara c)

cs
		}
		Dialog.YesNo("dialog_claimLand", delegate
		{
			if (EClass._zone.GetInt(2) != 0) 
			EClass._zone.ClaimZone(); 
			owner.ModNum(-1); 
			WidgetMenuPanel.OnChangeMode(); 
			if (EClass._zone == EClass.game.StartZone) 
			{
				Msg.Say("claimCooldown2"); 
			} 
			else
			{ 
				EClass._zone.ClaimZone(); 
				owner.ModNum(-1); 
				WidgetMenuPanel.OnChangeMode(); 
				if (EClass._zone == EClass.game.StartZone) 
				if (EClass.game.quests.Get<QuestHome>() != null) 
				{ 
					EClass.game.quests.Home.ChangePhase(1); 
				} 
				if (QuestMain.Phase < 200) 
				{
					if (EClass.game.quests.Get<QuestHome>() != null) 
					{ 
						EClass.game.quests.Home.ChangePhase(1); 
					} 
					if (QuestMain.Phase < 200) 
					{ 
						EClass.game.quests.Main.ChangePhase(200); 
					} 
					EClass.game.quests.Main.ChangePhase(200); 
				}
				EClass.player.EndTurn(); 
			}
			EClass.player.EndTurn(); 
		});
	}
}

TraitPotion

@@ -1,7 +1,5 @@

cs
public class TraitPotion : TraitDrink
{
	public override int Power => 200; 
	public override int CraftNum
	{
		get

TraitPotionAlchemy

@@ -10,10 +10,20 @@ public int GetPower()

cs
{
	int num = 200;
	int num2 = 100;
	int refVal = owner.refVal; 
	if ((uint)(refVal - 8400) <= 5u) 
	switch (owner.refVal) 
	{
	case 8400: 
	case 8401: 
	case 8402: 
	case 8403: 
	case 8404: 
	case 8405: 
		num2 = 150;
		break; 
	case 8470: 
	case 8471: 
		num2 = 100 + owner.encLV * 50; 
		break; 
	}
	return num * (100 + owner.encLV * num2) / 100;
}

TraitPotionRandom

@@ -6,6 +6,8 @@ public class TraitPotionRandom : TraitPotion

cs
		lvMod = 10
	};

	public override int Power => 200; 
	public override SourceElement.Row source => EClass.sources.elements.map[owner.refVal];

	public override string AliasEle => source.aliasRef;

TraitSeed

@@ -46,13 +46,20 @@ public override void WriteNote(UINote n, bool identified)

cs
	{
		n.AddText("isWaterCrop");
	}
	if (row.tag.Contains("undersea")) 
	if (row.growth != null) 
	{
		n.AddText("isUnderseaCrop"); 
	} 
	if (row.growth != null && row.growth.NeedSunlight) 
	{ 
		n.AddText("isNeedSun"); 
		if (row.growth.GrowOnLand) 
		{ 
			n.AddText("isGrowOnLand"); 
		} 
		if (row.growth.GrowUndersea) 
		{ 
			n.AddText("isGrowUndersea"); 
		} 
		if (row.growth.NeedSunlight) 
		{ 
			n.AddText("isNeedSun"); 
		} 
	}
	if (row.growth == null || !row.growth.CanLevelSeed)
	{

WidgetSearch

@@ -106,6 +106,10 @@ public override void Search(string s)

cs
		extra.lastSearch = s;
	}
	s = s.ToLower();
	if (!buttonClear) 
	{ 
		return; 
	} 
	buttonClear.SetActive(field.text != "");
	buttonRefresh.SetActive(field.text != "");
	if (s == lastSearch || s.Length == 0)

Zone

@@ -3303,7 +3303,7 @@ void Perform(HashSet<int> farmMap)

cs
						{
							date.BuildSunMap();
						}
						if (!date.sunMap.Contains(c.index)) 
						if (!date.sunMap.Contains(c.index) && !c.growth.CanGrow(date)) 
						{
							c.growth.Perish();
						}