Skip to content

EA 23.279 Nightly Patch 1

February 28, 2026

7 files modified.

Important Changes

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

Religion (1)

cs
public bool TryGetGift() 
public int GetGiftRank() 

AI_Fish

public override void OnProgressComplete()

cs
		{
			thing.isHidden = false;
		}
		if (EClass.rnd(EClass.debug.enable ? 2 : 100) == 0 && thing.category.IsChildOf("fish")) 
		if (EClass.rnd(EClass.debug.enable ? 2 : 1000) == 0 && thing.category.IsChildOf("fish")) 
		{
			owner.Say("fish_ehe"); 
			owner.Say("fish_ehe2"); 
			owner.PlaySound("escape");
			owner.PlayEffect("fizzle");
			thing.Destroy(); 
			if (owner.IsPC)
			{
				owner.Say("fish_ehe"); 
				owner.Say("fish_ehe2"); 
				owner.Say("fish_ehe3"); 
				EClass.player.flags.fishStolen++;
				Steam.GetAchievement(ID_Achievement.EHE_FISH);
				if (EClass.rnd(777) == 0) 
				{ 
					EClass.pc.AddCondition<ConInvulnerable>(); 
					ActEffect.Proc(EffectId.Wish, EClass.pc, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 50); 
				} 
			}
			thing.Destroy(); 
		}
		else if (owner.IsPC)
		{

ActEffect

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

cs
		Chara chara3 = CharaGen.Create((id == EffectId.Bit) ? "bit2" : "bit");
		chara3.SetMainElement(element.source.alias, element.Value, elemental: true);
		chara3.SetSummon(20 + power / 20 + EClass.rnd(10));
		chara3.SetLv(power / 15); 
		chara3.SetLv(Mathf.Abs(power) / 15); 
		chara3.interest = 0;
		EClass._zone.AddCard(chara3, tp.GetNearestPoint(allowBlock: false, allowChara: false));
		chara3.PlayEffect("teleport");

ActZap

public override bool Perform()

cs
		trait.owner.ModCharge(-1);
		Act.CC.PlayEffect("rod");
		Act.CC.PlaySound("rod");
		Act.CC.RemoveCondition<ConInvisibility>(); 
		if (EClass.rnd(2) == 0) 
		{ 
			Act.CC.RemoveCondition<ConInvisibility>(); 
		} 
		Act.TC = Act.CC;
		EffectId idEffect = trait.IdEffect;
		long a = trait.Power * (100 + (long)Act.CC.Evalue(305) * 10L + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100;

DNA

void AddSpecial()

cs
	}
	void AddVal(int id, int v, bool allowStack, Func<int, int> funcCost)
	{
		bool flag = false; 
		int num = EClass.curve(v, 20, 10, 90); 
		if (v < -100) 
		{ 
			num = EClass.curve(Mathf.Abs(v + 100), 20, 10, 90); 
		} 
		v = EClass.curve(v, 20, 10, 80); 
		for (int k = 0; k < vals.Count; k += 2) 
		if (v >= 0) 
		{
			if (vals[k] == id) 
			bool flag = false; 
			int num = EClass.curve(v, 20, 10, 90); 
			if (v < -100) 
			{ 
				num = EClass.curve(Mathf.Abs(v + 100), 20, 10, 90); 
			} 
			v = EClass.curve(v, 20, 10, 80); 
			for (int k = 0; k < vals.Count; k += 2) 
			{
				if (allowStack) 
				if (vals[k] == id) 
				{
					v /= 2; 
					num /= 2; 
					vals[k + 1] += v; 
					Debug.Log(vals[k + 1] + ": " + v + "/" + num); 
					flag = true; 
					break; 
					if (allowStack) 
					{ 
						v /= 2; 
						num /= 2; 
						vals[k + 1] += v; 
						Debug.Log(vals[k + 1] + ": " + v + "/" + num); 
						flag = true; 
						break; 
					} 
					return; 
				}
				return; 
			}
		} 
		if (v != 0) 
		{ 
			if (!flag) 
			if (v != 0) 
			{
				vals.Add(id); 
				vals.Add(v); 
				if (!flag) 
				{ 
					vals.Add(id); 
					vals.Add(v); 
				} 
				cost += Mathf.Max(0, funcCost(num)); 
			}
			cost += Mathf.Max(0, funcCost(num)); 
		}
	}
}

Religion

void SetValue(SourceCategory.Row cat, int mtp)

cs
		}
	}

	public bool TryGetGift() 
	public int GetGiftRank() 
	{
		if (IsEyth || source.rewards.Length == 0)
		{
			return false; 
			return -1; 
		}
		Point point = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? EClass.pc.pos; 
		int num = EClass.pc.Evalue(85);
		if (giftRank == 0 && (num >= 15 || EClass.debug.enable))
		{ 
			return 1; 
		} 
		if (source.rewards.Length >= 2 && giftRank == 1 && (num >= 30 || EClass.debug.enable)) 
		{ 
			return 2; 
		} 
		return -1; 
	} 
	public bool TryGetGift() 
	{ 
		int num = GetGiftRank(); 
		if (num == -1) 
		{ 
			return false; 
		} 
		Point point = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? EClass.pc.pos; 
		switch (num) 
		{ 
		case 1: 
		{
			Talk("pet");
			Chara chara = CharaGen.Create(source.rewards[0]);

public bool TryGetGift()

cs
		giftRank = 1;
		return true;
	}
	if (source.rewards.Length >= 2 && giftRank == 1 && (num >= 30 || EClass.debug.enable)) 
	case 2:
	{
		Talk("gift");
		string[] array = source.rewards[1].Split('|');

public bool TryGetGift()

cs
			giftRank = 2;
			return true;
		}
		return false; 
		default: 
			return false; 
		} 
	}

	public static Religion GetArtifactDeity(string id)

TraitAltar

public override void TrySetAct(ActPlan p)

cs

	public override bool CanOffer(Card c)
	{
		Debug.Log(Deity); 
		Debug.Log(Deity.id); 
		Debug.Log(IsEyth); 
		if (c != null && c.HasTag(CTAG.godArtifact))
		{
			if (EClass.pc.IsEyth && EClass.pc.HasElement(1228))

public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)

cs
{
	bool @bool = t.GetBool(115);
	int offeringValue = Deity.GetOfferingValue(t, t.Num);
	offeringValue = offeringValue * (c.HasElement(1228) ? 130 : 100) / 100; 
	offeringValue = offeringValue * (EClass.debug.enable ? 1000 : (c.HasElement(1228) ? 130 : 100)) / 100; 
	if (takeoverMod == 0)
	{
		if (offeringValue >= 200)

public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)

cs
	int num = Mathf.Max(c.Evalue(306), 1);
	Element orCreateElement = c.elements.GetOrCreateElement(85);
	int value = orCreateElement.Value;
	c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3); 
	if (orCreateElement.vBase < num) 
	{ 
		c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3); 
		if (orCreateElement.vBase >= num) 
		{ 
			c.elements.SetBase(orCreateElement.id, num); 
		} 
	} 
	int num2 = 4;
	if (orCreateElement.vBase < num)
	{

public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)

cs
		c.elements.ModExp(306, offeringValue / 5);
	}
	c.RefreshFaithElement();
	if (c.faith.GetGiftRank() != -1) 
	{ 
		c.faith.Talk("like"); 
	} 
	if (@bool)
	{
		EClass.player.ModKarma(-1);

TraitWell

public override void TrySetAct(ActPlan p)

cs
			if (EClass.player.CountKeyItem("well_wish") > 0)
			{
				EClass.player.ModKeyItem("well_wish", -1);
				ActEffect.Proc(EffectId.Wish, EClass.pc, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 20); 
				ActEffect.Proc(EffectId.Wish, EClass.pc, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 50); 
				EClass.player.wellWished = true;
			}
			else