EA 23.287 Stable
March 20, 2026
19 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
AIAct (1)
public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null) AI_Fuck (1)
public override void OnSetOwner() AI_Shear (1)
public override void OnSetOwner() AI_Slaughter (1)
public override void OnSetOwner() ListPeopleParty (1)
public override void OnCreate() TaskPlow (1)
public override void OnSetOwner() TaskPoint (1)
public override void OnSetOwner() AIAct
public Status DoGoto(Point pos, int dist = 0, bool ignoreConnection = false, Fun
public Status DoGoto(Card card, Func<Status> _onChildFail = null)
{
return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, _onChildFail);
return DoGoto(card, (card.isChara || card.pos.cell.blocked) ? 1 : 0, ignoreConnection: false, _onChildFail);
}
public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
public Status DoGoto(Card card, int dist, bool ignoreConnection = false, Func<Status> _onChildFail = null)
{
if (card != null && card == owner.held)
{public Status DoGoto(Card card, int dist, Func<Status> _onChildFail = null)
{
return _onChildFail?.Invoke() ?? Cancel();
}
SetChild(new AI_Goto(card, dist), _onChildFail);
SetChild(new AI_Goto(card, dist, ignoreConnection), _onChildFail);
return TickChild();
}AI_Fuck
public override IEnumerable<Status> Run()
int destDist = ((Type == FuckType.fuck) ? 1 : 1);
if (owner.host != target)
{
yield return DoGoto(target.pos, destDist);
yield return DoGoto(target.pos, destDist, ignoreConnection: true);
}
cc.Say((variation == Variation.Slime) ? "slime_start" : ((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc);
isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;public override IEnumerable<Status> Run()
progress = i;
if (owner.host != target)
{
yield return DoGoto(target.pos, destDist);
yield return DoGoto(target.pos, destDist, ignoreConnection: true);
}
switch (Type)
{static void SuccubusExp(Chara c, Chara tg)
}
}
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
}AI_Shear
public override bool Perform()
public override IEnumerable<Status> Run()
{
yield return DoGoto(target);
yield return DoGoto(target, 1, ignoreConnection: true);
int furLv = GetFurLv(target.Chara);
Progress_Custom seq = new Progress_Custom
{public override IEnumerable<Status> Run()
yield return Do(seq);
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
public static int GetFurLv(Chara c)
{
return Mathf.Clamp(c.c_fur / 10 + 1, 1, 5);AI_Slaughter
public override bool Perform()
public override IEnumerable<Status> Run()
{
yield return DoGoto(target);
yield return DoGoto(target, 1, ignoreConnection: true);
if (target != owner)
{
target.Chara.AddCondition<ConWait>(1000, force: true);public override void OnCancelOrSuccess()
target.SetCensored(enable: false);
}
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
}ActEffect
void AddCon<T>(int rate, int power) where T : Condition
{
CC.PlaySound("clean_floor");
Msg.Say("exterminate");
List<Chara> list2 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList();
if (list2.Count == 0)
List<Chara> list3 = EClass._map.charas.Where((Chara c) => c.isCopy && !c.IsPCFaction).ToList();
if (list3.Count == 0)
{
Msg.SayNothingHappen();
return;
}
foreach (Chara item in list2)
foreach (Chara item in list3)
{
item.Say("split_fail", item);
item.PlayEffect("vanish");void AddCon<T>(int rate, int power) where T : Condition
{
return;
}
Thing thing2 = ThingGen.Create("mine");
thing2.c_idRefCard = "dog_mine";
Thing thing3 = ThingGen.Create("mine");
thing3.c_idRefCard = "dog_mine";
Zone.ignoreSpawnAnime = true;
EClass._zone.AddCard(thing2, CC.pos).Install();
EClass._zone.AddCard(thing3, CC.pos).Install();
break;
}
case EffectId.LittleSisterMigration:
case EffectId.SilverCatMigration:
{
bool flag6 = id == EffectId.SilverCatMigration;
if (!EClass.game.IsSurvival && ((flag6 && EClass._zone.id != "startVillage2") || (!flag6 && !(EClass._zone is Zone_LittleGarden))))
bool flag3 = id == EffectId.SilverCatMigration;
if (!EClass.game.IsSurvival && ((flag3 && EClass._zone.id != "startVillage2") || (!flag3 && !(EClass._zone is Zone_LittleGarden))))
{
Msg.SayNothingHappen();
return;
}
List<Chara> list3 = new List<Chara>();
bool flag7 = false;
List<Chara> list2 = new List<Chara>();
bool flag4 = false;
foreach (Chara chara2 in EClass._map.charas)
{
if (!chara2.IsPCFactionOrMinion && chara2.id == (flag6 ? "cat_silver" : "littleOne"))
if (!chara2.IsPCFactionOrMinion && chara2.id == (flag3 ? "cat_silver" : "littleOne"))
{
if (flag7)
if (flag4)
{
flag7 = false;
flag4 = false;
continue;
}
list3.Add(chara2);
flag7 = true;
list2.Add(chara2);
flag4 = true;
}
}
if (list3.Count == 0)
if (list2.Count == 0)
{
Msg.SayNothingHappen();
return;
}
EClass.pc.PlaySound("chime_angel");
foreach (Chara item2 in list3)
foreach (Chara item2 in list2)
{
item2.PlayEffect("revive");
item2.Destroy();
}
Msg.Say(flag6 ? "cat_migration" : "little_migration", list3.Count.ToString() ?? "");
EClass._zone.ModInfluence(list3.Count);
if (flag6)
Msg.Say(flag3 ? "cat_migration" : "little_migration", list2.Count.ToString() ?? "");
EClass._zone.ModInfluence(list2.Count);
if (flag3)
{
EClass.player.stats.catDepart += list3.Count;
EClass.player.stats.catDepart += list2.Count;
}
else
{
EClass.player.stats.sistersDepart += list3.Count;
EClass.player.stats.sistersDepart += list2.Count;
}
break;
}void AddCon<T>(int rate, int power) where T : Condition
TC.PlaySound("curse3");
TC.PlayEffect("curse");
TC.Say("forgetItems", TC);
int num2 = power / 50 + 1 + EClass.rnd(3);
int num4 = power / 50 + 1 + EClass.rnd(3);
List<Thing> source = TC.things.List((Thing t) => t.c_IDTState == 0);
for (int i = 0; i < num2; i++)
for (int i = 0; i < num4; i++)
{
source.RandomItem().c_IDTState = 5;
}void AddCon<T>(int rate, int power) where T : Condition
case EffectId.EnchantArmorGreat:
{
bool armor = id == EffectId.EnchantArmor || id == EffectId.EnchantArmorGreat;
bool flag8 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat;
bool flag7 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat;
if (!tc.isThing)
{
LayerDragGrid.CreateEnchant(CC, armor, flag8, state);
LayerDragGrid.CreateEnchant(CC, armor, flag7, state);
return;
}
cc.PlaySound("identify");void AddCon<T>(int rate, int power) where T : Condition
tc.ModEncLv(-1);
break;
}
int num7 = (flag8 ? 4 : 2) + (blessed ? 1 : 0);
if (tc.encLV >= num7)
int num5 = (flag7 ? 4 : 2) + (blessed ? 1 : 0);
if (tc.encLV >= num5)
{
cc.Say("enc_resist", tc);
break;void AddCon<T>(int rate, int power) where T : Condition
case EffectId.Identify:
case EffectId.GreaterIdentify:
{
bool flag3 = id == EffectId.GreaterIdentify;
bool flag6 = id == EffectId.GreaterIdentify;
if (flag)
{
Redirect(EffectId.ForgetItems, flag3 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef));
Redirect(EffectId.ForgetItems, flag6 ? BlessedState.Cursed : BlessedState.Normal, default(ActRef));
break;
}
if (!tc.isThing)
{
int count = ((!blessed) ? 1 : (flag3 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3))));
LayerDragGrid.CreateIdentify(CC, flag3, state, 0, count);
int count = ((!blessed) ? 1 : (flag6 ? (2 + EClass.rnd(2)) : (3 + EClass.rnd(3))));
LayerDragGrid.CreateIdentify(CC, flag6, state, 0, count);
return;
}
cc.PlaySound("identify");
cc.PlayEffect("identify");
tc.Thing.Identify(cc.IsPCParty, (!flag3) ? IDTSource.Identify : IDTSource.SuperiorIdentify);
tc.Thing.Identify(cc.IsPCParty, (!flag6) ? IDTSource.Identify : IDTSource.SuperiorIdentify);
break;
}
case EffectId.Uncurse:void AddCon<T>(int rate, int power) where T : Condition
LayerDragGrid.CreateUncurse(CC, state);
return;
}
Thing thing = tc.Thing;
if (thing.blessedState == BlessedState.Cursed)
Thing thing2 = tc.Thing;
if (thing2.blessedState == BlessedState.Cursed)
{
thing.SetBlessedState(BlessedState.Normal);
thing2.SetBlessedState(BlessedState.Normal);
}
else if (thing.blessedState == BlessedState.Doomed)
else if (thing2.blessedState == BlessedState.Doomed)
{
thing.SetBlessedState(BlessedState.Normal);
thing2.SetBlessedState(BlessedState.Normal);
}
thing.GetRootCard()?.TryStack(thing);
LayerInventory.SetDirty(thing);
thing2.GetRootCard()?.TryStack(thing2);
LayerInventory.SetDirty(thing2);
break;
}
case EffectId.Lighten:void AddCon<T>(int rate, int power) where T : Condition
}
cc.PlaySound("offering");
cc.PlayEffect("buff");
int num = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight);
int num3 = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight);
tc.isWeightChanged = true;
Element orCreateElement = tc.elements.GetOrCreateElement(64);
Element orCreateElement2 = tc.elements.GetOrCreateElement(65);
Element orCreateElement3 = tc.elements.GetOrCreateElement(67);
Element orCreateElement4 = tc.elements.GetOrCreateElement(66);
bool flag2 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon;
bool flag5 = tc.IsEquipmentOrRangedOrAmmo || tc.IsThrownWeapon;
if (flag)
{
num = (int)(0.01f * (float)num * (float)power * 0.75f + 500f);
if (num < 0 || num > 10000000)
num3 = (int)(0.01f * (float)num3 * (float)power * 0.75f + 500f);
if (num3 < 0 || num3 > 10000000)
{
num = 10000000;
flag2 = false;
num3 = 10000000;
flag5 = false;
}
if (flag2)
if (flag5)
{
if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
{void AddCon<T>(int rate, int power) where T : Condition
}
else
{
num = num * (100 - power / 10) / 100;
num3 = num3 * (100 - power / 10) / 100;
if (blessed)
{
power /= 4;
}
if (flag2)
if (flag5)
{
if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo)
{void AddCon<T>(int rate, int power) where T : Condition
}
cc.Say("lighten", tc);
}
tc.c_weight = num;
tc.c_weight = num3;
tc.SetDirtyWeight();
if (tc.parent == null)
{void AddCon<T>(int rate, int power) where T : Condition
cc.PlayEffect("identify");
cc.Say("reconstruct", tc);
EClass.game.cards.uidNext += EClass.rnd(30);
int num5 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
int num6 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
CardBlueprint.Set(new CardBlueprint
{
blesstedState = state
});
Thing thing3 = ThingGen.Create(tc.id, -1, (int)((long)num5 * (long)power / 400));
thing3.genLv = num5;
Thing thing4 = ThingGen.Create(tc.id, -1, (int)((long)num6 * (long)power / 400));
thing4.genLv = num6;
if (tc.c_uidAttune != 0)
{
thing3.c_uidAttune = tc.c_uidAttune;
if (thing3.id == "amulet_engagement" || thing3.id == "ring_engagement")
thing4.c_uidAttune = tc.c_uidAttune;
if (thing4.id == "amulet_engagement" || thing4.id == "ring_engagement")
{
if (tc.c_uidAttune != EClass.pc.uid)
{
thing3.elements.ModBase(484, 3);
thing4.elements.ModBase(484, 3);
}
if (thing3.rarity < Rarity.Mythical)
if (thing4.rarity < Rarity.Mythical)
{
thing3.rarity = Rarity.Mythical;
thing4.rarity = Rarity.Mythical;
}
}
}
tc.Destroy();
CC.Pick(thing3, msg: false);
CC.Pick(thing4, msg: false);
if (!CC.IsPC)
{
CC.TryEquip(thing3);
CC.TryEquip(thing4);
}
break;
}void AddCon<T>(int rate, int power) where T : Condition
{
tc = tc.Split(1);
}
string name = tc.Name;
string name2 = tc.Name;
if (row == null)
{
bool num3 = id == EffectId.ChangeMaterialGreater;
bool flag4 = id == EffectId.ChangeMaterialLesser;
bool num7 = id == EffectId.ChangeMaterialGreater;
bool flag8 = id == EffectId.ChangeMaterialLesser;
string text2 = tc.Thing.source.tierGroup;
Dictionary<string, SourceMaterial.TierList> tierMap = SourceMaterial.tierMap;
int num4 = 1;
int num8 = 1;
if (flag)
{
num4 -= 2;
num8 -= 2;
}
if (blessed)
{
num4++;
num8++;
}
if (num3)
if (num7)
{
num4++;
num8++;
}
if (flag4)
if (flag8)
{
num4 -= 2;
num8 -= 2;
}
num4 = Mathf.Clamp(num4 + EClass.rnd(2), 0, 4);
num8 = Mathf.Clamp(num8 + EClass.rnd(2), 0, 4);
if (EClass.rnd(10) == 0)
{
text2 = ((text2 == "metal") ? "leather" : "metal");void AddCon<T>(int rate, int power) where T : Condition
SourceMaterial.TierList tierList = (text2.IsEmpty() ? tierMap.RandomItem() : tierMap[text2]);
for (int j = 0; j < 1000; j++)
{
row = tierList.tiers[num4].Select();
row = tierList.tiers[num8].Select();
if (row != tc.material)
{
break;void AddCon<T>(int rate, int power) where T : Condition
DNA.Type type = DNA.GetType(tc.material.alias);
tc.c_DNA.Generate(type);
}
cc.Say("materialChanged", name, row.GetName());
cc.Say("materialChanged", name2, row.GetName());
if (CC != null)
{
if (tc.parent == null)void AddCon<T>(int rate, int power) where T : Condition
{
tc = tc.Split(1);
}
string name2 = tc.Name;
string name = tc.Name;
cc.PlaySound("offering");
cc.PlayEffect("buff");
bool flag5 = tc.rarity == Rarity.Legendary;
bool flag2 = tc.rarity == Rarity.Legendary;
CardBlueprint.Set(new CardBlueprint
{
rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary),
rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary),
generation = CardBlueprint.Generation.GarokkHammer
});
Rand.SetBaseSeed(tc.uid + 1);
Rand.SetSeed(tc.uid + 2);
Thing thing4 = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv);
Thing thing = ThingGen.Create(tc.id, tc.idMaterial, tc.genLv);
Rand.SetSeed();
Rand.SetBaseSeed();
int num6 = 0;
foreach (Element item4 in thing4.elements.dict.Values.ToList().Shuffle())
thing.SetEncLv(tc.encLV);
thing.SetBlessedState(tc.blessedState);
int num = 0;
foreach (Element item4 in thing.elements.dict.Values.ToList().Shuffle())
{
if (tc.elements.Has(item4.id) && tc.elements.GetElement(item4.id).vBase == item4.vBase)
int num2 = (tc.elements.Has(item4.id) ? tc.elements.GetElement(item4.id).vBase : 0);
if (num2 != 0 && (Mathf.Abs(item4.vBase) <= Mathf.Abs(num2) || !MathEx.IsSameSign(item4.vBase, num2)))
{
continue;
}
tc.elements.SetBase(item4.id, item4.vBase);
Debug.Log(item4.Name + "/" + item4.vBase);
int id2 = item4.id;
if ((uint)(id2 - 64) > 3u)
if (id2 != 11)
{
num6++;
if (flag5)
if ((uint)(id2 - 64) > 3u)
{
num++;
}
tc.elements.SetBase(item4.id, item4.vBase);
Debug.Log(item4.Name + "/" + item4.vBase);
if (flag2 && num >= 2)
{
_ = 2;
break;
}
}
}
tc.rarity = (flag5 ? Rarity.Mythical : Rarity.Legendary);
EClass.pc.Say("reconstruct", name2);
tc.isCrafted = false;
tc.rarity = (flag2 ? Rarity.Mythical : Rarity.Legendary);
EClass.pc.Say("reconstruct", name);
break;
}
case EffectId.ChangeAlias:
{
Chara c2 = CC;
if (!c2.IsPC && !c2.trait.UseRandomAlias && blessed)
{
c2._alias = null;
c2.Say("reconstruct", c2);
SE.Change();
c2.PlayEffect("mutation");
break;
}
EClass.ui.AddLayer<LayerList>().SetStringList(delegate
{
List<string> list11 = new List<string>();
for (int num16 = 0; num16 < 10; num16++)
for (int num17 = 0; num17 < 10; num17++)
{
list11.Add(AliasGen.GetRandomAlias());
}void AddCon<T>(int rate, int power) where T : Condition
{
break;
}
int num13 = 0;
int num14 = 0;
foreach (Condition condition5 in TC.conditions)
{
if (condition5.Type == ConditionType.Debuff)
{
num13++;
num14++;
}
}
if (num13 == 0)
if (num14 == 0)
{
CC.SayNothingHappans();
break;void AddCon<T>(int rate, int power) where T : Condition
TC.Say("abShutterHex", TC);
Point center = CC.pos.Copy();
List<Chara> list10 = TC.pos.ListCharasInRadius(TC, 4, (Chara c) => c == TC || c.IsHostile(CC));
for (int m = 0; m < num13; m++)
for (int m = 0; m < num14; m++)
{
TweenUtil.Delay((float)m * 0.1f, delegate
{void AddCon<T>(int rate, int power) where T : Condition
{
effect.Play(center, 0f, pos);
});
int num14 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num14, 919, power, AttackSource.None, CC, showEffect: false);
int num15 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item6.DamageHP(num15, 919, power, AttackSource.None, CC, showEffect: false);
}
}
}void AddCon<T>(int rate, int power) where T : Condition
List<Thing> list = new List<Thing>();
TC.things.Foreach(delegate(Thing t)
{
int num15 = 0;
int num16 = 0;
if ((t.isEquipped || t.IsRangedWeapon || blessed) && t.blessedState < BlessedState.Normal)
{
if (t.blessedState == BlessedState.Cursed)
{
num15 = EClass.rnd(200);
num16 = EClass.rnd(200);
}
if (t.blessedState == BlessedState.Doomed)
{
num15 = EClass.rnd(1000);
num16 = EClass.rnd(1000);
}
if (blessed)
{
num15 /= 2;
num16 /= 2;
}
if (id == EffectId.UncurseEQGreater)
{
num15 /= 10;
num16 /= 10;
}
if (power >= num15)
if (power >= num16)
{
TC.Say("uncurseEQ_success", t);
t.SetBlessedState(BlessedState.Normal);void AddCon<T>(int rate, int power) where T : Condition
power = power * 2 / 3;
}
int a2 = power;
int num11 = TC.WIL * (isPowerful ? 20 : 5);
int num12 = TC.WIL * (isPowerful ? 20 : 5);
ConHolyVeil condition3 = TC.GetCondition<ConHolyVeil>();
if (condition3 != null)
{
num11 += condition3.power * 5;
num12 += condition3.power * 5;
}
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num11 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num12 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
{
TC.Say("debuff_resist", TC);
CC.DoHostileAction(TC);void AddCon<T>(int rate, int power) where T : Condition
{
tc.PlaySound("mutation");
tc.PlayEffect("mutation");
int num12 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal);
if (num12 == 0)
int num13 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal);
if (num13 == 0)
{
num12 = tc.GetInt(118);
if (num12 == 0)
num13 = tc.GetInt(118);
if (num13 == 0)
{
num12 = EClass.game.seed + tc.uid;
num13 = EClass.game.seed + tc.uid;
}
num12++;
num13++;
}
tc.Say("transBlood", tc);
tc.Talk("tail");
tc.c_bloodData = null;
tc.SetInt(118, num12);
tc.SetInt(118, num13);
break;
}
case EffectId.Youth:void AddCon<T>(int rate, int power) where T : Condition
{
bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
int num10 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
int num11 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
if (id == EffectId.Weaken)
{
flag12 = EClass.rnd(2) == 0;
mind2 = !flag12;
num10 = 1;
num11 = 1;
}
else
{void AddCon<T>(int rate, int power) where T : Condition
TC.PlaySound("debuff");
}
TC.Say(flag12 ? "damageBody" : "damageMind", TC);
for (int l = 0; l < num10; l++)
for (int l = 0; l < num11; l++)
{
TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken);
}void AddCon<T>(int rate, int power) where T : Condition
{
EClass.game.religions.Healing.Talk("ability");
}
int num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
int num10 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
if (actRef.refThing != null)
{
num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100;
num10 = num10 * (100 + actRef.refThing.Evalue(750) * 10) / 100;
}
if (flag)
{
TC.DamageHP(num9 / 2, 919, power);
TC.DamageHP(num10 / 2, 919, power);
break;
}
TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
TC.HealHPHost(num10, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
TC.CureHost(CureType.Heal, power, state);
TC.Say((power >= 300) ? "heal_heavy" : "heal_light", TC);
break;void AddCon<T>(int rate, int power) where T : Condition
if (TC.HasElement(1211))
{
TC.Say("drinkSaltWater_snail", TC);
int num8 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num8, AttackSource.None, CC);
int num9 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000);
TC.DamageHP(num9, AttackSource.None, CC);
}
else if (TC.IsPC)
{ActPlan
Item item = list[0];
return delegate
{
if (item.act is AIAct)
{
(item.act as AIAct).owner = EClass.pc;
}
if (performed && !item.act.CanPressRepeat)
{
return false;ActZap
public override bool Perform()
Act.TC = Act.CC;
EffectId idEffect = trait.IdEffect;
long a = trait.Power * (100 + (long)Act.CC.Evalue(305) * 10L + Act.CC.MAG / 2 + Act.CC.PER / 2) / 100;
ActEffect.ProcAt(idEffect, MathEx.Min(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
ActEffect.ProcAt(idEffect, MathEx.ClampToInt(a), trait.owner.blessedState, Act.CC, null, Act.TP, trait.IsNegative, new ActRef
{
refThing = trait.owner.Thing,
aliasEle = trait.aliasEle,AttackProcess
public class AttackProcess : EClass
public long toHitBase;
public long evasion;
public int dNum;
public int dDim;public class AttackProcess : EClass
public int toHitFix;
public int evasion;
public int penetration;
public int distMod;public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
toolRange = weapon?.trait as TraitToolRange;
attackType = AttackType.Slash;
attackStyle = AttackStyle.Default;
evasion = 0;
evasion = 0L;
penetration = 0;
distMod = 100;
attackIndex = _attackIndex;public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,
evasion = EClass.curve(TC.PER / 3 + TC.Evalue(150), 50, 10) + TC.DV + 25;
if (TC.isChara && TC.Chara.isBlind)
{
evasion /= 2;
evasion /= 2L;
}
if (TC.HasCondition<ConDim>())
{
evasion /= 2;
evasion /= 2L;
}
if (TC.isChara && TC.Chara.HasHigherGround(CC))
{public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =
continue;
}
int num10 = 25;
int num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5);
long num11 = EClass.rnd(num * (100 + item.Value * 10) / 500 + 5);
num11 = num11 * (100 + GetTwoHandEncBonus(CC, weapon)) / 100;
if (num11 >= 0)
{Chara
public override void OnCreate(int genLv)
num = tuple.Item3 + base.LV - source.LV;
}
}
if (source.name == "*r")
if (trait.UseRandomName)
{
base.c_altName = NameGen.getRandomName();
}
if (source.GetText("aka") == "*r" || trait.UseRandomAlias)
if (trait.UseRandomAlias)
{
_alias = AliasGen.GetRandomAlias();
}EClass
public static int rndSeed(int a, int seed)
public static int rnd(long a)
{
return Rand.rnd((int)a);
return Rand.rnd(MathEx.ClampToInt(a));
}
public static int rnd(int a)GrowSystem
}
}
public static SourceObj.Row[] sourceSnowTree = new SourceObj.Row[2]
{
EClass.sources.objs.map[54],
EClass.sources.objs.map[55]
};
private static SourceObj.Row[] _sourceSnowTree;
public const int DivStage = 30;
public string idHarvestThing;
public static SourceObj.Row[] SourceSnowTree
{
get
{
object obj = _sourceSnowTree;
if (obj == null)
{
obj = new SourceObj.Row[2]
{
EClass.sources.objs.map[54],
EClass.sources.objs.map[55]
};
_sourceSnowTree = (SourceObj.Row[])obj;
}
return (SourceObj.Row[])obj;
}
}
public virtual RenderData RenderHarvest => source.renderData;
public virtual int Step => 5;ListPeopleParty
public class ListPeopleParty : BaseListPeople
{
public override void OnCreate()
{
list.sorts = new UIList.SortMode[3]
{
UIList.SortMode.ByFeat,
UIList.SortMode.ByJob,
UIList.SortMode.ByRace
};
list.sortMode = UIList.SortMode.ByFeat;
}
public bool CanJoinParty(Chara c)
{
if (!c.IsPC)Recipe
public virtual void Build(Chara chara, Card t, Point pos, int mat, int dir, int
EClass._map.SetBlock(pos.x, pos.z, mat, ramp, dir);
if (tileType.IsBlockPass && pos.HasChara)
{
foreach (Chara item in pos.ListCharas())
foreach (Chara item in pos.ListCharas().Copy())
{
chara.Kick(item, ignoreSelf: false, karmaLoss: false);
}TaskBuild
public override void OnProgressComplete()
{
bridgeHeight = 150;
}
Chara chara = owner;
recipe.Build(this);
owner = chara;
resources.Clear();
EClass.player.flags.OnBuild(recipe);
if (owner.IsPC)
{
EClass.player.flags.OnBuild(recipe);
}
EClass._map.RefreshShadow(pos.x, pos.z);
EClass._map.RefreshShadow(pos.x, pos.z - 1);
EClass._map.RefreshFOV(pos.x, pos.z);TaskPlow
public class TaskPlow : TaskDesignation
{
public override CursorInfo CursorIcon => CursorSystem.Dig;
public override bool destIgnoreConnection => false;
public override bool CanPressRepeat => true;
public override int destDistpublic override HitResult GetHitResult()
}
return HitResult.Valid;
}
public override void OnSetOwner()
{
}
}TaskPoint
public class TaskPoint : Task, IInspect
public virtual int destDist => 0;
public virtual bool destIgnoreConnection => false;
public virtual bool destIgnoreConnection => true;
public virtual bool isBlock => false;public override IEnumerable<Status> Run()
while (Loop);
}
public override void OnSetOwner()
{
if (parent is AI_Goto aI_Goto)
{
aI_Goto.ignoreConnection = true;
}
}
public void OnInspect()
{
}Trait
public void OnBarter(bool reroll = false)
{
AddThing(ThingGen.Create(id2, MATERIAL.GetRandomMaterialFromCategory(50, "rock", EClass.sources.materials.alias["granite"]).id).SetNum(10));
}
Add("scroll_alias", 1, 0);
Add("scroll_biography", 1, 0);
Add("scroll_alias", 10, 0);
Add("scroll_biography", 10, 0);
Add("1329", 1, 0);
break;
}TraitChara
public virtual bool CanGiveRandomQuest
}
}
public virtual bool UseRandomAlias => false;
public virtual bool UseRandomName => owner.source.name == "*r";
public virtual bool UseRandomAlias => owner.source.GetText("aka") == "*r";
public virtual bool IsWearingPanty => EClass.pc.faction.IsWearingPanty(owner);UIMultiList
public void Build(UIList.SortMode m = UIList.SortMode.ByNone)
{
foreach (ListOwner owner in owners)
{
owner.list.sortMode = ((owner is ListPeopleParty) ? UIList.SortMode.ByFeat : m);
owner.list.sortMode = m;
}
if (Double)
{