Skip to content

EA 23.244 Nightly โ€‹

December 6, 2025

16 files modified.

Important Changes โ€‹

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

Card (1) โ€‹

cs
public bool HasElement(int ele, int req = 1) 
public bool HasElement(int ele, int req) 

ABILITY โ€‹

public class Ability : Act

cs

	public override bool CanPressRepeat => base.source.tag.Contains("repeat");

	public override bool LocalAct => id != 8793; 
	public override bool CanLink(ElementContainer owner)
	{
		if (owner.Card == null)

AI_Fuck โ€‹

public override IEnumerable<Status> Run()

cs
	Chara cc = (sell ? target : owner);
	Chara tc = (sell ? owner : target);
	int destDist = ((Type == FuckType.fuck) ? 1 : 1);
	yield return DoGoto(target.pos, destDist); 
	if (owner.host != target) 
	{ 
		yield return DoGoto(target.pos, destDist); 
	} 
	cc.Say((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start"), cc, tc);
	isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;
	if (Type == FuckType.tame)

public override IEnumerable<Status> Run()

cs
	for (int i = 0; i < maxProgress; i++)
	{
		progress = i;
		yield return DoGoto(target.pos, destDist); 
		if (owner.host != target) 
		{ 
			yield return DoGoto(target.pos, destDist); 
		} 
		switch (Type)
		{
		case FuckType.fuck:

AI_Idle โ€‹

public override IEnumerable<Status> Run()

cs
					});
				}
			}
			else if (!EClass._zone.IsRegion && owner.HasElement(1250)) 
			{ 
				Chara target = null; 
				for (int j = 0; j < 10; j++) 
				{ 
					Chara chara = EClass._map.charas.RandomItem(); 
					if (chara != owner && chara.Evalue(964) <= 0 && (target == null || (chara.c_bloodData != null && (target.c_bloodData == null || CraftUtil.GetFoodScore(chara.c_bloodData) > CraftUtil.GetFoodScore(target.c_bloodData))))) 
					{ 
						target = chara; 
					} 
				} 
				if (target != null) 
				{ 
					yield return DoGoto(target); 
					owner.UseAbility("ActBloodsuck", target); 
					yield return Success(); 
				} 
			} 
		}
		if (!EClass._zone.IsRegion)
		{

public override IEnumerable<Status> Run()

cs
					{
						continue;
					}
					for (int j = 0; j < 5; j++) 
					for (int k = 0; k < 5; k++) 
					{
						if (thing9.encLV >= 0)
						{

public override IEnumerable<Status> Run()

cs
		}
		if (owner.c_uidMaster != 0)
		{
			Chara chara = owner.master; 
			if (chara == null || !chara.IsAliveInCurrentZone) 
			Chara chara2 = owner.master; 
			if (chara2 == null || !chara2.IsAliveInCurrentZone) 
			{
				chara = owner.FindMaster(); 
				chara2 = owner.FindMaster(); 
			}
			if (chara != null && chara.IsAliveInCurrentZone) 
			if (chara2 != null && chara2.IsAliveInCurrentZone) 
			{
				if (owner.enemy == null)
				{
					owner.SetEnemy(chara.enemy); 
					owner.SetEnemy(chara2.enemy); 
				}
				int num4 = owner.Dist(chara.pos); 
				int num4 = owner.Dist(chara2.pos); 
				if (owner.source.aiIdle != "root" && num4 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
				{
					if (owner.HasAccess(chara.pos)) 
					if (owner.HasAccess(chara2.pos)) 
					{
						owner.TryMoveTowards(chara.pos); 
						owner.TryMoveTowards(chara2.pos); 
					}
					yield return KeepRunning();
					continue;

public override IEnumerable<Status> Run()

cs
	{
		if (EClass.rnd(3) == 0 && owner.IsCat)
		{
			Chara chara2 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem()); 
			Thing thing5 = chara2.things.Find<TraitFoodChuryu>(); 
			if (chara2 != owner && thing5 != null) 
			Chara chara3 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem()); 
			Thing thing5 = chara3.things.Find<TraitFoodChuryu>(); 
			if (chara3 != owner && thing5 != null) 
			{
				yield return Do(new AI_Churyu
				{
					churyu = thing5,
					slave = chara2 
					slave = chara3 
				});
			}
		}

public override IEnumerable<Status> Run()

cs
	}
	if (EClass.rnd(100) == 0 && owner.trait is TraitBitch)
	{
		Chara chara3 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0); 
		if (chara3 != null) 
		Chara chara4 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0); 
		if (chara4 != null) 
		{
			yield return Do(new AI_Fuck
			{
				target = chara3, 
				target = chara4, 
				variation = AI_Fuck.Variation.Bitch
			});
		}

public override IEnumerable<Status> Run()

cs
	}
	if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
	{
		foreach (Chara chara4 in EClass._map.charas) 
		foreach (Chara chara5 in EClass._map.charas) 
		{
			if (EClass.rnd(3) != 0 && chara4 != owner && chara4.pos.cell.IsSnowTile && chara4.Dist(owner) <= 6 && Los.IsVisible(chara4, owner)) 
			if (EClass.rnd(3) != 0 && chara5 != owner && chara5.pos.cell.IsSnowTile && chara5.Dist(owner) <= 6 && Los.IsVisible(chara5, owner)) 
			{
				Thing t3 = ThingGen.Create("snow");
				ActThrow.Throw(owner, chara4.pos, t3); 
				ActThrow.Throw(owner, chara5.pos, t3); 
				break;
			}
		}

public override IEnumerable<Status> Run()

cs
		}
		else
		{
			foreach (Chara chara5 in EClass._map.charas) 
			foreach (Chara chara6 in EClass._map.charas) 
			{
				if (EClass.rnd(3) != 0 && chara5 != owner && chara5.Dist(owner) <= 6 && chara5.Dist(owner) >= 3 && Los.IsVisible(chara5, owner)) 
				if (EClass.rnd(3) != 0 && chara6 != owner && chara6.Dist(owner) <= 6 && chara6.Dist(owner) >= 3 && Los.IsVisible(chara6, owner)) 
				{
					ActThrow.Throw(owner, chara5.pos, thing6); 
					ActThrow.Throw(owner, chara6.pos, thing6); 
					break;
				}
			}

public override IEnumerable<Status> Run()

cs
	}
	if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
	{
		for (int k = 0; k < 100; k++) 
		for (int l = 0; l < 100; l++) 
		{
			Point randomPoint2 = EClass._map.GetRandomPoint();
			if (randomPoint2.IsDeepWater && !randomPoint2.IsBlocked)

public override IEnumerable<Status> Run()

cs
	yield return Restart();
	Point FindMovePoint(BaseArea.AccessType type)
	{
		for (int l = 0; l < 20; l++) 
		for (int m = 0; m < 20; m++) 
		{
			Point randomPoint3 = owner.pos.GetRandomPoint(5 + l, requireLos: false); 
			Point randomPoint3 = owner.pos.GetRandomPoint(5 + m, requireLos: false); 
			if (randomPoint3 != null && randomPoint3.IsInBounds && (randomPoint3.cell.room == null || randomPoint3.cell.room.data.accessType == type))
			{
				return randomPoint3;

ActPlan โ€‹

public void _Update(PointTarget target)

cs
							TrySetAct(ACT.Chat, c2);
						}
					}
					if (!c2.IsPC && num <= 2 && ((c2.IsPCFaction && !c2.IsDisabled) || EClass.debug.enable) && input == ActInput.AllAction) 
					{ 
						TrySetAct("actTrade", delegate
						{ 
							LayerInventory.CreateContainer(c2); 
							return false; 
						}, c2, null, 2); 
					} 
					if (c2.host != EClass.pc)
					{
						TraitShackle traitShackle = c2.pos.FindThing<TraitShackle>();

public void _Update(PointTarget target)

cs
								return false;
							}, c);
						}
						if (!c.IsPC && ((c.IsPCFaction && !c.IsDisabled) || EClass.debug.enable) && input == ActInput.AllAction) 
						{ 
							TrySetAct("actTrade", delegate
							{ 
								LayerInventory.CreateContainer(c); 
								return false; 
							}, c); 
						} 
						if (c.host != null && EClass.pc.held != null && altAction)
						{
							bool flag4 = true;

Card โ€‹

public int ResistLv(int res)

cs
		return Element.GetResistLv(Evalue(res));
	}

	public bool HasElement(int ele, int req = 1) 
	public bool HasElement(int ele, bool includeNagative = false) 
	{ 
		if (elements.Value(ele) <= 0) 
		{ 
			if (includeNagative) 
			{ 
				return elements.Value(ele) < 0; 
			} 
			return false; 
		} 
		return true; 
	} 
	public bool HasElement(int ele, int req) 
	{
		return elements.Value(ele) >= req;
	}

Chara โ€‹

public void TickConditions()

cs
			AddCondition<ConBurning>(1000, force: true);
		}
		break;
	case 15:
		if (HasElement(1250) && !HasCondition<ConVampire>()) 
	case 10:
		if (!HasElement(1250)) 
		{ 
			break; 
		} 
		if (!HasCondition<ConVampire>()) 
		{
			AddCondition<ConVampire>();
		}
		if (!IsPC && !HasCooldown(8793)) 
		{ 
			bool flag = false; 
			flag = ((!HasCondition<ConTransmuteBat>()) ? (!HasElement(431) && pos.IsSunLit) : (body.HasElement(431) || (EClass.world.date.IsNight && !pos.IsSunLit))); 
			if (flag && base.IsPCFactionOrMinion && !EClass._zone.IsPCFactionOrTent && EClass._zone.HasLaw && pos.ListWitnesses(this).Count > 0 && !HasCondition<ConBurning>()) 
			{ 
				flag = false; 
			} 
			if (flag) 
			{ 
				UseAbility("SpTransmuteBat", this); 
			} 
		} 
		break;
	}
	if (turn % 200 == 0)

public bool CanEat(Thing t, bool shouldEat = false)

cs
	{
		return false;
	}
	if (HasElement(1250) && !t.HasElement(710)) 
	{ 
		return false; 
	} 
	if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
	{
		return false;

CharaBody โ€‹

public bool HasWeapon()

cs
		return false;
	}

	public bool HasElement(int idEle) 
	{ 
		foreach (BodySlot slot in slots) 
		{ 
			if (slot.thing != null && slot.thing.elements.Has(idEle)) 
			{ 
				return true; 
			} 
		} 
		return false; 
	} 
	public Thing GetEquippedThing(int elementId)
	{
		foreach (BodySlot slot in slots)

ConTransmuteBat โ€‹

public override void OnStart()

cs
	{
		base.OnStart();
		owner.PlaySound("bat");
		if (!EClass._zone.IsPCFactionOrTent && owner.pos.TryWitnessCrime(owner) && owner == EClass.pc) 
		{ 
			EClass.player.ModKarma(-1); 
		} 
	}

	public override void OnRemoved()

public override void OnRemoved()

cs
		base.OnRemoved();
		owner.HealHP(owner.MaxHP, HealSource.Item);
		owner.SetCooldown(8793);
		if (!EClass._zone.IsPCFactionOrTent && owner.pos.TryWitnessCrime(owner) && owner == EClass.pc) 
		{ 
			EClass.player.ModKarma(-1); 
		} 
	}
}

CoreDebug โ€‹

public void UpdateInput()

cs
		{
			EClass.pc.Pick(CraftUtil.MakeBloodMeal(EClass.pc, targetChara));
			EClass.pc.Pick(CraftUtil.MakeLoveLunch(targetChara));
			TraitFoodEggFertilized.Incubate(targetChara.MakeEgg(effect: false, 1, addToZone: false, 100), targetChara.pos.GetNearestPoint(allowBlock: false, allowChara: false)); 
		}
		targetChara.ScaleByPrincipal();
		if (EClass.game.quests.Get<QuestDebt>() == null)

CraftUtil โ€‹

public static string GetBloodText(Chara c)

cs
		return text;
	}

	public static int GetFoodScore(Thing food) 
	{ 
		int num = 0; 
		foreach (Element value in food.elements.dict.Values) 
		{ 
			if (value.IsFoodTraitMain) 
			{ 
				num += value.Value; 
			} 
		} 
		return num; 
	} 
	public static Thing MakeBloodMeal(Chara sucker, Chara feeder, bool msg = true)
	{
		Thing c_bloodData = feeder.c_bloodData;

DramaCustomSequence โ€‹

public void Build(Chara c)

cs
		{
			Choice2("daJoinParty", "_joinParty");
		}
		if (!c.IsDisabled && (c.HasElement(1250) || (EClass.pc.IsMofuable && c.ability.Has(6627)))) 
		{ 
			Choice2("daSuck", "_suck"); 
		} 
		Choice2("daFactionOther", "_factionOther");
	}
	if (c.trait is TraitLoytel && EClass.game.quests.Get<QuestDebt>() != null)

public void Build(Chara c)

cs
	});
	_Talk("tg", GetTopic(c, (c.GetInt(126) == 0) ? "shutup" : "shutup2"));
	End();
	Step("_suck"); 
	_Talk("tg", GetTalk("pervert4")); 
	Method(delegate
	{ 
		if (c.HasElement(1250)) 
		{ 
			c.UseAbility("ActBloodsuck", EClass.pc); 
		} 
		else
		{ 
			c.Sniff(EClass.pc); 
		} 
		EClass.player.EndTurn(); 
	}); 
	End(); 
	Step("_insult");
	Method(delegate
	{

public void Build(Chara c)

cs
					{
						c.Talk("goodBoy");
						c4.Say("dingExp", c);
						c4.Talk("tailed"); 
						c4.Talk("insulted"); 
						c4.SetFeat(1273, 1, msg: true);
						c4.PlayEffect("aura_heaven");
						c4.feat += 10;

QuestDeliver โ€‹

public virtual void SetIdThing()

cs
	do
	{
		SourceCategory.Row r = GetDeliverCat();
		cardRow = SpawnListThing.Get("cat_" + r.id, (SourceThing.Row s) => EClass.sources.categories.map[s.category].IsChildOf(r.id)).Select(); 
		cardRow = SpawnListThing.Get("cat_" + r.id, (SourceThing.Row s) => EClass.sources.categories.map[s.category].IsChildOf(r.id) && (IsDeliver || s.model.trait.CanStack)).Select(); 
	}
	while (cardRow == null);
	idThing = cardRow.id;

QuestSupplySpecific โ€‹

public override void SetIdThing()

cs
	{
		foreach (SourceThing.Row row in EClass.sources.things.rows)
		{
			if ((i != 0 || !(this is QuestMeal) || row.LV <= num || EClass.rnd(4) == 0) && row.category == idCat && !row.isOrigin && row.chance > 0) 
			if ((i != 0 || !(this is QuestMeal) || row.LV <= num || EClass.rnd(4) == 0) && row.category == idCat && !row.isOrigin && row.chance > 0 && row.model.trait.CanStack) 
			{
				list.Add(row);
			}

Trait โ€‹

public void OnBarter(bool reroll = false)

cs
				break;
			case ShopType.Moyer:
			{
				for (int num12 = 1; num12 <= 16; num12++) 
				for (int num12 = 1; num12 <= 17; num12++) 
				{
					AddAdvWeek(num12);
				}

public Thing CreateStock()

cs
			case ShopType.Dye:
			{
				Thing thing = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30));
				thing.ChangeMaterial(EClass.sources.materials.rows.RandomItem().alias); 
				thing.ChangeMaterial(EClass.sources.materials.rows.Where((SourceMaterial.Row r) => r.tier <= 4).RandomItem().alias); 
				return thing;
			}
			case ShopType.GeneralExotic:

TraitFoodEggFertilized โ€‹

public static void MakeBaby(Chara c, int baby)

cs
			c.idSkin = 1;
			break;
		}
		c.bio.birthDay = EClass.world.date.day; 
		c.bio.birthMonth = EClass.world.date.month; 
		c.bio.SetAge(c, 0);
	}

WidgetSideScreen โ€‹

public void SlideMiniGame(float w)

cs

	private void OnEnable()
	{
		Refresh(); 
		OnChangeResolution(); 
	}

	private void OnDisable()