EA 23.150 Nightly
June 5, 2025
16 files modified.
Important Changes
None.
ActEffect
{
if (!item3.IsFriendOrAbove(CC))
{
int num11 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item3.DamageHP(num11 * hex2, 919, power, AttackSource.None, CC);
int num10 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll();
item3.DamageHP(num10 * hex2, 919, power, AttackSource.None, CC);
}
}
});
break;
}
Thing thing4 = null;
bool flag7 = actRef.n1 == "food";
bool flag8 = actRef.n1 == "food";
if (actRef.n1 == "money")
{
int currency = TC.GetCurrency();
else
{
Func<Thing, bool> func = (Thing t) => true;
if (flag7)
if (flag8)
{
func = (Thing t) => t.IsFood;
}
List<Thing> list4 = TC.things.List(delegate(Thing t)
List<Thing> list3 = TC.things.List(delegate(Thing t)
{
if (t.parentCard?.trait is TraitChestMerchant || t.trait is TraitTool || t.IsThrownWeapon)
{
}
return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped && t.blessedState == BlessedState.Normal && func(t);
}, onlyAccessible: true);
if (list4.Count > 0)
if (list3.Count > 0)
{
thing4 = list4.RandomItem();
thing4 = list3.RandomItem();
if (thing4.Num > 1)
{
thing4 = thing4.Split(1);
{
break;
}
List<Thing> list6 = TC.things.List(delegate(Thing t)
List<Thing> list5 = TC.things.List(delegate(Thing t)
{
if (!t.isEquipped || t.blessedState == BlessedState.Doomed || t.IsToolbelt)
{
}
return (t.blessedState < BlessedState.Blessed || EClass.rnd(10) == 0) ? true : false;
});
if (list6.Count == 0)
if (list5.Count == 0)
{
CC.SayNothingHappans();
break;
}
Thing thing6 = list6.RandomItem();
Thing thing6 = list5.RandomItem();
TC.Say("curse_hit", TC, thing6);
thing6.SetBlessedState((thing6.blessedState == BlessedState.Cursed) ? BlessedState.Doomed : BlessedState.Cursed);
LayerInventory.SetDirty(thing6);
List<Thing> list = new List<Thing>();
TC.things.Foreach(delegate(Thing t)
{
int num10 = 0;
int num9 = 0;
if ((t.isEquipped || t.IsRangedWeapon || blessed) && t.blessedState < BlessedState.Normal)
{
if (t.blessedState == BlessedState.Cursed)
{
num10 = EClass.rnd(200);
num9 = EClass.rnd(200);
}
if (t.blessedState == BlessedState.Doomed)
{
num10 = EClass.rnd(1000);
num9 = EClass.rnd(1000);
}
if (blessed)
{
num10 /= 2;
num9 /= 2;
}
if (id == EffectId.UncurseEQGreater)
{
num10 /= 10;
num9 /= 10;
}
if (power >= num10)
if (power >= num9)
{
TC.Say("uncurseEQ_success", t);
t.SetBlessedState(BlessedState.Normal);
{
EClass.game.religions.Trickery.Talk("ability");
bool hex = CC.IsHostile(TC);
List<SourceStat.Row> list7 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex ? "Debuff" : "Buff")).ToList();
List<SourceStat.Row> list6 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex ? "Debuff" : "Buff")).ToList();
int power2 = power;
for (int l = 0; l < 4 + EClass.rnd(2); l++)
{
SourceStat.Row row2 = list7.RandomItem();
list7.Remove(row2);
SourceStat.Row row2 = list6.RandomItem();
list6.Remove(row2);
Proc(hex ? EffectId.DebuffKizuami : EffectId.Buff, CC, TC, power2, new ActRef
{
n1 = row2.alias
power = power * 2 / 3;
}
int a2 = power;
int num7 = TC.WIL * (isPowerful ? 20 : 5);
int num8 = TC.WIL * (isPowerful ? 20 : 5);
ConHolyVeil condition3 = TC.GetCondition<ConHolyVeil>();
if (condition3 != null)
{
num7 += condition3.power * 5;
num8 += condition3.power * 5;
}
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num7 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num8 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0)
{
TC.Say("debuff_resist", TC);
CC.DoHostileAction(TC);
break;
case EffectId.Revive:
{
List<KeyValuePair<int, Chara>> list3 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList();
List<KeyValuePair<int, Chara>> list7 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList();
if (TC.IsPCFaction || TC.IsPCFactionMinion)
{
if (TC.IsPC && list3.Count == 0)
if (TC.IsPC && list7.Count == 0)
{
list3 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList();
list7 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList();
}
if (list3.Count > 0)
if (list7.Count > 0)
{
list3.RandomItem().Value.Chara.GetRevived();
list7.RandomItem().Value.Chara.GetRevived();
break;
}
}
case EffectId.DamageMindGreat:
case EffectId.Weaken:
{
bool flag9 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool flag7 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
int num9 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
int num6 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4)));
if (id == EffectId.Weaken)
{
flag9 = EClass.rnd(2) == 0;
mind2 = !flag9;
num9 = 1;
flag7 = EClass.rnd(2) == 0;
mind2 = !flag7;
num6 = 1;
}
else
{
TC.PlayEffect("debuff");
TC.PlaySound("debuff");
}
TC.Say(flag9 ? "damageBody" : "damageMind", TC);
for (int m = 0; m < num9; m++)
TC.Say(flag7 ? "damageBody" : "damageMind", TC);
for (int k = 0; k < num6; k++)
{
TC.DamageTempElements(power, flag9, mind2, id != EffectId.Weaken);
TC.DamageTempElements(power, flag7, mind2, id != EffectId.Weaken);
}
if (TC.IsPC)
{
{
bool flag6 = id == EffectId.EnhanceBody || id == EffectId.EnhanceBodyGreat;
bool mind = id == EffectId.EnhanceMind || id == EffectId.EnhanceMindGreat;
int num6 = ((id == EffectId.EnhanceBody || id == EffectId.EnhanceMind) ? 1 : (4 + EClass.rnd(4)));
if (id != EffectId.EnhanceBody && id != EffectId.EnhanceMind)
{
EClass.rnd(4);
}
TC.Say(flag6 ? "enhanceBody" : "enhanceMind", TC);
TC.PlayEffect("buff");
TC.PlaySound("buff");
for (int k = 0; k < num6; k++)
{
TC.EnhanceTempElements(power, flag6, mind, onlyRenew: true);
}
TC.EnhanceTempElements(power, flag6, mind, onlyRenew: true);
break;
}
case EffectId.RestoreBody:
case EffectId.RestoreMind:
{
bool flag8 = id == EffectId.RestoreBody;
bool flag9 = id == EffectId.RestoreBody;
if (flag)
{
Redirect(flag8 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef));
Redirect(flag9 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef));
break;
}
TC.Say(flag8 ? "restoreBody" : "restoreMind", TC);
TC.Say(flag9 ? "restoreBody" : "restoreMind", TC);
TC.PlaySound("heal");
TC.PlayEffect("heal");
TC.CureHost(flag8 ? CureType.CureBody : CureType.CureMind, power, state);
TC.CureHost(flag9 ? CureType.CureBody : CureType.CureMind, power, state);
if (blessed)
{
Redirect(flag8 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef));
Redirect(flag9 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef));
}
break;
}
{
Debug.Log(actRef.act.id);
}
int num8 = 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 num7 = 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)
{
num8 = num8 * (100 + actRef.refThing.Evalue(7500)) / 100;
num7 = num7 * (100 + actRef.refThing.Evalue(7500)) / 100;
}
if (flag)
{
TC.DamageHP(num8 / 2, 919, power);
TC.DamageHP(num7 / 2, 919, power);
break;
}
TC.HealHPHost(num8, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item);
TC.HealHPHost(num7, (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;
{
power /= 4;
}
List<Thing> list5 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false);
if (list5.Count != 0)
List<Thing> list4 = TC.things.List((Thing t) => (t.Num <= 1 && t.IsEquipmentOrRanged && !t.IsToolbelt && !t.IsLightsource && t.isEquipped) ? true : false);
if (list4.Count != 0)
{
Thing thing5 = list5.RandomItem();
Thing thing5 = list4.RandomItem();
TC.Say("acid_hit", TC);
if (thing5.isAcidproof)
{
Chara
if (type == CureType.Death || type == CureType.Boss)
{
SAN.Mod(-20);
RemoveCondition<ConBrightnessOfLife>();
}
if (type == CureType.Jure)
{
{
return;
}
bool flag = HasElement(1215);
if (tempElements == null)
{
tempElements = new ElementContainer();
tempElements.SetParent(this);
}
int num = Mathf.Abs(elements.ValueWithoutLink(ele)) + 20;
int num2 = Mathf.Max(-num, -100);
int num3 = tempElements.Base(ele);
int num4 = num3 + a;
if (a > 0 && flag)
{
a = a * 150 / 100;
}
int num = elements.ValueWithoutLink(ele);
int num2 = Mathf.Abs(num) + 100;
int num3 = num2 / (flag ? 2 : 4);
int num4 = -num - 100;
int num5 = tempElements.Base(ele);
int num6 = num5 + a;
if (onlyRenew)
{
if (a > 0 && num3 >= a)
{
a = 0;
}
if (a < 0 && num3 <= a)
{
a = 0;
}
num3 = Mathf.Min(a, num3);
num4 = Mathf.Max(a, -num2 / 3);
}
if (num4 > num)
if (a > 0 && num6 > num3)
{
a = ((num > num3) ? (num - num3) : 0);
a = ((num3 > num5) ? (num3 - num5) : 0);
}
if (num4 < num2)
if (a < 0 && num6 < num4)
{
a = ((num2 < num3) ? (num2 - num3) : 0);
a = ((num4 < num5) ? (num4 - num5) : 0);
}
Element element = tempElements.ModBase(ele, a);
if (element.vBase == 0)
{
if (body)
{
DamageTempElement(Element.List_Body.RandomItem(), p);
DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
}
if (mind)
{
DamageTempElement(Element.List_Mind.RandomItem(), p);
DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
}
}
public void DamageTempElement(int ele, int p, bool onlyRenew = false)
{
ModTempElement(ele, -(p / 100 + EClass.rnd(p / 100 + 1) + 1), naturalDecay: false, onlyRenew);
ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
}
public void EnhanceTempElements(int p, bool body, bool mind, bool onlyRenew = false)
{
if (body)
{
EnhanceTempElement(Element.List_Body.RandomItem(), p);
}
if (mind)
int[] array = (body ? Element.List_Body : Element.List_Mind);
foreach (int ele in array)
{
EnhanceTempElement(Element.List_Mind.RandomItem(), p);
EnhanceTempElement(ele, p, onlyRenew);
}
}
public void EnhanceTempElement(int ele, int p, bool onlyRenew = false)
{
ModTempElement(ele, p / 100 + EClass.rnd(p / 100 + 1), naturalDecay: false, onlyRenew);
ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
}
public void DiminishTempElements(int a = 1)
CoreDebug
@@ -445,6 +445,7 @@ public void QuickStart()
{
thing.AddCard(ThingGen.Create("mathammer", MATERIAL.GetRandomMaterial(100).alias)).SetNum(10);
}
thing.AddCard(ThingGen.Create("mathammer", 103)).SetNum(10);
thing.AddCard(ThingGen.Create("mathammer", 102)).SetNum(10);
thing.AddCard(ThingGen.Create("mathammer", 33)).SetNum(10);
thing.AddCard(ThingGen.Create("mathammer", 18)).SetNum(10);
ELEMENT
@@ -1042,6 +1042,7 @@ public virtual Act.Cost GetCost(Chara c)
case 6020:
result2.cost = Mathf.Min(c.stamina.max / 3 + 10, 30);
break;
case 6663:
case 6664:
{
int num2 = -2;
FactionBranch
@@ -1229,17 +1229,21 @@ public void OnClaimZone()
public void OnUnclaimZone()
{
List<Element> list = owner.ListLandFeats();
elements.SetBase(list[1].id, 0);
elements.SetBase(list[2].id, 0);
if (lv < 5)
List<Element> source = owner.ListLandFeats();
if (lv >= 5)
{
return;
foreach (Element item in source.Where((Element a) => a.HasTag("network")).ToList())
{
EClass.pc.faction.elements.ModBase(item.id, -item.Value);
}
}
foreach (Element item in list.Where((Element a) => a.HasTag("network")).ToList())
Element[] array = elements.dict.Values.ToArray();
foreach (Element element in array)
{
EClass.pc.faction.elements.ModBase(item.id, -item.Value);
elements.SetBase(element.id, 0);
}
owner.landFeats = null;
owner.ListLandFeats();
}
public void ValidateUpgradePolicies()
GrowSystem
@@ -92,7 +92,9 @@ public int Convert(int tile)
public virtual bool NeedSunlight => true;
public virtual bool NeedUndersea => false;
public virtual bool GrowOnLand => true;
public virtual bool GrowUndersea => false;
public virtual AnimeID AnimeProgress => AnimeID.HitObj;
@@ -273,6 +275,21 @@ public bool CanGrow(VirtualDate date)
{
return false;
}
if (GrowUndersea)
{
if (EClass._zone.IsUnderwater || cell.sourceFloor.tileType.IsDeepWater)
{
return true;
}
}
else if (EClass._zone.IsUnderwater)
{
return false;
}
if (!GrowOnLand)
{
return false;
}
if (NeedSunlight)
{
if (date.sunMap == null)
@@ -284,17 +301,6 @@ public bool CanGrow(VirtualDate date)
return false;
}
}
if (NeedUndersea)
{
if (!EClass._zone.IsUnderwater && !cell.sourceFloor.tileType.IsDeepWater)
{
return false;
}
}
else if (EClass._zone.IsUnderwater)
{
return false;
}
return true;
}
GrowSystemSeaweed
@@ -2,7 +2,9 @@ public class GrowSystemSeaweed : GrowSystemWheat
{
public override int HarvestStage => -1;
public override bool NeedUndersea => true;
public override bool GrowOnLand => false;
public override bool GrowUndersea => true;
public override bool NeedSunlight => false;
GrowSystemTreeCoralwood
public class GrowSystemTreeCoralwood : GrowSystemTreeSingle
{
public override bool GrowUndersea => true;
public override int GetShadow(int index)
{
return 34;
GrowSystemTreeFeywood
public class GrowSystemTreeFeywood : GrowSystemTree
{
public override bool GrowUndersea => true;
}
TraitDeed
@@ -13,28 +13,21 @@ public override void OnRead(Chara c)
}
Dialog.YesNo("dialog_claimLand", delegate
{
if (EClass._zone.GetInt(2) != 0)
EClass._zone.ClaimZone();
owner.ModNum(-1);
WidgetMenuPanel.OnChangeMode();
if (EClass._zone == EClass.game.StartZone)
{
Msg.Say("claimCooldown2");
}
else
{
EClass._zone.ClaimZone();
owner.ModNum(-1);
WidgetMenuPanel.OnChangeMode();
if (EClass._zone == EClass.game.StartZone)
if (EClass.game.quests.Get<QuestHome>() != null)
{
EClass.game.quests.Home.ChangePhase(1);
}
if (QuestMain.Phase < 200)
{
if (EClass.game.quests.Get<QuestHome>() != null)
{
EClass.game.quests.Home.ChangePhase(1);
}
if (QuestMain.Phase < 200)
{
EClass.game.quests.Main.ChangePhase(200);
}
EClass.game.quests.Main.ChangePhase(200);
}
EClass.player.EndTurn();
}
EClass.player.EndTurn();
});
}
}
TraitPotion
public class TraitPotion : TraitDrink
{
public override int Power => 200;
public override int CraftNum
{
get
TraitPotionAlchemy
@@ -10,10 +10,20 @@ public int GetPower()
{
int num = 200;
int num2 = 100;
int refVal = owner.refVal;
if ((uint)(refVal - 8400) <= 5u)
switch (owner.refVal)
{
case 8400:
case 8401:
case 8402:
case 8403:
case 8404:
case 8405:
num2 = 150;
break;
case 8470:
case 8471:
num2 = 100 + owner.encLV * 50;
break;
}
return num * (100 + owner.encLV * num2) / 100;
}
TraitPotionRandom
@@ -6,6 +6,8 @@ public class TraitPotionRandom : TraitPotion
lvMod = 10
};
public override int Power => 200;
public override SourceElement.Row source => EClass.sources.elements.map[owner.refVal];
public override string AliasEle => source.aliasRef;
TraitSeed
@@ -46,13 +46,20 @@ public override void WriteNote(UINote n, bool identified)
{
n.AddText("isWaterCrop");
}
if (row.tag.Contains("undersea"))
if (row.growth != null)
{
n.AddText("isUnderseaCrop");
}
if (row.growth != null && row.growth.NeedSunlight)
{
n.AddText("isNeedSun");
if (row.growth.GrowOnLand)
{
n.AddText("isGrowOnLand");
}
if (row.growth.GrowUndersea)
{
n.AddText("isGrowUndersea");
}
if (row.growth.NeedSunlight)
{
n.AddText("isNeedSun");
}
}
if (row.growth == null || !row.growth.CanLevelSeed)
{
WidgetSearch
@@ -106,6 +106,10 @@ public override void Search(string s)
extra.lastSearch = s;
}
s = s.ToLower();
if (!buttonClear)
{
return;
}
buttonClear.SetActive(field.text != "");
buttonRefresh.SetActive(field.text != "");
if (s == lastSearch || s.Length == 0)
Zone
@@ -3303,7 +3303,7 @@ void Perform(HashSet<int> farmMap)
{
date.BuildSunMap();
}
if (!date.sunMap.Contains(c.index))
if (!date.sunMap.Contains(c.index) && !c.growth.CanGrow(date))
{
c.growth.Perish();
}