Skip to content

EA 23.284 Nightly Patch 2

March 9, 2026

25 files modified. 2 new files created.

Important Changes

None.

AM_Adv

public override void _OnUpdateInput()

cs
		if (AI_PlayMusic.keepPlaying)
		{
			Thing playingTool = AI_PlayMusic.playingTool;
			if (EInput.IsAnyKeyDown() || (playingTool.GetRootCard() != EClass.pc && (!playingTool.ExistsOnMap || playingTool.Dist(EClass.pc) > 1))) 
			ConSuffocation condition = EClass.pc.GetCondition<ConSuffocation>(); 
			if (EInput.IsAnyKeyDown() || (playingTool.GetRootCard() != EClass.pc && (!playingTool.ExistsOnMap || playingTool.Dist(EClass.pc) > 1)) || (condition != null && condition.GetPhase() > 0)) 
			{
				AI_PlayMusic.CancelKeepPlaying();
				return;

ActEffect

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

cs
		{
			CC.TryDropBossLoot();
		}
		if (CC.id == "bell_silver") 
		{ 
			EClass.player.stats.escapeSilverBell++; 
			if (EClass.player.stats.escapeSilverBell >= 10) 
			{ 
				Steam.GetAchievement(ID_Achievement.BELL); 
			} 
		} 
		CC.Destroy();
		break;
	case EffectId.BurnMana:

ActKiss

public override bool CanPerform()

cs
		{
			return false;
		}
		if (Act.TC.IsPC && Act.TC.Chara.parasite == null && Act.TC.Chara.ride == null) 
		{ 
			return false; 
		} 
		return true;
	}

	public override bool Perform()
	{
		if (Act.CC.IsPC && Act.TC.IsPC) 
		{ 
			Act.TC = ((EClass.rnd(2) == 0 || EClass.pc.parasite == null) ? EClass.pc.ride : EClass.pc.parasite); 
			if (Act.TC == null) 
			{ 
				Act.TC = EClass.pc; 
			} 
		} 
		Act.CC.Kiss(Act.TC.Chara);
		return true;
	}

BaseListPeople

public override void OnRefreshMenu()

cs
				List();
			});
		}
		if (!(this is ListPeopleParty)) 
		{ 
			return; 
		} 
		menuLeft.AddSpace(); 
		menuLeft.AddHeader("party"); 
		if (EClass.pc.party.members.Count > 1) 
		{ 
			menuLeft.AddButton("disband", delegate
			{ 
				EClass.pc.party.Disband(); 
				SE.Trash(); 
				RefreshAll(); 
			}); 
		} 
	}
}

Card

public bool isScaled

cs
		}
	}

	public bool isFav 
	{ 
		get 
		{ 
			return _bits2[10]; 
		} 
		set 
		{ 
			_bits2[10] = value; 
		} 
	} 
	public bool isBackerContent => c_idBacker != 0;

	public SourceBacker.Row sourceBacker

Chara

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

cs
	}
	else
	{
		if (IsPC && HasElement(1274) && a.vPotential < 0 && !flag2) 
		if (IsPC && HasElement(1274) && a.vPotential < 0 && !flag2 && !a.HasTag("dontForget")) 
		{
			Msg.Say("noSpellStock");
			EInput.Consume();

public bool FindNewEnemy()

cs
			}
			stealthSeen++;
		}
		else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!IsPCFaction || EClass.pc.ai.ShouldAllyAttack(chara2))) 
		else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!base.IsPCFactionOrMinion || EClass.pc.ai.ShouldAllyAttack(chara2))) 
		{
			if (!IsPCParty)
			{

public override void SetSortVal(UIList.SortMode m, CurrencyType currency = Curre

cs
		case UIList.SortMode.ByWorkk:
			break;
		}
		if (base.isFav) 
		{ 
			sortVal -= 100000000; 
		} 
	}

	public void ClearBed(Map map = null)

ConPeaky

public override void Tick()

cs
		owner.PlaySound("bike_kick");
		if (owner.host != null)
		{
			owner.host.ModExp((owner.host.ride == owner) ? 226 : 227, owner.Evalue(1423) * 20); 
			owner.host.ModExp((owner.host.ride == owner) ? 226 : 227, owner.Evalue(1423) * 50); 
		}
	}
}

CoreDebug

public void UpdateInput()

cs
	}
	if (Input.GetKeyDown(KeyCode.F2))
	{
		EClass.pc.body.AddBodyPart(35); 
		EClass._zone.development += 10;
		EClass._zone.development *= EClass._zone.development;
		Chara targetChara = EClass.scene.mouseTarget.TargetChara;

DramaManager

public void ParseLine(Dictionary<string, string> item)

cs
			EMono.BranchOrHomeBranch.resources.Get(p2).Mod(p3.ToInt());
		});
		break;
	case "getAchievement":
		AddEvent(delegate
		{ 
			if (new string[1] { "ONEV" }.Contains(p2)) 
			{ 
				Steam.GetAchievement(p2.ToEnum<ID_Achievement>()); 
			} 
		}); 
		break; 
	case "bossText":
		AddEvent(delegate
		{

ELEMENT

public void _WriteNote(UINote n, Chara c, Act act)

cs
	{
		n.AddText("_bullet".lang() + "hintSyncRide".lang());
	}
	if (EClass.pc.HasElement(1274) && source.tag.Contains("dontForget")) 
	{ 
		n.AddText("_bullet".lang() + "hintDontForget".lang()); 
	} 
	if (act.HaveLongPressAction)
	{
		int i = id;

GameDate

public void AdvanceDay()

cs
		{
			EClass.world.SendPackage(ThingGen.Create("box_xmas"));
		}
		foreach (Chara value2 in EClass.game.cards.globalCharas.Values) 
		{ 
			if (value2.IsPCFaction && value2.IsMarried && !value2.c_love.gotMusicBox) 
			{ 
				Date date = Date.ToDate(value2.c_love.dateMarriage); 
				if (date.month == base.month && date.day == base.day) 
				{ 
					value2.c_love.gotMusicBox = true; 
					Thing thing3 = ThingGen.Create("musicbox_memory2"); 
					thing3.MakeRefFrom(value2, EClass.pc, simple: true); 
					Thing thing4 = ThingGen.Create("parchment"); 
					thing4.MakeRefFrom(value2, null, simple: true); 
					thing4.SetStr(53, "letter_love"); 
					Thing p3 = ThingGen.CreateParcel(null, thing3, thing4); 
					EClass.world.SendPackage(p3); 
				} 
			} 
		} 
	}

	public void AdvanceMonth()

GoalCombat

public override IEnumerable<Status> Run()

cs
			}
		}
		tc = owner.enemy;
		if (tc != null && owner.IsPCFaction) 
		if (tc != null && owner.IsPCFactionOrMinion) 
		{
			if (EClass.pc.isHidden && owner.isHidden)
			{

GrowSystem

public void PopHarvest(Chara c, Thing t = null, int num = -1)

cs
		{
			t.SetNum(num);
		}
		int num3 = t.Num; 
		TryPick(cell, t, c);
		if (flag)
		{
			c.ModExpParty(207, Mathf.Min(t.c_weight / 100, 500)); 
			c.ModExpParty(207, Mathf.Min(t.c_weight * num3 / 125, 500)); 
		}
	}

ID_Achievement

public enum ID_Achievement

cs
	DEMITAS,
	KETTLE,
	FAITH_HEALING,
	ONEV 
	ONEV, 
	JURE, 
	BELL 
}

LayerAbility

public void SelectGroup(string id)

cs
			foreach (Element value in ELayer.pc.elements.dict.Values)
			{
				string categorySub = value.source.categorySub;
				if (value.Value != 0 && (!config.hideDepletedSpell || ((!value.PotentialAsStock || value.vPotential > 0) && value.vPotential >= 0)) && (value.id != 6020 || ELayer.pc.HasElement(1216))) 
				if (value.Value != 0 && (!config.hideDepletedSpell || ((!value.PotentialAsStock || value.vPotential > 0 || chara.ability.Has(value.id)) && (value.vPotential >= 0 || value.HasTag("dontForget")))) && (value.id != 6020 || ELayer.pc.HasElement(1216))) 
				{
					if (id == "favAbility" && ELayer.player.favAbility.Contains(value.id))
					{

LayerPeople

public static LayerPeople CreateReserve()

cs
		return layerPeople;
	}

	public static LayerPeople CreateParty() 
	{ 
		LayerPeople layerPeople = Create(Mode.Double); 
		layerPeople.multi.AddOwner(0, new ListPeopleParty
		{ 
			textHeader = "candidates"
		}); 
		layerPeople.multi.AddOwner(1, new ListPeopleParty
		{ 
			textHeader = "faction_Member"
		}); 
		ELayer.ui.AddLayer(layerPeople); 
		return layerPeople; 
	} 
	public static LayerPeople CreateBed(TraitBed bed)
	{
		LayerPeople layerPeople = Create(Mode.Double);

ListOwner

public void MoveToOther(object c)

cs
		RefreshCaption();
		other.RefreshCaption();
	}
	public void RefreshAll(bool freeze = true) 
	{ 
		if (freeze) 
		{ 
			EClass.ui.FreezeScreen(0.1f); 
		} 
		List(); 
		other.List(); 
		RefreshCaption(); 
		other.RefreshCaption(); 
		Main.OnRefreshMenu(); 
	} 
}

+ListPeopleParty

File Created
cs
using System.Linq;

public class ListPeopleParty : BaseListPeople
{
	public override void OnCreate()
	{
		list.sorts = new UIList.SortMode[3]
		{
			UIList.SortMode.ByFeat,
			UIList.SortMode.ByJob,
			UIList.SortMode.ByRace
		};
		list.sortMode = UIList.SortMode.ByFeat;
	}

	public override void OnInstantiate(Chara c, ItemGeneral i)
	{
		Zone zone = (main ? c.currentZone : c.homeZone);
		i.SetSubText((zone == null) ? "???" : zone.Name, 240);
		if (!c.IsPC)
		{
			UIButton uIButton = i.AddSubButton(EClass.core.refs.icons.fav, delegate
			{
				SE.ClickGeneral();
				c.isFav = !c.isFav;
				RefreshAll();
			});
			uIButton.icon.SetAlpha(c.isFav ? 1f : 0.3f);
			uIButton.icon.SetNativeSize();
		}
	}

	public override void OnClick(Chara c, ItemGeneral i)
	{
		if (main)
		{
			if (c.isDead || c.HasCondition<ConSuspend>() || c.currentZone == null)
			{
				SE.Beep();
				return;
			}
			if (c.currentZone != EClass._zone)
			{
				c.MoveZone(EClass._zone);
				c.MoveImmediate(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false) ?? EClass.pc.pos);
			}
			EClass.pc.party.AddMemeber(c);
		}
		else
		{
			if (c.IsPC)
			{
				SE.Beep();
				return;
			}
			EClass.pc.party.RemoveMember(c);
			if (c.homeZone != EClass._zone)
			{
				c.MoveZone(c.homeZone);
			}
		}
		MoveToOther(c);
		base.Main.OnRefreshMenu();
	}

	public override void OnList()
	{
		if (main)
		{
			foreach (Chara value in EClass.game.cards.globalCharas.Values)
			{
				if (value.IsPCFaction && !value.IsPCParty && value.memberType == FactionMemberType.Default)
				{
					list.Add(value);
				}
			}
			return;
		}
		foreach (Chara member in EClass.pc.party.members)
		{
			list.Add(member);
		}
		list.sortMode = UIList.SortMode.ByNone;
	}

	public HireInfo GetInfo(Chara c)
	{
		return EClass.Home.listReserve.First((HireInfo a) => a.chara == c);
	}
}

LoveData

public class LoveData : EClass

cs
	[JsonProperty]
	public bool gaveCutter;

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

Party

public int Count()

cs
		}
		return num;
	}
	public void Disband() 
	{ 
		foreach (Chara item in members.Copy()) 
		{ 
			if (!item.IsPC) 
			{ 
				RemoveMember(item); 
				if (item.homeZone != EClass._zone) 
				{ 
					item.MoveZone(item.homeZone); 
				} 
			} 
		} 
	} 
}

Player

public class Stats : EClass

cs
		[JsonProperty]
		public int angryCats;

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

Religion

public int GetOfferingValue(Thing t, int num = -1)

cs
		void SetValue(SourceCategory.Row cat, int mtp)
		{
			v = Mathf.Clamp(t.SelfWeight / 10, 50, 1000);
			v *= cat.offer * mtp / 100; 
			v = v * cat.offer * mtp / 100; 
		}
	}

public void JoinFaith(Chara c, ConvertType type = ConvertType.Default)

cs
			}
		}
		EClass.pc.PurgeEythArtifact();
		if (this is ReligionHealing) 
		{ 
			Steam.GetAchievement(ID_Achievement.FAITH_HEALING); 
		} 
	}

	public void LeaveFaith(Chara c, Religion newFaith, ConvertType type)

Trait

public void OnBarter(bool reroll = false)

cs
				break;
			}
		}
		Steam.GetAchievement((owner.trait is TraitKettle) ? ID_Achievement.KETTLE : ID_Achievement.DEMITAS); 
		break;
	}
	case ShopType.Specific:

public void OnBarter(bool reroll = false)

cs
		Add("board_map", 1, 0);
		Add("board_build", 1, 0);
		Add("book_resident", 1, 0);
		Add("board_party", 1, 0); 
		Add("3", 1, 0);
		Add("4", 1, 0);
		Add("5", 1, 0);

TraitGene

public override void WriteNote(UINote n, bool identified)

cs

	public override void TrySetHeldAct(ActPlan p)
	{
		if (!p.pos.Equals(EClass.pc.pos) || !EClass.pc.HasElement(1274)) 
		if (owner.c_DNA == null || !p.pos.Equals(EClass.pc.pos) || !EClass.pc.HasElement(1274)) 
		{
			return;
		}

+TraitPartyBoard

File Created
cs
public class TraitPartyBoard : TraitBoard
{
	public override bool IsHomeItem => true;

	public override void TrySetAct(ActPlan p)
	{
		if (EClass._zone.IsPCFaction)
		{
			p.TrySetAct("LayerPeople", () => LayerPeople.CreateParty(), owner);
		}
	}
}

UIMultiList

public void Build(UIList.SortMode m = UIList.SortMode.ByNone)

cs
{
	foreach (ListOwner owner in owners)
	{
		owner.list.sortMode = m; 
		owner.list.sortMode = ((owner is ListPeopleParty) ? UIList.SortMode.ByFeat : m); 
	}
	if (Double)
	{

WindowChara

public static void RefreshNote(Chara chara, UINote n, bool shortMode = false)

cs
			foreach (Chara item in list)
			{
				Date date = Date.ToDate(item.c_love.dateMarriage);
				AddText("item_marriage".lang(item.NameBraced, date.year.ToString() ?? "", date.month.ToString() ?? "", item.c_love.nameZoneMarriage) + (item.c_love.IsWed ? "already_wed".lang() : "")); 
				AddText("item_marriage".lang(item.NameBraced, date.year.ToString() ?? "", date.month.ToString() ?? "", item.c_love.nameZoneMarriage, date.day.ToString() ?? "") + (item.c_love.IsWed ? "already_wed".lang() : "")); 
			}
		}
	}