EA 23.244 Nightly
December 6, 2025
16 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Card (1)
public bool HasElement(int ele, int req = 1)
public bool HasElement(int ele, int req) ABILITY
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()
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()
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()
});
}
}
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()
{
continue;
}
for (int j = 0; j < 5; j++)
for (int k = 0; k < 5; k++)
{
if (thing9.encLV >= 0)
{public override IEnumerable<Status> Run()
}
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()
{
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()
}
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()
}
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()
}
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()
}
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()
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)
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)
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
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
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)
{
return false;
}
if (HasElement(1250) && !t.HasElement(710))
{
return false;
}
if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
{
return false;CharaBody
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()
{
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()
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
{
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)
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
{
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) });
_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
{ {
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()
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()
{
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)
break;
case ShopType.Moyer:
{
for (int num12 = 1; num12 <= 16; num12++)
for (int num12 = 1; num12 <= 17; num12++)
{
AddAdvWeek(num12);
} 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)
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)
private void OnEnable()
{
Refresh();
OnChangeResolution();
}
private void OnDisable()