Skip to content

EA 23.278 Nightly

February 27, 2026

23 files modified.

Important Changes

None.

AI_Fish

public override void OnProgressComplete()

cs
		{
			thing.isHidden = false;
		}
		if (owner.IsPC) 
		if (EClass.rnd(EClass.debug.enable ? 2 : 100) == 0 && thing.category.IsChildOf("fish")) 
		{ 
			owner.Say("fish_ehe"); 
			owner.Say("fish_ehe2"); 
			owner.PlaySound("escape"); 
			owner.PlayEffect("fizzle"); 
			thing.Destroy(); 
			if (owner.IsPC) 
			{ 
				EClass.player.flags.fishStolen++; 
				Steam.GetAchievement(ID_Achievement.EHE_FISH); 
			} 
		} 
		else if (owner.IsPC) 
		{
			if (EClass.game.config.preference.pickFish)
			{

AI_Fuck

public override IEnumerable<Status> Run()

cs
				}
				break;
			}
			if (((cc.HasElement(1216) || tc.HasElement(1216)) ? 100 : 20) > EClass.rnd(100)) 
			{ 
				((EClass.rnd(2) == 0) ? cc : tc).PlayEffect("love2"); 
			} 
			if (variation == Variation.Slime)
			{
				owner.DoHostileAction(target);

AI_Idle

public override IEnumerable<Status> Run()

cs
				num = EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(500)))) + 1;
				string[] strs = new string[4] { "1294", "1294", "1130", "1131" };
				ThrowMethod throwMethod = ThrowMethod.Reward;
				if (owner.affinity.CurrentStage <= Affinity.Stage.Hate || owner.IsMarried || (EClass.debug.enable && EClass.rnd(10) == 0)) 
				if (owner.affinity.IsWeddingHater || owner.IsMarried || (EClass.debug.enable && EClass.rnd(10) == 0)) 
				{
					owner.Talk("curse_wed");
					throwMethod = ThrowMethod.Punish;

ActEffect

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

cs
		TC.Say("heal_jure", TC);
		break;
	case EffectId.Headpat:
		CC.PlaySound("headpat"); 
		CC.Cuddle(TC, headpat: true);
		break;
	case EffectId.RemoveHex:

ActZap

public override bool Perform()

cs
		Act.CC.RemoveCondition<ConInvisibility>();
		Act.TC = Act.CC;
		EffectId idEffect = trait.IdEffect;
		int power = trait.Power * (100 + Act.CC.Evalue(305) * 10 + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100; 
		ActEffect.ProcAt(idEffect, power, trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
		long a = trait.Power * (100 + (long)Act.CC.Evalue(305) * 10L + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100; 
		ActEffect.ProcAt(idEffect, MathEx.Min(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
		{
			refThing = trait.owner.Thing,
			aliasEle = trait.aliasEle,

Affinity

public enum Stage

cs

	public string Name => Lang.GetList("affinity").TryGet(list.IndexOf(this), list.Count - 1);

	public bool IsWeddingHater => CurrentStage <= Stage.Hate; 
	public static Affinity Get(Chara c)
	{
		CC = c;

BaseSong

public class BaseSong : BaseStance

cs
public class BaseSong : BaseStance
{
	public virtual int IdAbility => -1; 
	public override void OnStart()
	{
		owner.ShowEmo(Emo.happy);

public override void OnStart()

cs

	public override void Tick()
	{
		if (!EClass._zone.IsRegion) 
		if (EClass._zone.IsRegion) 
		{ 
			return; 
		} 
		if (owner.HasCondition<ConSilence>()) 
		{ 
			Kill(); 
			return; 
		} 
		Element element = owner.elements.GetElement(IdAbility); 
		if (element != null) 
		{
			if (owner.HasCondition<ConSilence>()) 
			{ 
				Kill(); 
			} 
			else
			{ 
				TickSong(); 
			} 
			owner.elements.ModExp(element.id, 20f); 
		}
		TickSong(); 
	}

	public virtual void TickSong()

Chara

public void ShowDialog()

cs
		}
		if (EClass._zone is Zone_Music || EClass._zone is Zone_Wedding)
		{
			ShowDialog("_chara", (!(EClass._zone is Zone_Wedding)) ? "party" : (IsPCParty ? "wedding_love" : "wedding")); 
			string step = ((!(EClass._zone is Zone_Wedding)) ? "party" : (IsPCParty ? "wedding_love" : ((IsMarried || affinity.IsWeddingHater) ? "wedding_hater" : "wedding"))); 
			if (EClass._zone is Zone_Wedding && IsPCParty && base.c_love != null && !base.c_love.gaveCutter) 
			{ 
				step = "wedding_cutter"; 
				EClass.player.DropReward(ThingGen.Create("dagger_cakecutter")); 
				base.c_love.gaveCutter = true; 
			} 
			ShowDialog("_chara", step); 
			return;
		}
		if (EClass.game.quests.OnShowDialog(this))

FactionBranch

public void AddMemeber(Chara c)

cs
		{
			uidMaid = c.uid;
		}
		if (c.id == "lomias") 
		switch (c.id) 
		{
		case "lomias": 
			Steam.GetAchievement(ID_Achievement.LOMIAS2);
			break; 
		case "larnneire": 
			Steam.GetAchievement(ID_Achievement.LARNNEIRE2); 
			break; 
		case "melilith": 
			Steam.GetAchievement(ID_Achievement.MELILITH); 
			break; 
		}
	}

FoodEffect

public static void Proc(Chara c, Thing food, bool consume = true)

cs
	}
	if (!c2.IsCat && food.trait is TraitFoodChuryu)
	{
		int num10 = 0; 
		foreach (Chara item in c2.pos.ListCharasInRadius(c2, 5, (Chara c) => c.IsCat))
		{
			item.Say("angry", item);

public static void Proc(Chara c, Thing food, bool consume = true)

cs
			{
				EClass.player.ModKarma(-3);
			}
			num10++; 
		} 
		EClass.player.stats.angryCats += num10; 
		Debug.Log(num10 + "/" + EClass.player.stats.angryCats); 
		if (num10 >= 10) 
		{ 
			Steam.GetAchievement(ID_Achievement.CHURYU); 
		}
	}
	if (c2.IsPC && EClass._zone is Zone_Lothria)

GoalCombat

public override IEnumerable<Status> Run()

cs
			owner.PlaySound("boost");
			owner.ShowEmo(Emo.love);
			owner.lastEmo = Emo.angry;
			owner.MakeMinion(tc.IsPCParty ? EClass.pc : tc); 
			owner.MakeMinion(tc); 
			yield return Success();
		}
		if (EClass.rnd(5) == 0 && tc.HasElement(1325) && owner.IsPlant && owner.CanBeTempAlly(tc))

ID_Achievement

public enum ID_Achievement

cs
	PUTIT,
	ASHLAND_PIE,
	JURE_WATER,
	WINDOW_CHARM 
	WINDOW_CHARM, 
	EHE_FISH, 
	CHURYU, 
	MELILITH, 
	LARNNEIRE, 
	LARNNEIRE2 
}

LoveData

public class LoveData : EClass

cs
	[JsonProperty]
	public string nameZoneMarriage;

	[JsonProperty] 
	public bool gaveCutter; 
	public bool IsWed => dateWedding != 0;
}

Player

public class Stats : EClass

cs
		[JsonProperty]
		public int divorced;

		[JsonProperty] 
		public int angryCats; 
		[JsonProperty]
		public long shipMoney;

public int reward_killkill

cs
			}
		}

		public int fishStolen 
		{ 
			get 
			{ 
				return ints[21]; 
			} 
			set 
			{ 
				ints[21] = value; 
			} 
		} 
		[OnSerializing]
		private void _OnSerializing(StreamingContext context)
		{

SerializedCards

public void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial = nu

cs
			}
			card2.c_IDTState = card4.idtState;
		}
		else if (card2.trait is TraitMannequin) 
		{ 
			card2.c_lockLv = 1; 
		} 
		if (card2.isChara)
		{
			card2.Chara.homeZone = EClass._zone;

StanceSongEnd

``

cs

public class StanceSongEnd : BaseSong
{
	public override int IdAbility => 6753; 
	public override void TickSong()
	{
		foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => !c.IsDeadOrSleeping && c.IsHostile(owner)))

StanceSongSleep

``

cs

public class StanceSongSleep : BaseSong
{
	public override int IdAbility => 6750; 
	public override void TickSong()
	{
		foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => !c.IsDeadOrSleeping && c.IsHostile(owner)))

StanceSongValor

public class StanceSongValor : BaseSong

cs
public class StanceSongValor : BaseSong
{
	public override int IdAbility => 6752; 
	public override void TickSong()
	{
		foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => (c.IsDeadOrSleeping || !owner.IsPCFactionOrMinion) ? (!c.IsHostile(owner)) : c.IsPCFactionOrMinion))

TraitAltar

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

cs
	int value = orCreateElement.Value;
	c.elements.ModExp(orCreateElement.id, offeringValue * 2 / 3);
	int num2 = 4;
	if (orCreateElement.vBase >= num) 
	{ 
		c.elements.SetBase(orCreateElement.id, num); 
	} 
	else
	if (orCreateElement.vBase < num) 
	{
		num2 = Mathf.Clamp(orCreateElement.vBase * 100 / num / 25, 0, 3);
	}

TraitFloorSwitch

public override void OnStepped(Chara c)

cs
		{
			owner.Say("levitating");
		}
		else if (!CanDisarmTrap || (!TryDisarmTrap(c) && EClass.pc.Evalue(1656) < 3)) 
		else if (!CanDisarmTrap || (!TryDisarmTrap(c) && (!c.IsPCFactionOrMinion || EClass.pc.Evalue(1656) < 3))) 
		{
			ActivateTrap(c);
		}

TraitMannequin

public class TraitMannequin : TraitItem

cs

	public override bool CanUseContent => false;

	public override bool UseAltTiles => owner.things.Count > 0; 
	public override bool UseAltTiles 
	{ 
		get 
		{ 
			if (owner.things.Count <= 0) 
			{ 
				return owner.c_lockLv != 0; 
			} 
			return true; 
		} 
	} 

	public override bool CanUseFromInventory => false;

TraitSwitch

public bool TryDisarmTrap(Chara c)

cs
		c.Say("disarm_success", c, owner);
		owner.PlaySound("disarm");
		c.ModExp(293, 50 + TrapLv);
		int num = (EClass.debug.enable ? 10 : EClass.pc.Evalue(1656)); 
		if (!c.IsPCParty) 
		{ 
			num = 0; 
		} 
		int num = (EClass.debug.enable ? 10 : (c.IsPCFactionOrMinion ? EClass.pc.Evalue(1656) : 0)); 
		if (!IsLaidByDog && num > 0 && num + 2 > EClass.rnd(10))
		{
			string id = "scrap";

public bool TryDisarmTrap(Chara c)

cs
	c.Say("disarm_fail", c, owner);
	c.PlaySound("disarm_fail");
	c.ModExp(293, 20 + TrapLv / 3);
	if (c.IsPCFaction) 
	if (c.IsPCParty) 
	{
		int @int = owner.GetInt(60);
		owner.SetInt(60, @int + 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); 
				ActEffect.Proc(EffectId.Wish, EClass.pc, null, 50 + EClass.player.CountKeyItem("well_enhance") * 50 + EClass.player.flags.fishStolen * 20); 
				EClass.player.wellWished = true;
			}
			else