EA 23.205 Nightly
September 25, 2025
9 files modified.
Important Changes
None.
AI_Idle
public override IEnumerable<Status> Run()
cs
{
continue;
}
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
if (thing8.encLV >= 0)
{
public override IEnumerable<Status> Run()
cs
{
owner.TryAssignBed();
}
if (owner.id == "geist" && EClass.rnd(20) == 0)
string text;
if (!EClass._zone.IsRegion)
{
Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
if (nearestPoint != null)
text = owner.id;
if (!(text == "geist"))
{
foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion))
if (text == "mech_scarab" && EClass.rnd(20) == 0)
{
item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
int i = 0;
owner.pos.ForeachNeighbor(delegate(Point p)
{
if (p.HasChara && p.FirstChara.id == "mech_scarab")
{
i++;
}
});
if (i <= 2)
{
EClass._zone.AddCard(owner.Duplicate(), owner.pos.GetNearestPoint(allowBlock: false, allowChara: false));
}
}
if (owner != null)
}
else if (EClass.rnd(20) == 0)
{
Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
if (nearestPoint != null)
{
if (!owner.IsPCFactionOrMinion)
foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion))
{
item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
}
if (owner != null)
{
EClass.pc.ai.Cancel();
if (!owner.IsPCFactionOrMinion)
{
EClass.pc.ai.Cancel();
}
owner.Teleport(nearestPoint);
}
owner.Teleport(nearestPoint);
yield return Success();
}
yield return Success();
}
}
if (EClass._zone.IsPCFaction)
public override IEnumerable<Status> Run()
cs
else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
{
bool flag4 = EClass._zone is Zone_Derphy;
string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
if (!text.IsEmpty())
string text2 = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
if (!text2.IsEmpty())
{
owner.Talk(text);
owner.Talk(text2);
}
if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
{
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 j = 0; j < 100; j++)
for (int k = 0; k < 100; k++)
{
Point randomPoint = EClass._map.GetRandomPoint();
if (randomPoint.IsDeepWater && !randomPoint.IsBlocked)
public override IEnumerable<Status> Run()
cs
}
}
}
string aiIdle = owner.source.aiIdle;
if (!(aiIdle == "stand") && !(aiIdle == "root"))
text = owner.source.aiIdle;
if (!(text == "stand") && !(text == "root"))
{
if (EClass.rnd(15) == 0)
{
public override IEnumerable<Status> Run()
cs
yield return Restart();
Point FindMovePoint(BaseArea.AccessType type)
{
for (int k = 0; k < 20; k++)
for (int l = 0; l < 20; l++)
{
Point randomPoint2 = owner.pos.GetRandomPoint(5 + k, requireLos: false);
Point randomPoint2 = owner.pos.GetRandomPoint(5 + l, requireLos: false);
if (randomPoint2 != null && randomPoint2.IsInBounds && (randomPoint2.cell.room == null || randomPoint2.cell.room.data.accessType == type))
{
return randomPoint2;
ActMelee
public bool Attack(float dmgMulti = 1f)
cs
{
Act.CC.RemoveCondition<ConInvisibility>();
}
if (orgTC.isChara && orgTC.ExistsOnMap && orgTC != cC && !orgTC.IsRestrainedResident && !orgTC.IsDisabled && ACT.Melee.CanPerform(orgTC.Chara, cC))
if (orgTC.isChara && orgTC.ExistsOnMap && orgTC != cC && !orgTC.IsRestrainedResident && !orgTC.IsDisabled && ACT.Melee.CanPerform(orgTC.Chara, cC) && (!orgTC.IsPCFactionOrMinion || !EClass._zone.isPeace))
{
if (parried)
{
ActRush
public override bool CanPerform()
cs
return false;
}
Act.TP.Set(flag ? EClass.scene.mouseTarget.pos : Act.TC.pos);
if (Act.CC.isRestrained)
if (Act.CC.isRestrained || Act.CC.HasCondition<ConEntangle>())
{
return false;
}
Biography
cs
return int.Parse(array[1]);
}
}
if (!c.IsPC && EClass.game.principal.noAging)
if (!c.IsPC && EClass.game.principal.noAging && EClass.world.date.year - birthYear >= 13)
{
return EClass.game.Prologue.year - birthYear;
return (int)MathF.Max(EClass.game.Prologue.year - birthYear, 13f);
}
return EClass.world.date.year - birthYear;
}
Card
public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel
cs
switch (currency)
{
case CurrencyType.Influence:
if (id == "lunch_love")
switch (id)
{
case "ticket_fortune":
return 5;
case "medal":
return 5;
case "lunch_love":
return 10;
}
break;
Player
cs
PlayStory(availableStories[0]);
availableStories.RemoveAt(0);
}
if (!LayerDrama.Instance && !EClass.game.isLoading && EClass.debug.enable && EClass._zone.IsPCFaction && EClass.game.quests.GetPhase<QuestIntoDarkness>() == 0 && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 5)
if (!LayerDrama.Instance && !EClass.game.isLoading && EClass._zone.IsPCFaction)
{
EClass.game.cards.globalCharas.Find("kettle");
EClass.game.quests.Get<QuestNegotiationDarkness>().Complete();
EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk();
if (EClass.game.quests.GetPhase<QuestIntoDarkness>() == 0 && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 5)
{
EClass.game.quests.Get<QuestNegotiationDarkness>().Complete();
EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk();
}
else if (EClass.game.quests.GetPhase<QuestIntoDarkness>() == 1)
{
EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk();
}
else
{
EClass.game.quests.GetPhase<QuestIntoDarkness>();
_ = 2;
}
}
}
Thing
public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns
cs
return s;
}
int num4 = e.Value;
if (e.source.IsWeaponEnc && !e.source.tag.Contains("modRanged") && isEquipped && root.isChara)
if (e.source.IsWeaponEnc && (!e.source.tag.Contains("modRanged") || e.id == 609) && isEquipped && root.isChara)
{
num4 = num4 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara)) / 100;
}
Trait
cs
{
break;
}
int num4 = 0;
int num5 = 0;
foreach (Thing thing10 in c_copyContainer.things)
{
if (!owner.trait.CanCopy(thing10))
cs
{
thing5.elements.Remove(item.id);
}
int num5 = 1;
int num6 = 1;
switch (owner.trait.CopyShop)
{
case CopyShopType.Item:
{
num5 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50);
num6 = (1000 + owner.c_invest * 100) / (thing5.GetPrice(CurrencyType.Money, sell: false, PriceType.CopyShop) + 50);
int[] array = new int[4] { 701, 704, 703, 702 };
foreach (int ele in array)
{
if (thing5.HasElement(ele))
{
num5 = 1;
num6 = 1;
}
}
break;
cs
thing5.c_charges = thing10.c_charges;
break;
}
if (num5 > 1 && thing5.trait.CanStack)
if (num6 > 1 && thing5.trait.CanStack)
{
thing5.SetNum(num5);
thing5.SetNum(num6);
}
AddThing(thing5);
num4++;
if (num4 > owner.trait.NumCopyItem)
num5++;
if (num5 > owner.trait.NumCopyItem)
{
break;
}
cs
break;
case ShopType.RedBook:
{
for (int num3 = 0; num3 < 30; num3++)
for (int num4 = 0; num4 < 30; num4++)
{
AddThing(ThingGen.CreateFromCategory((EClass.rnd(2) == 0) ? "_book" : "book"));
}
cs
AddThing(TraitSeed.MakeSeed("carrot")).SetNum(4 + EClass.rnd(4));
AddThing(TraitSeed.MakeSeed("potato")).SetNum(4 + EClass.rnd(4));
AddThing(TraitSeed.MakeSeed("corn")).SetNum(4 + EClass.rnd(4));
for (int num7 = 0; num7 < EClass.rnd(3) + 1; num7++)
for (int num8 = 0; num8 < EClass.rnd(3) + 1; num8++)
{
Add("462", 1, 0);
}
for (int num8 = 0; num8 < EClass.rnd(3) + 1; num8++)
for (int num9 = 0; num9 < EClass.rnd(3) + 1; num9++)
{
Add("1167", 1, 0);
}
cs
break;
case ShopType.Influence:
{
bool num2 = owner.id == "big_sister";
TraitTicketFurniture.SetZone(num2 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99));
if (num2)
bool num3 = owner.id == "big_sister";
TraitTicketFurniture.SetZone(num3 ? EClass.game.spatials.Find("little_garden") : EClass._zone, Add("ticket_furniture", 1, 0).SetNum(99));
if (num3)
{
Add("littleball", 10, 0);
if (owner.Chara.affinity.CanGiveCard())
cs
break;
}
case ShopType.Medal:
NoRestock(ThingGen.Create("sword_dragon"));
NoRestockId("sword_dragon");
Add("sword_dragon", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("blunt_bonehammer"));
NoRestockId("blunt_bonehammer");
Add("blunt_bonehammer", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("pole_gunlance"));
NoRestockId("pole_gunlance");
Add("pole_gunlance", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("sword_muramasa"));
NoRestockId("sword_muramasa");
Add("sword_muramasa", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("sword_forgetmenot"));
NoRestockId("sword_forgetmenot");
Add("sword_forgetmenot", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("dagger_fish"));
NoRestockId("dagger_fish");
Add("dagger_fish", 1, 0).SetReplica(on: true);
NoRestock(ThingGen.Create("sword_zephir"));
NoRestockId("sword_zephir");
Add("sword_zephir", 1, 0).SetReplica(on: true);
Add("ribbon", 1, 0);
Add("helm_sage", 1, 0);
NoRestockId("ribbon");
NoRestockId("helm_sage");
Add("diary_sister", 1, 0);
Add("diary_catsister", 1, 0);
Add("diary_lady", 1, 0);
cs
default:
{
float num = (float)(3 + Mathf.Min(ShopLv / 5, 10)) + Mathf.Sqrt(ShopLv);
int num2 = 300;
if (ShopType == ShopType.Ecopo)
{
num2 = 30;
}
num = num * (float)(100 + EClass.pc.Evalue(1406) * 5) / 100f;
num = Mathf.Min(num, 300f);
num = Mathf.Min(num, num2);
for (int j = 0; (float)j < num; j++)
{
Thing thing = CreateStock();
cs
continue;
}
string[] recipeKey = item3.row.recipeKey;
for (int num6 = 0; num6 < recipeKey.Length; num6++)
for (int num7 = 0; num7 < recipeKey.Length; num7++)
{
if (recipeKey[num6] == ShopType.ToString())
if (recipeKey[num7] == ShopType.ToString())
{
NoRestock(ThingGen.CreateRecipe(item3.id));
break;
cs
{
case ShopType.Moyer:
{
for (int num11 = 1; num11 <= 12; num11++)
for (int num12 = 1; num12 <= 12; num12++)
{
AddAdvWeek(num11);
AddAdvWeek(num12);
}
break;
}
case ShopType.StrangeGirl:
{
int num12 = (EClass.debug.enable ? 20 : (EClass._zone.development / 10));
if (num12 > 0)
int num13 = (EClass.debug.enable ? 20 : (EClass._zone.development / 10));
if (num13 > 0)
{
Add("syringe_gene", num12, 0);
Add("syringe_gene", num13, 0);
Add("diary_little", 1, 0);
}
if (num12 > 10)
if (num13 > 10)
{
Add("syringe_heaven", num12 / 5, 0);
Add("syringe_heaven", num13 / 5, 0);
Add("1276", 1, 0);
}
Add("medal", 10, 0);
Add("ticket_fortune", 10, 0);
break;
}
case ShopType.GeneralExotic:
cs
Add("ticket_armpillow", 1, 0);
Add("ticket_champagne", 1, 0);
}
for (int num9 = 0; num9 < 3; num9++)
for (int num10 = 0; num10 < 3; num10++)
{
if (EClass.rnd(5) == 0)
{
TreasureType treasureType = ((EClass.rnd(10) == 0) ? TreasureType.BossNefia : ((EClass.rnd(10) == 0) ? TreasureType.Map : TreasureType.RandomChest));
int num10 = EClass.rnd(EClass.rnd(ShopLv + (EClass.debug.enable ? 200 : 50)) + 1) + 1;
int num11 = EClass.rnd(EClass.rnd(ShopLv + (EClass.debug.enable ? 200 : 50)) + 1) + 1;
Thing thing6 = ThingGen.Create(treasureType switch
{
TreasureType.Map => "chest_treasure",
cs
_ => "chest3",
});
thing6.c_lockedHard = true;
thing6.c_lockLv = num10;
thing6.c_priceAdd = 2000 + num10 * 250 * ((treasureType == TreasureType.RandomChest) ? 1 : 5);
thing6.c_lockLv = num11;
thing6.c_priceAdd = 2000 + num11 * 250 * ((treasureType == TreasureType.RandomChest) ? 1 : 5);
thing6.c_revealLock = true;
ThingGen.CreateTreasureContent(thing6, num10, treasureType, clearContent: true);
ThingGen.CreateTreasureContent(thing6, num11, treasureType, clearContent: true);
AddThing(thing6);
}
}
cs
ShopType shopType = ShopType;
if (shopType == ShopType.General || shopType == ShopType.Food)
{
for (int num13 = 0; num13 < (EClass.debug.enable ? 3 : 3); num13++)
for (int num14 = 0; num14 < (EClass.debug.enable ? 3 : 3); num14++)
{
if (EClass.rnd(3) == 0)
{
cs
{
return;
}
int num14 = t.things.width * 10;
if (t.things.Count > num14)
int num15 = t.things.width * 10;
if (t.things.Count > num15)
{
int num15 = t.things.Count - num14;
for (int num16 = 0; num16 < num15; num16++)
int num16 = t.things.Count - num15;
for (int num17 = 0; num17 < num16; num17++)
{
t.things.LastItem().Destroy();
}
cs
AddThing(_t);
}
}
void NoRestockId(string _id)
{
NoRestock(ThingGen.Create(_id));
}
}
public Thing CreateStock()
Zone
cs
return true;
}
bool flag = false;
string text = id;
if (!(text == "cave_yeek"))
switch (id)
{
if (text == "cave_mino" && !(this is Zone_DungeonMino))
case "cave_dragon":
if (!(this is Zone_DungeonDragon))
{
flag = true;
}
}
else if (!(this is Zone_DungeonYeek))
{
flag = true;
break;
case "cave_yeek":
if (!(this is Zone_DungeonYeek))
{
flag = true;
}
break;
case "cave_mino":
if (!(this is Zone_DungeonMino))
{
flag = true;
}
break;
}
Zone topZone = GetTopZone();
if (!flag)