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()