Skip to content

EA 23.269 Nightly Patch 3

February 12, 2026

7 files modified.

Important Changes

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

DNA (2)

cs
public bool CanRemove() 
public bool CanRemove(Chara c) 
cs
public void WriteNote(UINote n) 
public void WriteNote(UINote n, Chara tg = null) 

Chara

public int GeneCostMTP

cs
			{
				return 100;
			}
			return 20; 
			return 5; 
		}
	}

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
	{
		num3 = 1 + Evalue(1648);
	}
	if (IsPC && cost.cost > 0 && a.Value == 0) 
	if (IsPC && cost.cost > 0 && a.Value == 0 && !ability.Has(a.id)) 
	{
		Msg.SayNothingHappen();
		return false;

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
		{
			Say(race.castStyle.IsEmpty("cast"), this, a.source.GetName().ToLower(), s.lang());
		}
		if (IsPC) 
		if (IsPC && !ability.Has(a.id)) 
		{
			_ = (i + 1) / 2;
			if (a.vPotential < i)

CharaGenes

public int GetGeneSlot(Chara c)

cs
		}
		return num;
	}
	public DNA GetDNA(int idEle) 
	{ 
		foreach (DNA item in items) 
		{ 
			for (int i = 0; i < item.vals.Count; i += 2) 
			{ 
				if (item.vals[i] == idEle) 
				{ 
					return item; 
				} 
			} 
		} 
		return null; 
	} 
}

DNA

public void Apply(Chara c, bool reverse)

cs
		}
	}

	public bool CanRemove() 
	public bool CanRemove(Chara c) 
	{
		for (int i = 0; i < vals.Count; i += 2)
		{
			int num = vals[i]; 
			if (num == 1237 || num == 1415) 
			switch (vals[i]) 
			{
			case 1237: 
			case 1415: 
				return false;
			case 1228: 
				return !c.IsPC; 
			}
		}
		return true;

public string GetText()

cs
		return "gene".lang(text.ToTitleCase(), cost.ToString() ?? "");
	}

	public void WriteNote(UINote n) 
	public void WriteNote(UINote n, Chara tg = null) 
	{
		if (slot >= 1)
		{
			n.AddText("isGeneReqSlots".lang(slot.ToString() ?? ""), FontColor.Warning);
		}
		if (!CanRemove()) 
		if (!CanRemove(tg)) 
		{
			n.AddText("isPermaGene".lang(), FontColor.Warning);
		}

public Element GetInvalidFeat(Chara c)

cs
	for (int i = 0; i < vals.Count; i += 2)
	{
		Element element = Element.Create(vals[i], vals[i + 1]);
		if (c.IsPC && element.id == 1415) 
		if (c.IsPC && !CanRemove(c)) 
		{
			return element;
		}

GoalAutoCombat

public void GetAbilities(Func<Element, bool> func)

cs
	public override void BuildAbilityList()
	{
		GetAbilities((Element e) => e.source.abilityType.Length != 0);
		AddAbility(ACT.Ranged); 
		AddAbility(ACT.Melee); 
		AddAbility(ACT.Item); 
		if (owner.HasCondition<ConBrightnessOfLife>()) 
		{ 
			TryAddAbility(6410); 
		} 
		base.BuildAbilityList(); 
	}

	public override bool TryAbortCombat()

GoalCombat

public virtual bool TryUseAbility(int dist, bool beforeMove = false)

cs
		{
			if (owner.IsPC)
			{
				if (act.vPotential <= 0) 
				if (act.vPotential <= 0 && !owner.ability.Has(act.id)) 
				{
					continue;
				}

int HealFactor(Chara c)

cs
		}
		if (EClass.debug.logCombat && owner.IsPC)
		{
			Debug.Log(ability2.act.Name + "/" + ability2.priority); 
			Debug.Log(ability2.act.Name + "/" + ability2.priority + "/" + ability2.act.CanPerform(owner, ability2.tg ?? tc)); 
		}
		if (ability2.act.source.alias == "ActRanged")
		{

int HealFactor(Chara c)

cs
		Debug.Log(owner.Name + "/" + abilities.Count);
		foreach (ItemAbility ability3 in abilities)
		{
			Debug.Log(ability3.act.Name + "/" + ability3.priority); 
			Debug.Log(ability3.act.Name + "/" + ability3.priority + "/" + ability3.act.CanPerform(owner, ability3.tg ?? tc)); 
		}
	}
	return false;

TraitGene

public override void WriteNote(UINote n, bool identified)

cs
		{
			n.AddText("duration:" + owner.c_DNA.GetDurationHour());
		}
		owner.c_DNA.WriteNote(n); 
		owner.c_DNA.WriteNote(n, flag ? EClass.pc : null); 
		if (flag)
		{
			owner.c_DNA.WriteNoteExtra(n, EClass.pc);

WindowCharaMini

public void Refresh(int idTab)

cs
				});
				uIItem.button2.SetOnClick(delegate
				{
					if (!g.CanRemove()) 
					if (!g.CanRemove(chara)) 
					{
						SE.Beep();
					}