Skip to content

EA 23.134 Nightly

May 7, 2025

17 files modified. 1 new file created.

Important Changes

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

Region (1)

cs
public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRadius = false) 
public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRadius = false, ElomapSiteType type = ElomapSiteType.Nefia) 

AI_Read

@@ -10,9 +10,9 @@ public override bool LocalAct

cs
	{
		if (target != null)
		{
			if (!(target.trait is TraitStoryBook)) 
			if (!(target.trait is TraitStoryBook) && !(target.trait is TraitDeedRelocate)) 
			{
				return !(target.trait is TraitDeedRelocate); 
				return !(target.trait is TraitScrollMap); 
			}
			return false;
		}

ActClearWater

@@ -27,7 +27,7 @@ public static bool HasWaterSource(Point p)

cs
{
	foreach (Thing thing in p.Things)
	{
		if ((thing.trait is TraitWell && thing.c_charges > 0) || thing.trait is TraitBath || thing.id == "387" || thing.id == "486" || thing.id == "876" || thing.id == "867" || thing.id == "1158") 
		if (thing.trait is TraitWell || thing.trait is TraitBath || thing.id == "387" || thing.id == "486" || thing.id == "876" || thing.id == "867" || thing.id == "1158") 
		{
			return true;
		}

ActThrow

@@ -263,7 +263,7 @@ public static EffectIRenderer Throw(Card c, Point p, Card target, Thing t, Throw

cs
			Chara chara2 = Act.TC.Chara;
			if (traitMonsterBall.IsLittleBall)
			{
				if (chara2.id != "littleOne" || EClass._zone is Zone_LittleGarden || EClass._zone.IsUserZone) 
				if (chara2.id != "littleOne" || chara2.IsPCFactionOrMinion || EClass._zone is Zone_LittleGarden || EClass._zone.IsUserZone) 
				{
					Msg.Say("monsterball_invalid");
					break;

BaseListPeople

@@ -367,19 +367,22 @@ public override void OnClick(Chara c, ItemGeneral i)

cs
					});
				}
			}
			uIContextMenu.AddButton("makeMaid", delegate
			if (c.homeBranch == EClass.Branch) 
			{
				if (EClass.Branch.uidMaid == c.uid) 
				uIContextMenu.AddButton("makeMaid", delegate
				{
					EClass.Branch.uidMaid = 0; 
				} 
				else 
				{ 
					EClass.Branch.uidMaid = c.uid; 
				} 
				list.Refresh(); 
				SE.Click(); 
			}); 
					if (EClass.Branch.uidMaid == c.uid) 
					{ 
						EClass.Branch.uidMaid = 0; 
					} 
					else
					{ 
						EClass.Branch.uidMaid = c.uid; 
					} 
					list.Refresh(); 
					SE.Click(); 
				}); 
			} 
			int @int = c.GetInt(36);
			bool isLivestockTimerOn = memberType == FactionMemberType.Default && !EClass.world.date.IsExpired(@int);
			int remainingHours = EClass.world.date.GetRemainingHours(@int);

@@ -406,23 +409,23 @@ public override void OnClick(Chara c, ItemGeneral i)

cs
						SE.Click();
					}
				});
				uIContextMenu.AddButton("addToReserve".lang() + " (" + EClass.Home.listReserve.Count + "/" + EClass.Home.GetMaxReserve() + ")", delegate
				{ 
					if (EClass.Home.listReserve.Count >= EClass.Home.GetMaxReserve()) 
					{ 
						SE.Beep(); 
						Msg.Say("reserveLimit"); 
						return; 
					} 
					SE.MoveZone(); 
					EClass.Home.AddReserve(c); 
					list.List(); 
					foreach (ListOwner owner2 in layer.multi.owners) 
					{ 
						owner2.RefreshTab(); 
					} 
				}); 
			}
			uIContextMenu.AddButton("addToReserve".lang() + " (" + EClass.Home.listReserve.Count + "/" + EClass.Home.GetMaxReserve() + ")", delegate
			{ 
				if (EClass.Home.listReserve.Count >= EClass.Home.GetMaxReserve()) 
				{ 
					SE.Beep(); 
					Msg.Say("reserveLimit"); 
					return; 
				} 
				SE.MoveZone(); 
				EClass.Home.AddReserve(c); 
				list.List(); 
				foreach (ListOwner owner2 in layer.multi.owners) 
				{ 
					owner2.RefreshTab(); 
				} 
			}); 
		}
	}
	uIContextMenu.Show();

@@ -448,6 +451,13 @@ public override void OnList()

cs
				list.Add(member);
			}
		}
		foreach (Chara member2 in EClass.pc.party.members) 
		{ 
			if (member2.memberType == memberType && !list.items.Contains(member2)) 
			{ 
				list.Add(member2); 
			} 
		} 
	}

	public override void OnRefreshMenu()

Card

@@ -6752,11 +6752,18 @@ public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
		switch (currency)
		{
		case CurrencyType.Ecopo:
			if (id == "plat") 
		{ 
			string text = id; 
			if (!(text == "plat")) 
			{
				return 500; 
				if (!(text == "whip_egg")) 
				{ 
					break; 
				} 
				return 3000; 
			}
			break; 
			return 500; 
		} 
		case CurrencyType.Plat:
		{
			string text = id;

CardRenderer

@@ -395,6 +395,7 @@ public SourcePref GetPref()

cs
			case 2622:
			case 2624:
			case 2626:
			case 2828:
				return EClass.core.refs.prefs.snowputit2;
			}
		}

ConSuffocation

@@ -44,7 +44,11 @@ public override void Tick()

cs
	}
	if (owner != null && owner.IsAliveInCurrentZone)
	{
		if (!owner.Cell.CanSuffocate()) 
		if (!owner.IsPC) 
		{ 
			Mod(owner.IsPowerful ? (-15) : (-5)); 
		} 
		else if (!owner.Cell.CanSuffocate()) 
		{
			Mod(-25);
		}

DramaCustomSequence

@@ -316,7 +316,7 @@ public void Build(Chara c)

cs
		if (!c.isSummon)
		{
			Choice((c.GetInt(106) == 0) ? "daShutup" : "daShutup2", "_shutup");
			if (c.CanInsult()) 
			if (c.CanInsult() || c.GetInt(108) == 1) 
			{
				Choice((c.GetInt(108) == 0) ? "daInsult" : "daInsult2", "_insult");
			}

EloMap

@@ -410,6 +410,20 @@ public bool CanBuildSite(int gx, int gy, int radius = 0, ElomapSiteType type = E

cs
		return true;
	}

	public bool IsWater(int gx, int gy) 
	{ 
		if (GetCell(gx, gy) == null) 
		{ 
			return false; 
		} 
		SourceGlobalTile.Row row = GetSources(gx, gy).LastItem(); 
		if (row != null) 
		{ 
			return row.id == 4; 
		} 
		return false; 
	} 
	public bool IsSnow(int gx, int gy)
	{
		if (GetCell(gx, gy) == null)

FACTION

@@ -324,6 +324,10 @@ public void AddContribution(int a)

cs

	public void AddReserve(Chara c)
	{
		if (c.IsPCParty) 
		{ 
			EClass.pc.party.RemoveMember(c); 
		} 
		if (c.memberType == FactionMemberType.Livestock)
		{
			c.SetInt(36, EClass.world.date.GetRaw() + 14400);

MapGenDungen

@@ -33,6 +33,11 @@ protected override bool OnGenerateTerrain()

cs
		biome.exterior.floor.mat = MATERIAL.GetRandomMaterialFromCategory(zone.lv % 50 + 10, "rock", EClass.sources.materials.alias["granite"]).id;
		biome.exterior.floor.matSub = MATERIAL.GetRandomMaterialFromCategory(zone.lv % 50 + 10, "rock", EClass.sources.materials.alias["granite"]).id;
	}
	if (biome.name == "Dungeon_Water") 
	{ 
		int id = ((EClass.rnd(2) == 0) ? 187 : 188); 
		biome.exterior.block.id = (biome.interior.block.id = id); 
	} 
	BiomeProfile.TileFloor floor = biome.exterior.floor;
	BiomeProfile.TileBlock block = biome.exterior.block;
	int idMat = -1;

@@ -219,12 +224,12 @@ protected override bool OnGenerateTerrain()

cs
		int tries = 3;
		crawler.CrawlUntil(EClass._map, () => EClass._map.GetRandomPoint(), tries, delegate(Crawler.Result r)
		{
			int id = ((EClass.rnd(3) == 0) ? 108 : 105); 
			int id2 = ((EClass.rnd(3) == 0) ? 108 : 105); 
			foreach (Point point2 in r.points)
			{
				if (!point2.cell.isModified && !point2.HasThing && !point2.HasBlock && !point2.HasObj)
				{
					map.SetObj(point2.x, point2.z, id); 
					map.SetObj(point2.x, point2.z, id2); 
					int num3 = 3;
					if (EClass.rnd(6) == 0)
					{

Region

@@ -94,14 +94,14 @@ public void RenewRandomSites()

cs
public void UpdateRandomSites()
{
	List<Zone> list = ListRandomSites();
	int num = 60 - list.Count; 
	int num = 70 - list.Count; 
	if (num <= 0)
	{
		return;
	}
	for (int i = 0; i < num; i++)
	{
		if (EClass.rnd(5) == 0) 
		if (EClass.rnd(100) < 25) 
		{
			CreateRandomSite(GetRandomPoint(ElomapSiteType.NefiaWater), "dungeon_water", updateMesh: false);
		}

@@ -120,7 +120,12 @@ public void InitElomap()

cs
	public Zone CreateRandomSite(Zone center, int radius = 8, string idSource = null, bool updateMesh = true, int lv = 0)
	{
		InitElomap();
		return CreateRandomSite(GetRandomPoint(center.IsRegion ? (EClass.pc.pos.x + EClass.scene.elomap.minX) : center.x, center.IsRegion ? (EClass.pc.pos.z + EClass.scene.elomap.minY) : center.y, radius), idSource, updateMesh, lv); 
		Point point = new Point(center.IsRegion ? (EClass.pc.pos.x + EClass.scene.elomap.minX) : center.x, center.IsRegion ? (EClass.pc.pos.z + EClass.scene.elomap.minY) : center.y); 
		if (elomap.IsWater(point.x, point.z)) 
		{ 
			return CreateRandomSite(GetRandomPoint(point.x, point.z, radius, increaseRadius: false, ElomapSiteType.NefiaWater), "dungeon_water", updateMesh, lv); 
		} 
		return CreateRandomSite(GetRandomPoint(point.x, point.z, radius), idSource, updateMesh, lv); 
	}

	private Zone CreateRandomSite(Point pos, string idSource, bool updateMesh, int lv = 0)

@@ -193,7 +198,7 @@ public Point GetRandomPoint(ElomapSiteType type = ElomapSiteType.Nefia)

cs
		return null;
	}

	public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRadius = false) 
	public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRadius = false, ElomapSiteType type = ElomapSiteType.Nefia) 
	{
		Point point = new Point();
		for (int i = 0; i < 1000; i++)

@@ -204,7 +209,7 @@ public Point GetRandomPoint(int orgX, int orgY, int radius = 8, bool increaseRad

cs
		{
			radius++;
		}
		if (elomap.CanBuildSite(point.x, point.z)) 
		if (elomap.CanBuildSite(point.x, point.z, 0, type)) 
		{
			return point;
		}

TileTypeBlockOpen

@@ -11,4 +11,6 @@ public class TileTypeBlockOpen : TileTypeBlock

cs
	public override bool CastAmbientShadow => false;

	public override bool IsSkipFloor => false;
	public override bool IsBlockSight => false; 
}

Trait

@@ -1849,6 +1849,7 @@ public void OnBarter()

cs
				break;
			case ShopType.Ecopo:
				Add("ecomark", 5, 0);
				Add("whip_egg", 1, 0); 
				Add("1165", 1, 0);
				Add("plat", 100, 0);
				AddThing(ThingGen.CreateScroll(9160).SetNum(5));

TraitDrinkMilkMother

@@ -81,6 +81,7 @@ public override void OnDrink(Chara c)

cs
			case "chicken":
			case "duck":
			case "shamo":
			case "penguin":
				c.idSkin = 0;
				break;
			}

TraitFoodEggFertilized

@@ -81,6 +81,7 @@ public static void MakeBaby(Chara c, int baby)

cs
	case "shamo":
	case "chicken":
	case "duck":
	case "penguin":
		c.idSkin = 1;
		break;
	}

TraitToolWaterCan

@@ -1,6 +1,8 @@

cs
using UnityEngine; 
public class TraitToolWaterCan : TraitTool
{
	public int MaxCharge => owner.material.hardness / 5 + 4; 
	public int MaxCharge => Mathf.Max(1, owner.material.hardness / 4 + Mathf.Clamp(owner.QualityLv * 2, 0, 40) + 3); 

	public override bool HasCharges => true;

+TraitWhipEgg

File Created
cs
public class TraitWhipEgg : TraitWhipLove
{
	public override void TrySetHeldAct(ActPlan p)
	{
		p.pos.ListCards().ForEach(delegate(Card c)
		{
			if (p.IsSelfOrNeighbor && EClass.pc.CanSee(c))
			{
				p.TrySetAct("actWhip", delegate
				{
					EClass.pc.Say("use_whip", c, owner);
					EClass.pc.Say("use_scope2", c);
					EClass.player.forceTalk = true;
					EClass.pc.Talk("egg");
					c.Talk("pervert2");
					EClass.pc.PlaySound("whip");
					c.PlayAnime(AnimeID.Shiver);
					if (c.isChara)
					{
						c.Chara.OnInsulted();
					}
					c.MakeEgg();
					owner.ModCharge(-1);
					if (owner.c_charges <= 0)
					{
						EClass.pc.Say("spellbookCrumble", owner);
						owner.Destroy();
					}
					return true;
				}, c);
			}
		});
	}
}