Skip to content

EA 23.265 Nightly Patch 2

February 3, 2026

8 files modified.

Important Changes

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

Dialog (1)

cs
public static void TryWarn(string lang, Action action, bool yes = true) 
public static void TryWarn(string lang, Action action, bool yes = true, string text = null) 

Player (1)

cs
public List<Chara> listSummon = new List<Chara>(); 
public List<Chara> listCarryoverMap = new List<Chara>(); 

Zone (1)

cs
public void OnCharaDie() 
public void RefreshDeathSentense() 

Chara

public void MoveZone(Zone z, ZoneTransition transition)

cs
		{
			EClass._zone.RemoveCard(item);
		}
		EClass.player.listSummon = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList(); 
		foreach (Chara item2 in EClass.player.listSummon) 
		EClass.player.listCarryoverMap = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList(); 
		if (!z.IsRegion && (z is Zone_Tent || currentZone is Zone_Tent)) 
		{ 
			foreach (Chara chara in EClass._map.charas) 
			{ 
				if (chara.c_uidMaster == 0 && !chara.IsGlobal && !chara.isNPCProperty && (chara.id == "reaper" || chara.id == "messenger_death") && ((chara.enemy != null && chara.enemy.IsPCFactionOrMinion) || chara.Dist(EClass.pc) < 5)) 
				{ 
					EClass.player.listCarryoverMap.Add(chara); 
				} 
			} 
		} 
		foreach (Chara item2 in EClass.player.listCarryoverMap) 
		{
			EClass._zone.RemoveCard(item2);
		}

public override void Die(Element e = null, Card origin = null, AttackSource atta

cs
			chara2.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
			Msg.Say("plant_pop", this, chara2);
		}
		EClass._zone.OnCharaDie(); 
		EClass._zone.RefreshDeathSentense(); 
		EClass._zone.events.OnCharaDie(this);
	}

ConTransmuteMimic

public override void Tick()

cs

	public override void OnBeforeStart()
	{
		List<Thing> list = owner.things.List((Thing t) => !t.IsMultisize && t.c_isImportant, onlyAccessible: true); 
		List<Thing> list = owner.things.List((Thing t) => !t.source.multisize && t.c_isImportant, onlyAccessible: true); 
		if (list.Count == 0)
		{
			list = owner.things.List((Thing t) => !t.IsMultisize && !t.isEquipped, onlyAccessible: true); 
			list = owner.things.List((Thing t) => !t.source.multisize && !t.isEquipped, onlyAccessible: true); 
		}
		if (list.Count > 0)
		{

Dialog

public static Dialog List<TValue>(string langDetail, ICollection<TValue> items,

cs
		return d;
	}

	public static void TryWarn(string lang, Action action, bool yes = true) 
	public static void TryWarn(string lang, Action action, bool yes = true, string text = null) 
	{
		Dialog d = Layer.Create<Dialog>();
		d.textDetail.SetText(lang.lang() + " "); 
		d.textDetail.SetText(text ?? (lang.lang() + " ")); 
		d.SetOnKill(delegate
		{
			ELayer.core.actionsNextFrame.Add(delegate

public static void TryWarn(string lang, Action action, bool yes = true)

cs
	{
		d.list.AddButton(null, Lang.Get("no_dontask"), delegate
		{
			string text = lang; 
			if (!(text == "warn_parallels")) 
			string text2 = lang; 
			if (!(text2 == "warn_parallels")) 
			{
				if (text == "warn_linuxMod") 
				if (text2 == "warn_linuxMod") 
				{
					ELayer.core.config.ignoreLinuxModWarning = true;
				}

public static void TryWarnSlaughter(Action action, Chara c)

cs
		}
		else
		{
			TryWarn("warn_slaughter".lang(c.Name), action); 
			TryWarn("warn_slaughter", action, yes: true, "warn_slaughter".lang(c.Name)); 
		}
	}

Player

public void OnLeaveZone()

cs

	public PlayingSong playingSong;

	public List<Chara> listSummon = new List<Chara>(); 
	public List<Chara> listCarryoverMap = new List<Chara>(); 

	public int autoCombatStartHP;

RecipeCard

public string GetIdFailDish()

cs
		"meal_egg" => "fail_egg", 
		"meal_rice" => "fail_rice", 
		"meal_soup" => "fail_drink", 
		"meal_cookie" => "fail_nuts",  
		_ => "fail_dish", 
	};
}

RendererReplacer

public class RendererReplacer : EClass

cs

	public static RendererReplacer CreateFrom(string id, int shift = 0, int mat = -1)
	{
		CardRow cardRow = EClass.sources.cards.map[id]; 
		CardRow cardRow = EClass.sources.cards.map.TryGetValue(id); 
		if (cardRow == null || cardRow.tiles.Length == 0) 
		{ 
			cardRow = EClass.sources.cards.map["money2"]; 
		} 
		return new RendererReplacer
		{
			tile = cardRow._tiles[0] + shift,

SerializedCards

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

cs
			{
				card2.Chara.ScaleByPrincipal();
			}
			if (isUserZone) 
			{ 
				card2.isNPCProperty = true; 
			} 
		}
		if (card2.trait is TraitFakeTile)
		{

Zone

public void Activate()

cs
		}
		foreach (Chara c3 in map.serializedCharas)
		{
			if (c3.c_uidMaster == 0 || EClass.player.listSummon.Find((Chara c2) => c2.uid == c3.uid) == null) 
			if (c3.c_uidMaster == 0 || EClass.player.listCarryoverMap.Find((Chara c2) => c2.uid == c3.uid) == null) 
			{
				map.charas.Add(c3);
				map.AddCardOnActivate(c3);

public void OnVisit()

cs
	}
	if (!EClass.game.isLoading)
	{
		foreach (Chara chara2 in EClass._map.charas) 
		{ 
			if (chara2.HasCondition<ConDeathSentense>()) 
			{ 
				chara2.RemoveCondition<ConDeathSentense>(); 
			} 
		} 
		RefreshDeathSentense(); 
	}
	RefreshCriminal();
	EClass._map.rooms.AssignCharas();

public void OnVisit()

cs
		}
	}

	public void OnCharaDie() 
	public void RefreshDeathSentense() 
	{
		foreach (Chara chara in EClass._map.charas)
		{

public void AddGlobalCharasOnActivate()

cs
			map.AddCardOnActivate(c);
		}
	}
	foreach (Chara item in EClass.player.listSummon) 
	foreach (Chara item in EClass.player.listCarryoverMap) 
	{
		Point nearestPoint = spawnPosPC.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
		item.enemy = null;

public void AddGlobalCharasOnActivate()

cs
			map.charas.Add(item);
			map.AddCardOnActivate(item);
		}
		EClass.player.listSummon.Clear(); 
		EClass.player.listCarryoverMap.Clear(); 
	}

	public void Deactivate()