Skip to content

EA 23.221 Nightly

October 17, 2025

15 files modified.

Important Changes

Possible breaking changes. Click the filename to view the chunk.

StanceSongSleep (2)

cs
public override void OnStart() 
public override void TickSong() 
cs
public override void Tick() 

StanceSongValor (2)

cs
public override void OnStart() 
public override void TickSong() 
cs
public override void Tick() 

Zone (2)

cs
public void SetBGM(List<int> ids, bool refresh = true) 
public void SetBGM(List<int> ids, bool refresh = true, float fadeDuration = 0f) 
cs
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

cs
	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()

cs
			}
		}
	}
	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

cs
			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

cs
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

cs
		{
			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)

cs
	{
		base.isHidden = false;
	}
	visibleWithTelepathy = !IsUndead && !IsMachine && !IsHorror; 
	visibleWithTelepathy = !IsUndead && !IsMachine && !IsHorror && !IsMultisize; 
	SetDirtySpeed();
	if (host != null && !calledRecursive && host.source != null)
	{

public void TryDropBossLoot()

cs
		{
			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);

public void TryDropBossLoot()

cs
		{
			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);

public void TryDropBossLoot()

cs
		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

public void OnLoad()

cs
		}
	});
	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

cs
{
	public override void OnComplete()
	{
		EClass.player.DropReward(ThingGen.CreateCassette(110), silent: true); 
		DropReward(TraitSeed.MakeSeed("redpepper").SetNum(3));
	}
}

QuestDebt

public override void OnStart()

cs
		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 cText

cs
			}
		}

		public string cNote 
		{ 
			get 
			{ 
				return strs[9]; 
			} 
			set 
			{ 
				strs[9] = value; 
			} 
		} 
		public bool isDead
		{
			get

public void Add(Card c)

cs
		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

cs
		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

``

cs

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

cs
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>())

public override void Tick()

cs
			{
				item.AddCondition<ConHero>(base.power);
			}
			num++; 
		} 
		if (num > 0) 
		{ 
			owner.mana.Mod(-(1 + owner.mana.max / 200)); 
		}
	}
}

Stats

public virtual void Mod(int a)

cs
		}
	}

	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()

cs
{
	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)

cs
		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)

cs
		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()