EA 23.221 Nightly
October 17, 2025
15 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
StanceSongSleep (2)
public override void OnStart()
public override void TickSong()
public override void Tick()
StanceSongValor (2)
public override void OnStart()
public override void TickSong()
public override void Tick()
Zone (2)
public void SetBGM(List<int> ids, bool refresh = true)
public void SetBGM(List<int> ids, bool refresh = true, float fadeDuration = 0f)
public void SetBGM(int id = -1, bool refresh = true)
public void SetBGM(int id = -1, bool refresh = true, float fadeDuration = 0f)
ActEffect
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.Rocket:
case EffectId.Flare:
{
float radius = ((id == EffectId.Rocket) ? 3f : ((id == EffectId.Suicide) ? 3.5f : ((id == EffectId.Flare) ? 2.1f : ((float)((id == EffectId.BallBubble) ? 2 : 5)))));
float radius = ((id == EffectId.Rocket) ? 2.8f : ((id == EffectId.Suicide) ? 3.5f : ((id == EffectId.Flare) ? 2.1f : ((float)((id == EffectId.BallBubble) ? 2 : 5)))));
if ((id == EffectId.Explosive || id == EffectId.Rocket) && actRef.refThing != null)
{
radius = 2 + actRef.refThing.Evalue(666);
ActMissileBarrage
public override bool Perform()
}
}
}
Act.CC.Say("abMissileBarrage", Act.CC);
if (list.Count > 0)
{
Act.CC.Say("abMissileBarrage", Act.CC);
Act.CC.PlaySound("missile");
Chara cC = Act.CC;
foreach (Point item in list)
{
Act.CC = cC;
Act.TP.Set(item);
ActEffect.ProcAt(EffectId.Rocket, GetPower(Act.CC) / 2, BlessedState.Normal, Act.CC, null, Act.TP, isNeg: true, new ActRef
ActEffect.ProcAt(EffectId.Rocket, GetPower(Act.CC), BlessedState.Normal, Act.CC, null, Act.TP, isNeg: true, new ActRef
{
origin = Act.CC.Chara,
aliasEle = "eleImpact"
});
ActEffect.RapidDelay = 0.05f;
ActEffect.RapidDelay = 0.075f;
ActEffect.RapidCount++;
}
}
ActThrow
public static EffectIRenderer Throw(Card c, Point p, Card target, Thing t, Throw
c.ModExp(108, 100);
if (traitMonsterBall.IsDuponneBall && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 3)
{
EClass.Sound.StopBGM(3f);
EClass._zone.SetBGM(1, refresh: false);
EClass._zone.SetBGM(120, refresh: true, 3f);
EClass.game.quests.Get<QuestNegotiationDarkness>().NextPhase();
}
}
BaseSong
public class BaseSong : BaseStance
public class BaseSong : BaseStance
{
public override void OnStart()
{
owner.ShowEmo(Emo.happy);
owner.mana.Validate();
}
public override void Tick()
{
if (!EClass._zone.IsRegion)
{
if (owner.HasCondition<ConSilence>())
{
Kill();
}
else
{
TickSong();
}
}
}
public virtual void TickSong()
{
}
}
Card
public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel
{
p *= 0.20000000298023224;
}
if (isReplica)
{
p *= 0.20000000298023224;
}
if (currency == CurrencyType.Money && (category.IsChildOf("meal") || category.IsChildOf("preserved")))
{
p *= 0.5;
Chara
public void Refresh(bool calledRecursive = false)
{
base.isHidden = false;
}
visibleWithTelepathy = !IsUndead && !IsMachine && !IsHorror;
visibleWithTelepathy = !IsUndead && !IsMachine && !IsHorror && !IsMultisize;
SetDirtySpeed();
if (host != null && !calledRecursive && host.source != null)
{
{
EClass.player.stats.nefiaBeaten++;
EClass._zone.GetTopZone().isConquered = true;
EClass.Sound.StopBGM(2f);
SE.Play("Jingle/fanfare2");
EClass._zone.SetBGM(114);
EClass._zone.SetBGM(114, refresh: true, 3f);
}
EClass.player.ModFame(EClass.rndHalf(30 + EClass._zone.DangerLv * 2));
EClass.player.ModKarma(5);
{
num = 5;
flag = (flag2 = true);
EClass.Sound.StopBGM(3f);
EClass._zone.SetBGM(1, refresh: false);
EClass._zone.SetBGM(120, refresh: true, 3f);
if (EClass.game.quests.IsStarted<QuestNegotiationDarkness>() && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() <= 3)
{
EClass.game.quests.Get<QuestNegotiationDarkness>().ChangePhase(4);
flag = (flag2 = true);
if (EClass._zone is Zone_DungeonMino)
{
EClass.Sound.StopBGM(3f);
EClass._zone.SetBGM(46, refresh: false);
EClass._zone.SetBGM(46, refresh: true, 3f);
}
break;
case "melilith_boss":
Game
}
});
TryAddQuest("into_darkness", "exile_kettle");
if (version.IsBelow(0, 23, 221) && EClass.game.quests.IsCompleted("curry"))
{
world.SendPackage(ThingGen.CreateParcel(null, ThingGen.CreateCassette(110)));
}
if (version.IsBelow(0, 23, 185))
{
player.resetPrincipal = true;
QuestCurry
public class QuestCurry : QuestSequence
{
public override void OnComplete()
{
EClass.player.DropReward(ThingGen.CreateCassette(110), silent: true);
DropReward(TraitSeed.MakeSeed("redpepper").SetNum(3));
}
}
QuestDebt
public override void OnStart()
chara.homeZone = EClass.pc.homeBranch.owner;
chara.noMove = false;
chara.RemoveEditorTag(EditorTag.Invulnerable);
Thing thing = ThingGen.Create("856");
thing.refVal = 109;
EClass.pc.Pick(thing);
Thing t = ThingGen.CreateCassette(109);
EClass.pc.Pick(t);
}
public override bool CanUpdateOnTalk(Chara c)
SerializedCards
}
}
public string cNote
{
get
{
return strs[9];
}
set
{
strs[9] = value;
}
}
public bool isDead
{
get
idDeity = c.c_idDeity,
isEmpty = (c.things.Count == 0 && c.c_lockLv == 0),
encLv = c.encLV,
cText = c.c_refText
cText = c.c_refText,
cNote = c.c_note
};
if (c.c_idBacker != 0)
{
public void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial = nu
card2.idSkin = card4.idSkin;
card2.c_idDeity = card4.idDeity;
card2.c_refText = card4.cText;
card2.c_note = card4.cNote;
if (card4.idBacker != 0)
{
Debug.Log(card4.idBacker);
StanceSongSleep
public class StanceSongSleep : BaseSong
{
public override void OnStart()
public override void TickSong()
{
owner.ShowEmo(Emo.happy);
}
public override void Tick()
{
if (owner.HasCondition<ConSilence>() || EClass._zone.IsRegion)
{
return;
}
int num = 0;
foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => !c.IsDeadOrSleeping && c.IsHostile(owner)))
{
if ((item.IsPowerful ? 10 : 30) * Mathf.Min(base.power / 4, 100) / 100 > EClass.rnd(100))
{
item.AddCondition<ConSleep>(50 + base.power / 2);
}
num++;
}
if (num > 0)
{
owner.mana.Mod(-(1 + owner.mana.max / 200));
}
}
}
StanceSongValor
public class StanceSongValor : BaseSong
public class StanceSongValor : BaseSong
{
public override void OnStart()
public override void TickSong()
{
owner.ShowEmo(Emo.happy);
}
public override void Tick()
{
if (owner.HasCondition<ConSilence>() || EClass._zone.IsRegion)
{
return;
}
int num = 0;
foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => (c.IsDeadOrSleeping || !owner.IsPCFactionOrMinion) ? (!c.IsHostile(owner)) : c.IsPCFactionOrMinion))
{
if (!item.HasCondition<ConEuphoric>())
{
item.AddCondition<ConHero>(base.power);
}
num++;
}
if (num > 0)
{
owner.mana.Mod(-(1 + owner.mana.max / 200));
}
}
}
Stats
public virtual void Mod(int a)
}
}
public virtual void Validate()
{
value = Mathf.Clamp(value, min, max);
}
public virtual void OnChangePhase(int phase, int lastPhase)
{
bool flag = phase > lastPhase;
TraitSeed
public static SourceObj.Row GetRandomSeedObj()
{
if (listSeeds == null)
{
listSeeds = EClass.sources.objs.rows.Where((SourceObj.Row s) => s.HasTag(CTAG.seed) && !s.HasTag(CTAG.rareSeed)).ToList();
listSeeds = EClass.sources.objs.rows.Where((SourceObj.Row s) => s.HasTag(CTAG.seed) && !s.HasTag(CTAG.rareSeed) && s.alias != "redpepper").ToList();
}
return listSeeds.RandomItemWeighted((SourceObj.Row a) => a.chance);
}
Zone
public int GetElectricity(bool cost = false)
return sum;
}
public void SetBGM(List<int> ids, bool refresh = true)
public void SetBGM(List<int> ids, bool refresh = true, float fadeDuration = 0f)
{
map._plDay.Clear();
if (ids.Count > 0)
public void SetBGM(List<int> ids, bool refresh = true)
UnityEngine.Object.DestroyImmediate(map.plDay);
map.plDay = null;
RefreshPlaylist();
if (refresh)
if (!refresh)
{
return;
}
if (fadeDuration > 0f)
{
EClass.Sound.StopBGM(fadeDuration, playLastBGM: false, delegate
{
if (EClass.core.IsGameStarted && EClass.game.activeZone == this)
{
RefreshBGM();
}
});
}
else
{
EClass.Sound.StopBGM();
RefreshBGM();
}
}
public void SetBGM(int id = -1, bool refresh = true)
public void SetBGM(int id = -1, bool refresh = true, float fadeDuration = 0f)
{
SetBGM(new List<int> { id }, refresh);
SetBGM(new List<int> { id }, refresh, fadeDuration);
}
public void RefreshPlaylist()