EA 23.275 Nightly
February 23, 2026
14 files modified. 4 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Quest (1)
public static Quest Create(string _id, string _idPerson = null, Chara c = null)
public static Quest Create(string _id, string _idPerson = null, Chara c = null, bool assignQuest = true) AI_Sleep
public override void OnProgressComplete()
{
owner._Move(base.target.pos);
}
owner.Sleep(base.target);
owner.Sleep(base.target, base.target.pos.FindThing<TraitPillow>()?.owner as Thing);
}
}ActEffect
void AddCon<T>(int rate, int power) where T : Condition
tc.elements.ModBase(64, -Mathf.Clamp(orCreateElement.vBase * power / 1000, 1, 5));
}
}
cc.Say("lighten_curse", cc, tc);
cc.Say("lighten_curse", tc);
}
else
{void AddCon<T>(int rate, int power) where T : Condition
tc.elements.ModBase(64, Mathf.Clamp(orCreateElement.vBase * power / 1000, 1, 5));
}
}
cc.Say("lighten", cc, tc);
cc.Say("lighten", tc);
}
tc.c_weight = num5;
tc.SetDirtyWeight();void AddCon<T>(int rate, int power) where T : Condition
}
cc.PlaySound("mutation");
cc.PlayEffect("identify");
cc.Say("reconstruct", cc, tc);
cc.Say("reconstruct", tc);
EClass.game.cards.uidNext += EClass.rnd(30);
int num6 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
CardBlueprint.Set(new CardBlueprintChara
public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
}
if (newPoint.cell.CanSuffocate())
{
AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
bool flag = HasElement(1252);
if (!flag)
{
AddCondition<ConSuffocation>((Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
}
int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
if (num4 >= 2)
{public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
}
if (!isDead && !HasElement(429))
{
ModExp(200, 1 + num4 * 12);
ModExp(200, ((!flag) ? 1 : 10) + num4 * 12);
}
}
EClass.player.regionMoveWarned = false;public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
Chara chara = ((ride == null) ? this : ride);
if (!EClass._zone.IsRegion || chara.IsPC)
{
bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
bool flag2 = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
{
flag = true;
flag2 = true;
}
if (flag && newPoint.Distance(pos) <= 1)
if (flag2 && newPoint.Distance(pos) <= 1)
{
Point randomNeighbor = pos.GetRandomNeighbor();
if (CanMoveTo(randomNeighbor, allowDestroyPath: false))public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
}
Cell cell = newPoint.cell;
Cell cell2 = pos.cell;
bool flag2 = cell.HasLiquid && !IsLevitating;
bool flag3 = cell.HasLiquid && !IsLevitating;
bool hasBridge = cell.HasBridge;
bool hasRamp = cell.HasRamp;
bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
bool flag4 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
bool flag4 = cell.IsTopWater && !cell.isFloating;
bool flag5 = cell.IsTopWater && !cell.isFloating;
if (!EClass._zone.IsRegion)
{
if (cell.hasDoorBoat)
{
tileRow = FLOOR.sourceWood;
row = MATERIAL.sourceOak;
flag4 = false;
flag5 = false;
}
else if (flag3 && !tileRow.ignoreSnow)
else if (flag4 && !tileRow.ignoreSnow)
{
if (tileRow.tileType.IsWater)
{public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
tileRow = FLOOR.sourceSnow;
row = MATERIAL.sourceSnow;
}
flag4 = false;
flag5 = false;
}
}
if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
}
if (isSynced)
{
string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
string text = ((flag3 || flag5) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
{
text = cell.matObj.soundFoot;public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
SoundManager.altLastData = IsPC;
PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
}
if (!flag4)
if (!flag5)
{
Scene scene = EClass.scene;
PCOrbit pcOrbit = EClass.screen.pcOrbit;
bool flag5 = scene.actionMode.gameSpeed > 1f;
bool flag6 = scene.actionMode.gameSpeed > 1f;
scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
scene.psFoot.startColor = row.matColor;
scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2));
if (flag5 && IsPC)
scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag6) ? 1 : 2));
if (flag6 && IsPC)
{
scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
scene.psSmoke.Emit(pcOrbit.emitSmoke);
}
}
if (flag2 || flag4)
if (flag3 || flag5)
{
Effect.Get("ripple").Play(newPoint);
}public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)
EClass.pc.SetPCCState(PCCState.ShoesOff);
}
}
bool flag6 = flag4 || EClass._zone.IsUnderwater;
if (wasInWater != flag6)
bool flag7 = flag5 || EClass._zone.IsUnderwater;
if (wasInWater != flag7)
{
wasInWater = flag6;
wasInWater = flag7;
RefreshSpeed();
}
hasMovedThisTurn = true; hygiene.Mod(2);
}
}
if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode)
if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode && !HasElement(1252))
{
AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
}public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
int i = 1;
int num4 = 0;
bool flag = a.IsTargetHostileParty();
bool flag2 = ability.Has(a.id);
if (IsPC && HasCondition<StanceManaCost>())
{
num4 = Evalue(1657);public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
});
}
}
if (a is Spell && IsPC && a.vPotential < i)
if (a is Spell && IsPC && a.vPotential < i && !flag2)
{
i = 1;
_pts.Clear();public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
{
num3 = 1 + Evalue(1648);
}
if (IsPC && cost.cost > 0 && a.Value == 0 && !ability.Has(a.id))
if (IsPC && cost.cost > 0 && a.Value == 0 && !flag2)
{
Msg.SayNothingHappen();
return false;public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
if (IsPC)
{
_ = (i + 1) / 2;
bool flag2 = ability.Has(a.id);
if (a.vPotential < i && !flag2)
{
Msg.Say("noSpellStock");public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
}
if (flag3 && !isDead)
{
if (IsPC && flag2 && a.vBase == 0 && a.PotentialAsStock)
{
elements.ModBase(a.id, 1);
}
if (cost.cost > 0 && a.source.lvFactor > 0)
{
ModExp(a.id, spellExp);CoreDebug
}
if (Input.GetKeyDown(KeyCode.F3))
{
for (int i = 0; i < 10; i++)
{
Thing thing = ThingGen.Create("egg_fertilized");
thing.TryMakeRandomItem(40);
thing.SetEncLv(200);
EClass.pc.Pick(thing);
}
foreach (Chara deadChara in EClass._map.deadCharas)
{
Debug.Log(deadChara);
}
EClass.core.steam.CheckUpdate();
EClass.player.flags.loytelMartLv++;
Msg.Say("loytelmart:" + EClass.player.flags.loytelMartLv);
Guild.Fighter.relation.rank = 20;
Guild.Mage.relation.rank = 20;
Guild.Thief.relation.rank = 20;
Guild.Merchant.relation.rank = 20;
if (EClass.Branch != null)
{
EClass.Branch.ModExp(EClass.Branch.GetNextExp());
}
foreach (Chara item in EClass._map.charas.ToList())
{
item.AddExp(item.ExpToNext);
item.Vomit();
}
EClass.pc.PlayEffect("boost");
EClass.pc.PlaySound("boost");
EClass.pc.elements.SetBase(306, 100);
EClass.pc.elements.SetBase(85, 100);
EClass.pc.feat += 10;
EClass.player.totalFeat += 10;
EClass.ui.Say("dawedadwwdaadwawdawd");
EClass.ui.Say("fsefsefsefesf", EClass.core.refs.spriteNoIng);
return;
}
if (Input.GetKeyDown(KeyCode.F4)) if (Input.GetKey(KeyCode.F9))
{
EClass.scene.paused = false;
for (int j = 0; j < advanceMin; j++)
for (int i = 0; i < advanceMin; i++)
{
EClass.game.updater.FixedUpdate();
} {
if (Input.GetMouseButtonDown(0))
{
foreach (Card item2 in list)
foreach (Card item in list)
{
Debug.Log(item2.Name + "/" + item2.dir + "/" + item2.flipX + "/" + item2.angle);
Debug.Log(item.Name + "/" + item.dir + "/" + item.flipX + "/" + item.angle);
}
}
if (Input.GetMouseButtonDown(1)) }
if (key)
{
foreach (Card item3 in EClass._map.Roaming.all)
foreach (Card item2 in EClass._map.Roaming.all)
{
EClass._zone.RemoveCard(item3);
EClass._zone.RemoveCard(item2);
}
}
else if (hitPoint.detail != null) {
for (int num4 = hitPoint.detail.things.Count - 1; num4 >= 0; num4--)
{
Thing thing2 = hitPoint.detail.things[num4];
Debug.Log(thing2.id + "/" + thing2.Pref.height + "/" + thing2.trait?.ToString() + "/" + thing2.source.tileType.CanStack + "/" + thing2.source.tileType?.ToString() + "/" + thing2.isSynced + "/" + RenderObject.syncList.Contains(thing2.renderer));
Thing thing = hitPoint.detail.things[num4];
Debug.Log(thing.id + "/" + thing.Pref.height + "/" + thing.trait?.ToString() + "/" + thing.source.tileType.CanStack + "/" + thing.source.tileType?.ToString() + "/" + thing.isSynced + "/" + RenderObject.syncList.Contains(thing.renderer));
}
}
if (!Application.isEditor) {
break;
}
foreach (Card item4 in hitPoint.ListCards())
foreach (Card item3 in hitPoint.ListCards())
{
item4.renderer.PlayAnime(num5.ToEnum<AnimeID>());
item3.renderer.PlayAnime(num5.ToEnum<AnimeID>());
}
Debug.Log(num5.ToEnum<AnimeID>());
break; case DebugHotkey.Item:
if (Input.GetKeyDown(KeyCode.Alpha1))
{
Thing thing3 = ThingGen.Create("stairsDown_cave");
Thing thing2 = ThingGen.Create("stairsDown_cave");
EClass._zone.AddCard(thing2, EClass.pc.pos);
thing2.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
Thing thing3 = ThingGen.Create("stairs");
EClass._zone.AddCard(thing3, EClass.pc.pos);
thing3.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha2))
if (Input.GetKeyDown(KeyCode.Alpha3))
{
Thing thing4 = ThingGen.Create("stairs");
EClass._zone.AddCard(thing4, EClass.pc.pos);
Thing thing4 = ThingGen.Create("sign");
EClass._zone.AddCard(thing4, hitPoint);
thing4.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha3))
if (Input.GetKeyDown(KeyCode.Alpha4))
{
Thing thing5 = ThingGen.Create("sign");
Thing thing5 = ThingGen.Create("sign2");
EClass._zone.AddCard(thing5, hitPoint);
thing5.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha4))
if (Input.GetKeyDown(KeyCode.Alpha5))
{
Thing thing6 = ThingGen.Create("sign2");
Thing thing6 = ThingGen.Create("well");
EClass._zone.AddCard(thing6, hitPoint);
thing6.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha5))
if (Input.GetKeyDown(KeyCode.Alpha6))
{
Thing thing7 = ThingGen.Create("well");
Thing thing7 = ThingGen.Create("altar");
EClass._zone.AddCard(thing7, hitPoint);
thing7.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha6))
{
Thing thing8 = ThingGen.Create("altar");
EClass._zone.AddCard(thing8, hitPoint);
thing8.SetPlaceState(PlaceState.installed);
}
if (Input.GetKeyDown(KeyCode.Alpha7))
{
Thing t = ThingGen.Create("torch");DramaCustomSequence
}
Step("_factionOther");
Talk("what", StepDefault);
if (!c.IsMarried)
{
foreach (Thing item5 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement")))
{
Thing _t3 = item5;
Choice("daMarry".lang(item5.Name), "_marry").SetOnClick(delegate
{
destThing = _t3;
});
}
}
if (c.IsMarried && EClass.debug.enable)
{
Choice("daWed", "_wed");
}
if (c.trait is TraitLoytel)
{
QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>(); {
Choice("disableMove", "_disableMove");
}
if (!c.IsMarried)
{
foreach (Thing item5 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement")))
{
Thing _t3 = item5;
Choice("daMarry".lang(item5.Name), "_marry").SetOnClick(delegate
{
destThing = _t3;
});
}
}
Choice((c.GetInt(123) == 0) ? "daSleepBeside" : "daSleepBeside2", "_sleepBeside");
if (c.HasElement(1225))
{ _Talk("tg", GetTopic(c, "questAccept"));
Method(delegate
{
Zone z2 = c.quest.CreateInstanceZone(c);
EClass.pc.MoveZone(z2, ZoneTransition.EnterState.Center);
Zone z3 = c.quest.CreateInstanceZone(c);
EClass.pc.MoveZone(z3, ZoneTransition.EnterState.Center);
}, null, StepEnd);
Step("_questFull");
_Talk("tg", GetTopic(c, "questFull"), text); });
});
End();
Step("_wed");
Method(delegate
{
TempTalkTopic(c.IsMarried ? "tail4" : (bird + "1"), null);
Choice("yes2", delegate
{
TempTalkTopic(bird + "2", "_wed2");
});
Choice("no2", StepDefault, cancel: true).SetOnClick(RumorChill);
});
Step("_wed2");
Method(delegate
{
Quest quest = Quest.Create("wedding", null, c, assignQuest: false);
EClass.game.quests.Start(quest);
Zone z2 = quest.CreateInstanceZone(c);
EClass.pc.MoveZone(z2, ZoneTransition.EnterState.Center);
LayerDrama.Activate("_adv", "general", "wedding", c);
});
End();
Step("_disableLoyal");
Method(delegate
{DramaManager
public void ParseLine(Dictionary<string, string> item)
});
});
break;
case "moveZone":
AddEvent(delegate
{
EMono.player.MoveZone(EMono.pc.currentZone);
});
break;
case "save":
AddEvent(delegate
{FoodEffect
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class FoodEffect : EClasspublic static void Proc(Chara c, Thing food, bool consume = true)
case DNA.Type.Inferior:
if (genes != null)
{
RemoveOldestDNA();
RemoveDNA(fromOldest: false);
}
return;
case DNA.Type.Brain:
if (genes != null)
{
genes.items.Shuffle();
Msg.Say("reconstruct", c2);
c2.Say("food_mind", c2);
c2.AddCondition<ConHallucination>();
}
return;
}
if (excess > 0)
{
while (excess > 0 && genes != null && genes.items.Count != 0)
{
RemoveOldestDNA();
RemoveDNA(fromOldest: true);
}
}
c_DNA.Apply(c2);public static void Proc(Chara c, Thing food, bool consume = true)
c2.PlaySound("ding_potential");
SE.Play("mutation");
c2.PlayEffect("identify");
void RemoveOldestDNA()
void RemoveDNA(bool fromOldest)
{
DNA dNA = genes.items[0];
DNA dNA = (fromOldest ? genes.items[0] : genes.items.Last());
CharaGenes.Remove(c2, dNA);
excess -= dNA.slot;
}ID_Achievement
FIAMA_CHEST,
NERUN,
PUTIT,
ASHLAND_PIE
ASHLAND_PIE,
JURE_WATER,
WINDOW_CHARM
}InvOwner
public bool Process(bool startTransaction = false)
destInv.owner.Chara.Talk("tooHeavy");
return false;
}
if (thing2.c_isImportant && destInv != inv && !destInv.owner.IsPC && destInv.DenyImportant)
if (thing2.c_isImportant && destInv != inv && !destInv.owner.IsPC && destInv.DenyImportant && thing2.c_uidAttune != destInv.owner.uid)
{
Msg.Say("markedImportant");
return false;Quest
public virtual string RefDrama3
public virtual string NameDeliver => "";
public static Quest Create(string _id, string _idPerson = null, Chara c = null)
public static Quest Create(string _id, string _idPerson = null, Chara c = null, bool assignQuest = true)
{
Quest quest = ClassCache.Create<Quest>(EClass.sources.quests.map[_id].type.IsEmpty("Quest"), "Elin");
quest.id = _id;public static Quest Create(string _id, string _idPerson = null, Chara c = null)
}
if (c != null)
{
quest.SetClient(c);
quest.SetClient(c, assignQuest);
}
quest.Init();
return quest;+QuestWedding
File Created
using Newtonsoft.Json;
public class QuestWedding : QuestInstance
{
[JsonProperty]
public int score;
[JsonProperty]
public int destScore = 10;
[JsonProperty]
public int sumMoney;
public override DifficultyType difficultyType => DifficultyType.Music;
public override string IdZone => "instance_wedding";
public override string RewardSuffix => "Music";
public override string RefDrama2 => destScore.ToString() ?? "";
public override int KarmaOnFail => 0;
public override ZoneEventQuest CreateEvent()
{
return new ZoneEventWedding();
}
public override ZoneInstanceRandomQuest CreateInstance()
{
return new ZoneInstanceWedding();
}
public override string GetTextProgress()
{
return "progressMusic".lang(score.ToString() ?? "", destScore.ToString() ?? "");
}
public override int GetRewardPlat(int money)
{
return difficulty + EClass.rnd(2);
}
public override void OnInit()
{
destScore = difficulty * 150;
destScore += EClass.rnd(destScore / 5);
}
}Steam
using System;
using System.IO;
using System.Linq;
using HeathenEngineering.SteamworksIntegration;public static bool HasDLC(ID_DLC id)
public static void GetAchievement(ID_Achievement id)
{
foreach (AchievementObject achievement in Instance.steamworks.settings.achievements)
try
{
if (achievement.Id == id.ToString())
foreach (AchievementObject achievement in Instance.steamworks.settings.achievements)
{
if (!achievement.IsAchieved)
if (achievement.Id == id.ToString())
{
achievement.Unlock();
EClass.ui.Say("sys_acv".lang(achievement.Name), Resources.Load<Sprite>("Media/Graphics/Icon/Achievement/acv_" + id));
SE.Play("achievement");
achievement.Store();
if (achievement.IsAchieved)
{
return;
}
try
{
achievement.Unlock();
EClass.ui.Say("sys_acv".lang(achievement.Name), Resources.Load<Sprite>("Media/Graphics/Icon/Achievement/acv_" + id));
SE.Play("achievement");
achievement.Store();
return;
}
catch (Exception ex)
{
Debug.LogError("Error Achievement 1:" + ex);
return;
}
}
return;
}
}
catch (Exception ex2)
{
Debug.LogError("Error Achievement 2:" + ex2);
}
Debug.Log("Achievement not found:" + id);
}TraitDrink
public override void OnDrink(Chara c)
c.RemoveCondition<ConAwakening>();
return;
}
if (owner.id == "water_jure")
{
Steam.GetAchievement(ID_Achievement.JURE_WATER);
}
ActEffect.Proc(IdEffect, Power, owner.blessedState, c, null, new ActRef
{
n1 = N1,UI
public UIContextMenu CreateContextMenuInteraction()
public void Say(string text, Sprite sprite = null)
{
popSystem.PopText(text.lang(), sprite, "PopAchievement");
popSystem.PopText(text.lang(), sprite, sprite ? "PopUIAchievement" : "PopUI");
Debug.Log(text);
}UIHangIcon
public class UIHangIcon : EMono
{
public static int clicked;
public Image image;
public UIButton button;
public void OnClickCorner()
{
clicked++;
Debug.Log(clicked);
if (clicked >= 50)
{
Steam.GetAchievement(ID_Achievement.WINDOW_CHARM);
}
SE.Play("Ambience/Random/windchime1");
}+ZoneEventWedding
File Created
public class ZoneEventWedding : ZoneEventQuest
{
public QuestWedding questMusic => base.quest as QuestWedding;
public override void OnVisit()
{
}
}+ZoneInstanceWedding
File Created
public class ZoneInstanceWedding : ZoneInstanceRandomQuest
{
}+Zone_Wedding
File Created
public class Zone_Wedding : Zone_Civilized
{
public override bool UseFog => false;
public override bool RevealRoom => true;
}