EA 23.197 Nightly
September 10, 2025
22 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
AI_TendAnimal (1)
public override bool ShouldAllyAttack(Chara tg) AI_Fuck
public override bool CancelWhenDamaged => !ntr;
public override bool ShouldAllyAttack(Chara tg)
{
return tg != target;
}
public override IEnumerable<Status> Run()
{
if (target == null) {
EClass.player.stats.kimo++;
}
if (ntr)
{
chara2.things.Find<TraitDreamBug>()?.ModNum(-1);
}
if (!ntr || !chara.HasElement(1239) || chara2.HasElement(1216))
{
break;AI_TendAnimal
public class AI_TendAnimal : AI_Fuck
public class AI_TendAnimal : AI_Fuck
{
public override FuckType Type => FuckType.tame;
public override bool ShouldAllyAttack(Chara tg)
{
return tg != target;
}
}AM_Build
public override void RotateUnderMouse()
public override void InputWheel(int wheel)
{
if (!EInput.isAltDown && !EInput.isCtrlDown)
if (recipe.MaxAltitude > 0)
{
if (recipe.MaxAltitude > 0)
{
ModAltitude(wheel);
EClass.screen.tileSelector.RefreshMouseInfo(force: true);
}
else
{
base.InputWheel(wheel);
}
ModAltitude(wheel);
EClass.screen.tileSelector.RefreshMouseInfo(force: true);
}
else
{
base.InputWheel(wheel);
}
}ActEffect
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.Arrow:
attackSource = AttackSource.MagicArrow;
break;
case EffectId.Hand:
attackSource = AttackSource.MagicHand;
break;
case EffectId.Sword:
attackSource = AttackSource.MagicSword;
break;ActNTR
{
public override bool CanPerform()
{
if (Act.TC.isChara && (Act.TC.Chara.conSleep != null || Act.CC.HasElement(1239) || Act.TC.Evalue(418) < 0))
if (Act.TC == null || !Act.TC.isChara)
{
return Act.TC.Evalue(418) <= 0;
return false;
}
Chara chara = Act.TC.Chara;
bool flag = chara.things.Find<TraitDreamBug>() != null;
if (!flag && Act.TC.Evalue(418) > 0)
{
return false;
}
if (chara.conSleep != null || Act.CC.HasElement(1239) || chara.Evalue(418) < 0)
{
return true;
}
if (flag)
{
if (!chara.IsDisabled && !chara.isConfused && !chara.HasCondition<ConFreeze>() && !chara.HasCondition<ConDim>())
{
return chara.HasCondition<ConFear>();
}
return true;
}
return false;
}AttackProcess
public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
toHitBase = toHitBase * 75 / 100;
}
penetration = Mathf.Clamp(weaponSkill.Value / 10 + 5, 5, 20) + CC.Evalue(92);
if (CC.HasElement(1244))
if (CC.HasElement(1246))
{
penetration += 25;
}public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
toHitBase = EClass.curve((IsCane ? CC.WIL : CC.DEX) / 4 + weaponSkill.GetParent(CC).Value / 3 + weaponSkill.Value, 50, 25) + 50;
toHitFix = CC.HIT + weapon.HIT;
penetration = weapon.Penetration + CC.Evalue(92);
if (CC.HasElement(1244))
{
penetration += 25;
}
if (IsCane)
{
toHitBase += 50; crit = true;
return true;
}
if (CC.HasElement(1244) && CC.HasCondition<ConSevenSense>())
if (CC.HasCondition<ConSevenSense>() && (CC.HasElement(1244) || CC.HasElement(1246)))
{
return true;
}AttackSource
Shockwave,
MagicSword,
MoonSpear,
MagicArrow
MagicArrow,
MagicHand
}BaseWidgetNotice
public void Sort()
{
IList<BaseNotification> list = this.list.Copy();
list.Sort((BaseNotification a, BaseNotification b) => b.GetSortVal() - a.GetSortVal());
for (int i = 0; i < list.Count; i++)
{ButtonAbility
public static bool TryUse(Act act, Card tg = null, Point pos = null, Card cataly
{
EClass.player.EndTurn();
}
else if (EClass.pc.UseAbility(act.source.alias, tg, pos, flag))
else if (EClass.pc.UseAbility(act.source.alias, tg, pos, flag) && EClass.pc.HasNoGoal)
{
EClass.player.EndTurn();
}Card
public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource
{
num3++;
}
if (attackSource == AttackSource.MagicHand && origin != null && origin.HasElement(1246))
{
num3++;
}
dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), num3);
dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200));
dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource
Chara.AddCondition<ConFractured>((int)Mathf.Max(10f, 30f - Mathf.Sqrt(Evalue(436))));
hp = Mathf.Min(half * (int)Mathf.Sqrt(Evalue(436) * 2) / 100, MaxHP / 3);
});
goto IL_0e69;
goto IL_0e94;
}
}
if (zoneInstanceBout != null && (bool)LayerDrama.Instance)public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource
if (EClass.player.invlunerable)
{
EvadeDeath(null);
goto IL_0e69;
goto IL_0e94;
}
}
if (Evalue(1220) > 0 && Chara.stamina.value >= (IsPC ? (Chara.stamina.max / 2) : (Chara.stamina.max / 3 * 2)))public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource
}
}
}
goto IL_0e69;
IL_0e69:
goto IL_0e94;
IL_0e94:
if (trait.CanBeAttacked)
{
renderer.PlayAnime(AnimeID.HitObj);public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource
Chara.AddCondition<ConBoost>(Power);
Chara.Cure(CureType.Boss);
Chara.HealHP(MaxHP / 2);
EClass.player.forceTalk = true;
}
if (origin != null && origin.isChara && attackSource != AttackSource.Finish)
{void EvadeDeath(Action action)
}
void Heal()
{
target.Cure(CureType.Death);
target.Cure(CureType.HealComplete);
foreach (Chara member in EClass.pc.party.members)
{
member.Cure(CureType.Death);
member.Cure(CureType.HealComplete);
}
}
void ProcAbsorb()Chara
public void SetFaith(Religion r)
public void HealAll()
{
Cure(CureType.Death);
Cure(CureType.HealComplete);
base.hp = MaxHP;
mana.value = mana.max;
stamina.value = stamina.max; {
pos.Things.ForeachReverse(delegate(Thing t)
{
if (t.trait.IgnoreOnSteppedWhenMoving)
{
AI_Goto aI_Goto = ai.Current as AI_Goto;
if ((aI_Goto == null && !(ai is GoalManualMove)) || (aI_Goto != null && !aI_Goto.dest.Equals(pos)))
{
return;
}
}
t.trait.OnStepped(this);
});
if (isDead)public void Cure(CureType type, int p = 100, BlessedState state = BlessedState.N
}
CureCondition<ConWait>();
CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
bool flag2 = HasCondition<ConAnorexia>();
base.c_vomit -= (flag2 ? 3 : 2) * p / 100;
bool flag3 = HasCondition<ConAnorexia>();
base.c_vomit -= (flag3 ? 3 : 2) * p / 100;
if (base.c_vomit < 0)
{
base.c_vomit = 0;
if (flag2)
if (flag3)
{
RemoveCondition<ConAnorexia>();
}public void Cure(CureType type, int p = 100, BlessedState state = BlessedState.N
case CureType.Jure:
case CureType.Boss:
{
bool flag2 = type == CureType.Death;
CureTempElements(p * 100, body: true, mind: true);
for (int num = conditions.Count - 1; num >= 0; num--)
{
Condition condition = conditions[num];
if (!(condition is ConAnorexia) || type == CureType.Death)
if (condition is ConAnorexia && !flag2)
{
ConditionType type2 = condition.Type;
if ((uint)(type2 - 2) <= 2u || type2 == ConditionType.Stance)
{
condition.Kill();
}
else if (type == CureType.Death && condition.isPerfume)
continue;
}
switch (condition.Type)
{
case ConditionType.Bad:
case ConditionType.Debuff:
case ConditionType.Disease:
condition.Kill();
continue;
case ConditionType.Stance:
if (flag2)
{
condition.Kill();
continue;
}
break;
}
if (flag2 && condition.isPerfume)
{
condition.Kill();
}
}
CureCondition<ConWait>();
CureCondition<ConSleep>();
if (type == CureType.Death || type == CureType.Boss)
if (flag2 || type == CureType.Boss)
{
SAN.Mod(-20);
RemoveCondition<ConBrightnessOfLife>();public void RefreshFaithElement()
return;
}
faithElements = new ElementContainer();
SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
if (row2 != null)
{
faithElements.SetBase(row2.id, 1);
}
if (!HasCondition<ConExcommunication>())
{
SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
if (row2 != null)
{
faithElements.SetBase(row2.id, 1);
}
int[] array = row.elements;
int num = GetPietyValue() * (120 + Evalue(1407) * 15) / 100;
for (int i = 0; i < array.Length; i += 2)ConBoost
public class ConBoost : BaseBuff
{
public override void OnStart()
{
owner._CreateRenderer();
if (!owner.IsPCC)
{
owner._CreateRenderer();
}
}
public override void OnRemoved()
{
owner._CreateRenderer();
if (!owner.IsPCC)
{
owner._CreateRenderer();
}
}
public override RendererReplacer GetRendererReplacer()ElementContainerCard
public void CheckSkillActions()
TryLearn(6700, 1649, 0);
TryLearn(6720, 1657, 0);
TryLearn(6450, 132, 5);
TryLearn(6603, 6020, 50);
}
void TryLearn(int eleAction, int reqEle, int lqlv)
{FACTION
public const int bfVolcano = 3704;
public const int bfTranquil = 3703;
public const int actBuildInspect = 4006;
public const int actBuildRecipe = 4005;
public const int actBuildMine = 4001;
public const int bfTranquil = 3703;
public const int bfStart = 3900;
public const int bfChitin = 3805;
public const int bfLandmark3 = 3782;
public const int bfHunt = 3705;
public const int bfLandmark1 = 3780;
public const int bfBreed = 3710;
public const int bfFish = 3706;
public const int bfHunt = 3705;
public const int bfMushroom = 3801;
public static readonly int[] IDS = new int[53]
{
3605, 2207, 3606, 3700, 3604, 3603, 3602, 3601, 3600, 3500,
2206, 2120, 2204, 2203, 2202, 2201, 2200, 2119, 2118, 2117,
2116, 3701, 2115, 2003, 2205, 3702, 3781, 3704, 4006, 4005,
4004, 4003, 4002, 4001, 3703, 3900, 3805, 3804, 3803, 3802,
4000, 3800, 3784, 3783, 3782, 3780, 3710, 3709, 3708, 3707,
3706, 3705, 3801
2116, 3701, 2115, 2003, 2205, 3702, 3781, 3704, 3703, 4006,
4005, 4004, 4003, 4002, 4001, 3900, 3805, 3804, 3803, 3802,
4000, 3800, 3784, 3783, 3782, 3705, 3780, 3710, 3709, 3708,
3707, 3706, 3801
};
}
public class Faction : EClassFEAT
public const int featPER = 1623;
public const int featSPD = 1629;
public const int featLuck = 1628;
public const int featMAG = 1625;
public const int featCHA = 1627;
public const int featLuck = 1628;
public const int featStamina = 1612;
public const int featLER = 1624;
public const int featStamina = 1612;
public const int featFairysan = 1413;
public const int featMana = 1611;
public const int featLife = 1610;
public const int featLuckyCat = 1412;
public const int featHealer = 1422;
public const int featWhiteVixen = 1414;
public const int featHardy = 1630;
public const int featFairysan = 1413;
public const int featMana = 1611;
public const int featSPD = 1629;
public const int featDefense = 1631;
public const int featLife = 1610;
public const int featSummoner = 1647;
public const int featHardy = 1630;
public const int featSpotting = 1633;
public const int featLonelySoul = 1646;
public const int featLuckyCat = 1412;
public const int featEvade = 1632;
public const int featEarthStrength = 1411;
public const int featFisher = 1659;
public const int featGourmet = 1650;
public const int featDefender = 1649;
public const int featDefense = 1631;
public const int featRapidMagic = 1648;
public const int featDefender = 1649;
public const int featLonelySoul = 1646;
public const int featSummoner = 1647;
public const int featParty = 1645;
public const int featNegotiate = 1634;
public const int featEvade = 1632;
public const int featSpotting = 1633;
public const int featEarthStrength = 1411;
public const int featRapidMagic = 1648;
public const int featReboot = 1410;
public const int featLooter = 1660;
public const int featBoost = 1409;
public const int featPaladin2 = 1408;
public const int featServant = 1227;
public const int featSevenSense = 1245;
public const int featPegasus = 1246;
public const int featGod_element1 = 1300;
public const int featGod_earth1 = 1305;
public const int featGod_machine1 = 1315;
public const int featGod_healing1 = 1320;
public const int featUnderground = 1226;
public const int featLoyal = 1225;
public const int featSlowFood = 1200;
public const int featReboot = 1410;
public const int featBoost = 1409;
public const int featManaBond = 1201;
public const int featFluffyTail = 1209;
public const int featGod_harvest1 = 1325;
public const int featGod_healing1 = 1320;
public const int featUndead = 1210;
public const int featSnail = 1211;
public const int featGod_luck1 = 1330;
public const int featGod_harvest1 = 1325;
public const int featElder = 1238;
public const int featGod_oblivion1 = 1340;
public const int featGod_harmony1 = 1335;
public const int featGod_luck1 = 1330;
public const int featGod_trickery1 = 1345;
public const int featGod_moonshadow1 = 1350;
public const int featGod_strife1 = 1355;
public const int featPianist = 1405;
public const int featTourist = 1406;
public const int featGod_trickery1 = 1345;
public const int featPaladin2 = 1408;
public const int featGod_oblivion1 = 1340;
public const int featPaladin = 1407;
public static readonly int[] IDS = new int[122]
public const int featTourist = 1406;
public static readonly int[] IDS = new int[123]
{
1620, 1621, 1622, 1623, 1629, 1625, 1626, 1627, 1628, 1624,
1612, 1413, 1610, 1422, 1421, 1420, 1419, 1418, 1417, 1416,
1415, 1414, 1630, 1611, 1631, 1647, 1633, 1412, 1659, 1658,
1657, 1656, 1655, 1654, 1653, 1652, 1651, 1650, 1649, 1648,
1646, 1645, 1644, 1643, 1642, 1641, 1640, 1636, 1635, 1634,
1632, 1411, 1660, 1409, 1227, 1228, 1229, 1230, 1231, 1232,
1233, 1234, 1235, 1236, 1237, 1239, 1240, 1241, 1242, 1243,
1244, 1245, 1300, 1305, 1310, 1315, 1320, 1226, 1225, 1224,
1223, 1200, 1410, 1201, 1202, 1203, 1204, 1205, 1206, 1207,
1208, 1209, 1325, 1210, 1212, 1213, 1214, 1215, 1216, 1217,
1218, 1219, 1220, 1221, 1222, 1211, 1330, 1238, 1340, 1335,
1350, 1355, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1345,
1408, 1407
1620, 1621, 1622, 1623, 1628, 1625, 1626, 1627, 1612, 1624,
1611, 1412, 1422, 1421, 1420, 1419, 1418, 1417, 1416, 1415,
1414, 1413, 1629, 1610, 1630, 1646, 1632, 1411, 1659, 1658,
1657, 1656, 1655, 1654, 1653, 1652, 1651, 1650, 1631, 1649,
1647, 1645, 1644, 1643, 1642, 1641, 1640, 1636, 1635, 1634,
1633, 1648, 1410, 1660, 1408, 1227, 1228, 1229, 1230, 1231,
1232, 1233, 1234, 1235, 1236, 1237, 1239, 1240, 1241, 1242,
1243, 1244, 1245, 1246, 1300, 1305, 1310, 1315, 1226, 1225,
1224, 1223, 1200, 1409, 1201, 1202, 1203, 1204, 1205, 1206,
1207, 1208, 1209, 1320, 1210, 1212, 1213, 1214, 1215, 1216,
1217, 1218, 1219, 1220, 1221, 1222, 1211, 1325, 1238, 1335,
1330, 1345, 1350, 1355, 1400, 1401, 1402, 1403, 1404, 1405,
1340, 1407, 1406
};
}
public class Feat : ElementFoodEffect
public static void Proc(Chara c, Thing food, bool consume = true)
break;
case "poison":
ActEffect.Poison(c, EClass.pc, value.Value * 10);
if (c.isDead)
if (!c.isDead)
{
return;
break;
}
break;
goto IL_0f04;
case "love":
ActEffect.LoveMiracle(c, EClass.pc, value.Value * 10);
break;public static void Proc(Chara c, Thing food, bool consume = true)
{
food.trait.OnDrink(c);
}
goto IL_0f04;
IL_0f04:
if (consume)
{
num7 += 5f;NotificationCondition
public override bool ShouldRemove()
public override int GetSortVal()
{
int num = 5;
WidgetStats instance = WidgetStats.Instance;
bool sort = instance.extra.sort;
switch (condition.Type)
{
case ConditionType.Stance:public override int GetSortVal()
num = 10;
break;
case ConditionType.Debuff:
num = 11;
num = (sort ? 11 : 10);
break;
}
if (condition is ConBuffStats)
{
num = 1;
}
return 8000000 + num * 100000 + condition.GetSortVal();
if (condition is ConAwakening)
{
num = 2;
}
return 8000000 + num * 100000 + (sort ? condition.GetSortVal() : instance.list.IndexOf(this));
}
public override void OnClick()StatsMana
public override void Mod(int a)
a /= 10;
}
_ = BaseStats.CC.ShouldShowMsg;
if (value >= 0)
{
return;
}
int num = -value * 400 / (100 + BaseStats.CC.EvalueMax(303, -5) * 10);
if (BaseStats.CC.HasElement(1201))
{
num /= 3;
}
if (!BaseStats.CC.IsPC)
Chara cC = BaseStats.CC;
if (value < 0)
{
num /= 5;
if (num < 10)
int num = -value * 400 / (100 + BaseStats.CC.EvalueMax(303, -5) * 10);
if (BaseStats.CC.HasElement(1201))
{
return;
num /= 3;
}
}
BaseStats.CC.Say("mana_overflow", BaseStats.CC);
BaseStats.CC.DamageHP(num, 921, 100, AttackSource.ManaBackfire);
Chara cC = BaseStats.CC;
if (cC.IsAliveInCurrentZone)
{
cC.elements.ModExp(303, Mathf.Clamp(-a * 10, 10, 200));
if (cC.HasElement(1245) && !cC.HasCooldown(1245))
if (!BaseStats.CC.IsPC)
{
cC.AddCooldown(1245);
cC.AddCondition<ConSevenSense>(cC.Power);
cC.Cure(CureType.Boss);
cC.HealHP(cC.MaxHP / 2);
num /= 5;
if (num < 10)
{
return;
}
}
BaseStats.CC.Say("mana_overflow", BaseStats.CC);
BaseStats.CC.DamageHP(num, 921, 100, AttackSource.ManaBackfire);
if (cC.IsAliveInCurrentZone)
{
cC.elements.ModExp(303, Mathf.Clamp(-a * 10, 10, 200));
}
}
if (value <= 0 && cC.IsAliveInCurrentZone && cC.HasElement(1245) && !cC.HasCooldown(1245))
{
cC.AddCooldown(1245);
cC.AddCondition<ConSevenSense>(cC.Power);
cC.Cure(CureType.Boss);
cC.HealHP(cC.MaxHP / 2);
EClass.player.forceTalk = true;
}
}
}Trait
public virtual bool CanBeHeldAsFurniture
public virtual string LangUse => "actUse";
public virtual bool IgnoreOnSteppedWhenMoving => false;
public virtual bool IsOn => owner.isOn;
public virtual bool IsAnimeOnTraitBasketGame
public class TraitBasketGame : TraitFloorSwitch
public class TraitBasketGame : TraitFloorSwitch
{
public override bool IgnoreOnSteppedWhenMoving => true;
public override void OnActivateTrap(Chara c)
{
if (c.IsPC)TraitHitchingPost
public class TraitHitchingPost : TraitFloorSwitch
public class TraitHitchingPost : TraitFloorSwitch
{
public override bool IgnoreOnSteppedWhenMoving => true;
public override bool IsHomeItem => true;
public override void OnActivateTrap(Chara c)WidgetStats
using System.Collections.Generic;
using System.Collections.Generic;
using Newtonsoft.Json;
public class WidgetStats : BaseWidgetNotice
{
public class Extra
{
[JsonProperty]
public bool sort;
}
public static WidgetStats Instance;
public List<NotificationCondition> conditions = new List<NotificationCondition>();public class WidgetStats : BaseWidgetNotice
public ItemNotice moldCooldown;
public Extra extra => base.config.extra as Extra;
public override object CreateExtra()
{
return new Extra();
}
public static void RefreshAll()
{
if ((bool)Instance)public override void OnRefresh()
}
}
}
public override void OnSetContextMenu(UIContextMenu m)
{
m.AddChild("setting").AddToggle("sort_always", extra.sort, delegate(bool a)
{
extra.sort = a;
});
SetBaseContextMenu(m);
}
}