EA 23.272 Nightly
February 20, 2026
17 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
TraitFakeTile (1)
cs
public override SourcePref GetPref() AI_Idle
public override IEnumerable<Status> Run()
cs
}
if (EClass.rnd(3) == 0 && owner.mana.value > 0)
{
Act act = null;
Act actHeal = null;
Act actRevive = null;
foreach (ActList.Item item in owner.ability.list.items)
{
Act act2 = item.act;
if (act2.id == 8430)
Act act = item.act;
if (act.id == 8430)
{
actRevive = act2;
actRevive = act;
}
string[] abilityType = act2.source.abilityType;
string[] abilityType = act.source.abilityType;
if (!abilityType.IsEmpty() && (abilityType[0] == "heal" || abilityType[0] == "hot"))
{
act = item.act;
actHeal = item.act;
}
}
if (act != null)
if (actHeal != null)
{
List<Chara> list = (owner.IsPCParty ? EClass.pc.party.members : new List<Chara> { owner });
foreach (Chara item2 in list)
{
if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(act.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(actHeal.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
{
owner.UseAbility(act, item2);
owner.UseAbility(actHeal, item2);
yield return KeepRunning();
break;
}
}
if (owner.id == "priest" && !owner.IsPCParty && owner.Dist(EClass.pc) <= 4)
{
if (EClass.pc.hp < EClass.pc.MaxHP)
{
if (owner.UseAbility(actHeal, EClass.pc, null, pt: true))
{
owner.AddCooldown(actHeal.id, 5);
owner.Talk("no_problem");
}
}
else if (!EClass.pc.HasCondition<ConHolyVeil>() && owner.UseAbility(8500, EClass.pc, null, pt: true))
{
owner.AddCooldown(8500, 30);
owner.Talk("no_problem");
}
}
}
if (actRevive != null && owner.IsPCFaction && 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().Count > 0 && owner.UseAbility(actRevive.source.alias, owner))
{AI_PlayMusic
public override IEnumerable<Status> Run()
cs
case "guitar_ash":
idSong = "guitar_caccini";
break;
case "ocarina":
idSong = "ocarina_lulu";
break;
case "guitar_efrond":
idSong = "guitar_dusk";
break;ActDreamBug
public class ActDreamBug : Ability
cs
public class ActDreamBug : Ability
{
public override bool CanPerform()
{
if (Act.CC.HasElement(1216))
{
return base.CanPerform();
}
return false;
}
public override bool Perform()
{
if (!Act.TC.isChara || (!Act.TC.IsPC && Act.TC.things.IsFull()))ActSlime
public class ActSlime : ActNTR
cs
public override bool CanPerform()
{
if (Act.TC == null || Act.TC == Act.CC)
if (Act.TC == null || !Act.TC.isChara || Act.TC == Act.CC)
{
return false;
}CINT
cs
public const int isDisableLoyal = 126;
public const int isFiamaChest = 127;
public const int dateDeathLock = 130;
public const int fixedValue = 131;Chara
public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)
cs
EInput.Consume();
return false;
}
if (num4 > 0 && a.vPotential >= i * 2)
if (num4 > 0 && (a.vPotential >= i * 2 || ability.Has(a.id)))
{
a.vPotential -= i * 2;
num6 = num6 * (100 - num4 * 20) / 100;DNA
public bool CanRemove(Chara c)
cs
return false;
case 1228:
case 1414:
return !c.IsPC;
if (c != null)
{
return !c.IsPC;
}
return true;
}
}
return true;ID_Achievement
cs
{
TEST,
LOMIAS,
LOMIAS2
LOMIAS2,
FIAMA_CHEST
}LayerAbility
public void SelectGroup(string id)
cs
foreach (Element value in ELayer.pc.elements.dict.Values)
{
string categorySub = value.source.categorySub;
if (value.Value != 0 && (!config.hideDepletedSpell || !value.PotentialAsStock || value.vPotential > 0))
if (value.Value != 0 && (!config.hideDepletedSpell || !value.PotentialAsStock || value.vPotential > 0) && (value.id != 6020 || ELayer.pc.HasElement(1216)))
{
if (id == "favAbility" && ELayer.player.favAbility.Contains(value.id))
{OBJ
cs
public class OBJ : EClass
{
public const int nulu = 0;
public const int rainbow_fruit = 90;
public const int feywood = 118;QuestFiamaLock
public override void OnStart()
cs
thing.things.DestroyAll();
thing.AddCard(ThingGen.Create("1172"));
thing.AddCard(ThingGen.Create("amulet_begger"));
thing.SetBool(127, enable: true);
Card card = thing.AddCard(ThingGen.Create("_meat").MakeFoodFrom("begger"));
card.decay = card.MaxDecay + 1;
thing.Install();Steam
public static void GetAchievement(ID_Achievement id)
cs
{
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;
}Trait
public virtual LockOpenState TryOpenLock(Chara cc, bool msgFail = true)
cs
EClass.player.ModKarma(-8);
}
owner.isLostProperty = false;
if (owner.GetBool(127))
{
Steam.GetAchievement(ID_Achievement.FIAMA_CHEST);
}
return LockOpenState.Success;
}
cc.PlaySound("lock");TraitFakeBlock
public class TraitFakeBlock : TraitFakeTile
cs
public class TraitFakeBlock : TraitFakeTile
{
public SourceBlock.Row block => EClass.sources.blocks.map.TryGetValue(owner.refVal, 1);
public override SourcePref GetPref()
{
TileType tileType = block.tileType;
if (!(tileType is TileTypePillar))
{
if (!(tileType is TileTypeFence))
{
if (!(tileType is TileTypeStairs))
{
if (!(tileType is TileTypeWall))
{
if (tileType is TileTypeSlope)
{
return EClass.core.refs.prefs.blockStairs;
}
return null;
}
return EClass.core.refs.prefs.blockWall;
}
return EClass.core.refs.prefs.blockStairs;
}
return EClass.core.refs.prefs.blockFence;
}
return EClass.core.refs.prefs.blockPillar;
}
public override string GetName()
{
if (owner.refVal != 0)
{
return "_fakeblock".lang(block.GetName().ToLower());
}
return base.GetName();
}
}TraitFakeObj
cs
}
}
public SourceObj.Row obj => EClass.sources.objs.map[owner.refVal];
public SourceObj.Row obj => EClass.sources.objs.map.TryGetValue(owner.refVal, 0);
public override TileMode tileMode => TileMode.FakeObj;cs
}
return obj._tiles.Length;
}
public override string GetName()
{
if (owner.refVal != 0)
{
return "_fakeblock".lang(obj.GetName().ToLower());
}
return base.GetName();
}
}TraitFakeTile
public override RenderData GetRenderData()
cs
return EClass.sources.blocks.map[owner.refVal].renderData;
}
public override SourcePref GetPref()
{
TileType tileType = EClass.sources.blocks.map[owner.refVal].tileType;
if (!(tileType is TileTypePillar))
{
if (!(tileType is TileTypeFence))
{
if (!(tileType is TileTypeStairs))
{
if (!(tileType is TileTypeWall))
{
if (tileType is TileTypeSlope)
{
return EClass.core.refs.prefs.blockStairs;
}
return null;
}
return EClass.core.refs.prefs.blockWall;
}
return EClass.core.refs.prefs.blockStairs;
}
return EClass.core.refs.prefs.blockFence;
}
return EClass.core.refs.prefs.blockPillar;
}
public override void OnCrafted(Recipe recipe, List<Thing> ings)
{
owner.refVal = 0;Zone
cs
}
map.SetZone(this);
Zone_Field zone_Field = this as Zone_Field;
if (IdBiome == "Sand" || IdBiome == "Water" || IsUnderwater)
bool flag = IdBiome == "Sand" || IdBiome == "Water" || IsUnderwater;
if (flag)
{
int num = 1 + EClass.rnd((IdBiome == "Water") ? 3 : 2);
for (int i = 0; i < num; i++)cs
}
Crawler crawler = Crawler.Create("pasture");
int num2 = (EClass.debug.enable ? 3 : EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(5) + 1) + 1) + 1));
bool flag = this is Zone_Field;
bool flag2 = this is Zone_Field;
Thing seed = null;
if (IsNefia)
{cs
seed.elements.SetBase(2, EClass.curve(seed.encLV, 50, 10, 80));
}
}
crawler.CrawlUntil(EClass._map, () => EClass._map.GetRandomPoint(), num2 + (flag ? 4 : 0), delegate(Crawler.Result r)
crawler.CrawlUntil(EClass._map, () => EClass._map.GetRandomPoint(), num2 + (flag2 ? 4 : 0), delegate(Crawler.Result r)
{
int num6 = 137;
foreach (Point point in r.points)cs
}
return false;
});
crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(5) + 1) + 1 + (flag ? 20 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(5) + 1) + 1 + (flag2 ? 20 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
{
int num5 = 136;
foreach (Point point2 in r.points)cs
}
return false;
});
crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(10) + 1) + 3 + (flag ? 40 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(10) + 1) + 3 + (flag2 ? 40 : 0), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
{
int idFloor = 121;
foreach (Point point3 in r.points)cs
SpawnAltar();
}
TrySpawnFollower();
if (!flag && EClass.rnd(EClass.debug.enable ? 1 : 10) == 0)
{
Point randomSurface5 = EClass._map.bounds.GetRandomSurface();
if (randomSurface5.IsValid)
{
EClass._zone.AddCard(CharaGen.Create("priest"), randomSurface5);
}
}
}
map.plDay = CreatePlaylist(ref map._plDay, EClass.Sound.GetPlaylist(IDPlayList) ?? EClass.Sound.GetPlaylist("Day"));
}