Skip to content

EA 23.184 Nightly Patch 1

August 20, 2025

13 files modified. 2 new files created.

Important Changes

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

Point (1)

cs
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false) 
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false, int minRadius = 0) 

Chara

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

cs
				MakeEgg();
				if (IsPCFaction)
				{
					EClass.Branch.RemoveMemeber(this); 
					homeBranch.RemoveMemeber(this); 
				}
			}
			PlayEffect("revive");

public void TryDropBossLoot()

cs
		EClass.Sound.StopBGM(3f);
		EClass._zone.SetBGM(1, refresh: false);
		break;
	case "fairy_raina":
	case "fairy_poina":
	{ 
		bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null; 
		QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>(); 
		if (num2 && questNasu != null && questNasu.phase == 1) 
		{ 
			num = 5; 
			flag = (flag2 = true); 
			EClass.Sound.StopBGM(3f); 
			EClass._zone.SetBGM(1, refresh: false); 
			EClass.player.DropReward(ThingGen.Create("backpack_holding")); 
			questNasu.NextPhase(); 
		} 
		break; 
	} 
	case "isygarad":
	{
		num = 5;

CraftUtil

public static void WrapIngredient(Card product, Chara c, Card ing, WrapType wrap

cs
		if (value.IsFoodTraitMain)
		{
			int num = value.Value;
			if (product.id == "lunch_dystopia" && (wrapType == WrapType.Dark || num < 0)) 
			if (ing.id == "lunch_dystopia" && (wrapType == WrapType.Dark || num < 0)) 
			{
				num *= -1;
			}

DramaManager

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

cs
		flag2 = true;
		lastTalk.AddChoice(new DramaChoice(text, jump, p2, cHECK, text4));
		break;
	case "addTempActor":
	{ 
		Person person = new Person(actor); 
		Chara chara = EMono.game.cards.globalCharas.Find(actor) ?? EMono._map.FindChara(actor); 
		if (chara != null) 
		{ 
			person.SetChara(chara); 
		} 
		sequence.AddActor(actor, person); 
		break; 
	} 
	case "addActor":
	{
		if (actor == "god")

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

cs
	case "destroy":
		AddEvent(delegate
		{
			Chara chara = EMono._map.FindChara(p2); 
			if (chara != null) 
			Chara chara2 = EMono._map.FindChara(p2); 
			if (chara2 != null) 
			{
				chara.Destroy(); 
				chara2.Destroy(); 
			}
			else
			{

public bool CheckIF(string IF)

cs
		return EMono.player.dialogFlags.TryGetValue(array[1], 0) == 0;
	case "hasItem":
		return EMono.pc.things.Find(array[1]) != null;
	case "nasuDeliver":
		if (EMono.game.quests.GetPhase<QuestNasu>() == 2) 
		{ 
			return EMono.pc.things.Find("backpack_holding") != null; 
		} 
		return false; 
	case "isCompleted":
		return EMono.game.quests.IsCompleted(array[1]);
	case "costRecruit":

DramaOutcome

public void revive_pet()

cs
		cc.ModAffinity(EMono.pc, -2);
	}

	public void nasu_join() 
	{ 
		if (cc.id == "fairy_nanasu") 
		{ 
			cc.MakeAlly(); 
		} 
	} 
	public void melilith_friend()
	{
		if (cc.id == "melilith" && EMono.game.quests.completedIDs.Contains("melilith"))

DramaSequence

public DramaActor GetActor(string id)

cs
	{
		return AddActor(id, new Person(id));
	}
	if (EClass.core.IsGameStarted) 
	{ 
		Chara chara = EClass.game.cards.globalCharas.Find(id) ?? EClass._map.FindChara(id); 
		if (chara != null) 
		{ 
			return AddActor(id, new Person(chara)); 
		} 
	} 
	if (actors.Count <= 0)
	{
		return GetActor("narrator");

Party

public void AddMemeber(Chara c, bool showMsg = false)

cs
		WidgetRoster.SetDirty();
	}

	public Chara Find(string id) 
	{ 
		foreach (Chara member in members) 
		{ 
			if (member.id == id) 
			{ 
				return member; 
			} 
		} 
		return null; 
	} 
	public void RemoveMember(Chara c)
	{
		if (c.host != null)

Point

public float GetAngle2(Point to)

cs
		return Mathf.Atan2(to.z - z, num) * 57.29578f;
	}

	public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false) 
	public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false, int minRadius = 0) 
	{
		Point p = new Point();
		int num = 1; 
		int num2 = x; 
		int num3 = z; 
		if (IsValid(num2, num3)) 
		int r = 1; 
		int num = x; 
		int num2 = z; 
		if (IsValid(num, num2)) 
		{
			return p;
		}
		if (IsValid(num2, num3 + 1)) 
		if (IsValid(num, num2 + 1)) 
		{
			return p;
		}
		for (int i = 0; i < 30; i++)
		{
			for (int j = 0; j < num; j++) 
			for (int j = 0; j < r; j++) 
			{
				num2++; 
				if (IsValid(num2, num3)) 
				num++; 
				if (IsValid(num, num2)) 
				{
					return p;
				}
			}
			for (int k = 0; k < num; k++) 
			for (int k = 0; k < r; k++) 
			{
				num3++; 
				if (IsValid(num2, num3)) 
				num2++; 
				if (IsValid(num, num2)) 
				{
					return p;
				}
			}
			num++; 
			for (int l = 0; l < num; l++) 
			r++; 
			for (int l = 0; l < r; l++) 
			{
				num2--; 
				if (IsValid(num2, num3)) 
				num--; 
				if (IsValid(num, num2)) 
				{
					return p;
				}
			}
			for (int m = 0; m < num; m++) 
			for (int m = 0; m < r; m++) 
			{
				num3--; 
				if (IsValid(num2, num3)) 
				num2--; 
				if (IsValid(num, num2)) 
				{
					return p;
				}
			}
			num++; 
			r++; 
		}
		p.Set(this);
		return p;
		bool IsValid(int dx, int dz)
		{
			p.Set(dx, dz);
			if (minRadius > r / 2) 
			{ 
				return false; 
			} 
			if (!p.IsInBounds || !map.Contains(dx, dz) || (ignoreCenter && dx == x && dz == z))
			{
				return false;

+QuestNasu

File Created
cs
public class QuestNasu : QuestSequence
{
	public override void OnComplete()
	{
		Thing thing = EClass.pc.things.Find("backpack_holding");
		person.chara.AddCard(thing);
		thing.isGifted = true;
		DropReward(ThingGen.Create("697").SetNum(77));
		DropReward(TraitSeed.MakeSeed("feywood").SetNum(10));
		DropReward(TraitSeed.MakeSeed("coralwood").SetNum(10));
		if (person.chara.IsPCFaction)
		{
			person.chara.homeBranch.BanishMember(person.chara);
		}
	}
}

Region

public void CheckRandomSites()

cs
			dateCheckSites = EClass.world.date.GetRaw() + 1440;
			UpdateRandomSites();
		}
		if (FindZone("foxtown_nefu") == null) 
		{ 
			SpatialGen.Create("foxtown_nefu", this, register: true); 
		} 
		if (FindZone("little_garden") == null) 
		{ 
			SpatialGen.Create("little_garden", this, register: true); 
		} 
		if (FindZone("cave_yeek") == null) 
		{ 
			SpatialGen.Create("cave_yeek", this, register: true); 
		} 
		if (FindZone("village_exile") == null) 
		{ 
			SpatialGen.Create("village_exile", this, register: true); 
		} 
		if (FindZone("temple_undersea") == null) 
		TryAddZone("cave_fairy"); 
		TryAddZone("foxtown_nefu"); 
		TryAddZone("little_garden"); 
		TryAddZone("cave_yeek"); 
		TryAddZone("village_exile"); 
		TryAddZone("temple_undersea"); 
		elomap.objmap.UpdateMeshImmediate(); 
		void TryAddZone(string id) 
		{
			SpatialGen.Create("temple_undersea", this, register: true); 
			if (FindZone(id) == null) 
			{ 
				SpatialGen.Create(id, this, register: true); 
			} 
		}
		elomap.objmap.UpdateMeshImmediate(); 
	}

	public void RenewRandomSites()

TraitChara

public virtual bool CanSellPlan

cs

	public virtual Adv_Type AdvType => Adv_Type.None;

	public virtual bool EnableTone => !IsUnique; 
	public virtual bool EnableTone 
	{ 
		get 
		{ 
			if (IsUnique) 
			{ 
				return !LayerDrama.Instance; 
			} 
			return true; 
		} 
	} 

	public virtual bool CanBeTamed
	{

TraitMixedFood

public class TraitMixedFood : TraitFood

cs
public class TraitMixedFood : TraitFood
public class TraitMixedFood : TraitFoodMeal
{
	public override bool CanSearchContent => false;

	public override bool CanStack => false;
	public override int DefaultStock => 1; 
}

TraitNanasu

public class TraitNanasu : TraitUniqueChara

cs
public class TraitNanasu : TraitUniqueChara
{
	public override bool CanInvite => false; 
	public override bool CanInvite => EClass.game.quests.IsCompleted("nasu"); 
	public override bool CanBeBanished => EClass.game.quests.IsCompleted("nasu"); 
}

TraitStairsLocked

public override bool OnUse(Chara c)

cs
		Zone.ignoreSpawnAnime = true;
		EClass._zone.AddCard(thing, owner.pos.x, owner.pos.z);
		thing.SetPlaceState(PlaceState.installed);
		if (EClass._zone is Zone_DungeonFairy) 
		{ 
			EClass.pc.party.Find("fairy_nanasu")?.Talk("unlock_stairs_nasu"); 
		} 
		return true;
	}
}

Zone

public Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState = ZoneTran

cs
			}
			if (base.lv == 0)
			{
				goto IL_0499; 
				goto IL_04a1; 
			}
			flag = base.lv <= 0;
			break;

public Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState = ZoneTran

cs
			break;
		}
		break;
		IL_0499: 
		IL_04a1: 
		enterState = ZoneTransition.EnterState.Center;
	}
	foreach (Thing thing5 in map.things)

+Zone_DungeonFairy

File Created
cs
public class Zone_DungeonFairy : Zone_Dungeon
{
	public override int MinLv => LvBoss;

	public override bool CanUnlockExit
	{
		get
		{
			if (EClass.pc.party.Find("fairy_nanasu") != null)
			{
				return EClass.game.quests.GetPhase<QuestNasu>() == 0;
			}
			return false;
		}
	}

	public int LvBoss => -5;

	public bool IsBossLv => base.lv == LvBoss;

	public override string GetDungenID()
	{
		if (IsBossLv)
		{
			return "CavernBig";
		}
		return base.GetDungenID();
	}

	public override void OnGenerateMap()
	{
		if (IsBossLv)
		{
			Chara t = CharaGen.Create("fairy_poina");
			Chara t2 = CharaGen.Create("fairy_raina");
			Point point = EClass._map.FindThing<TraitStairsUp>().owner.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false, ignoreCenter: true, 5) ?? EClass._map.GetCenterPos();
			AddCard(t, point);
			AddCard(t2, point.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? point);
			LayerDrama.Activate("fairy_nanasu", "fairy_nanasu", "battle", EClass.pc.party.Find("fairy_nanasu"));
		}
		base.OnGenerateMap();
	}
}