Skip to content

EA 23.210 Nightly Patch 1

October 3, 2025

5 files modified.

Important Changes

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

AttackProcess (1)

cs
public void PlayRangedAnime(int numFire) 
public void PlayRangedAnime(int numFire, float delay = 0f) 

ActRanged

void Shoot(Card _tc, Point _tp)

cs
			{
				Act.TC = _tc;
				Prepare();
				if (AttackProcess.Current.Perform(j, hasHit, dmgMulti)) 
				int num5 = 0; 
				if (weapon.trait is TraitToolRangeGunEnergy && Act.TC.isChara && Act.TC.HasElement(383)) 
				{ 
					if (weapon.id == "gun_laser") 
					{ 
						num5 = 50; 
					} 
					num5 += Mathf.Max(25 * Act.TC.PER / Mathf.Max(1, Act.CC.PER), 50); 
					if (Act.CC.IsPowerful) 
					{ 
						num5 /= 2; 
					} 
				} 
				if (num5 > EClass.rnd(100)) 
				{ 
					Card tC = Act.TC; 
					Chara cC = Act.CC; 
					Point point = Act.TP.Copy(); 
					List<Chara> list = Act.TC.pos.ListCharasInRadius(Act.TC.Chara, Act.TC.GetSightRadius(), (Chara c) => c.IsHostile(Act.TC.Chara)); 
					Chara chara = ((list.Count > 0) ? list.RandomItem() : Act.CC?.Chara); 
					Act.TC.Say((Act.TC.isChara && Act.TC.Chara.IsHostile()) ? "attack_reflect_enemy" : "attack_reflect"); 
					Act.TC.PlaySound("attack_gun_laser_parry"); 
					AttackProcess.Current.PlayRangedAnime(numFire, 0.1f); 
					AttackProcess.Current.CC = Act.TC?.Chara; 
					AttackProcess.Current.TC = chara; 
					AttackProcess.Current.TP.Set(chara.pos); 
					AttackProcess.Current.posRangedAnime = chara.pos; 
					AttackProcess.Current.Perform(j, hasHit, chara.IsPCFactionOrMinion ? 0.5f : 2.5f); 
					Act.TC = tC; 
					Act.CC = cC; 
					Act.TP.Set(point); 
				} 
				else if (AttackProcess.Current.Perform(j, hasHit, dmgMulti)) 
				{
					hasHit = true;
				}

AttackProcess

public void Prepare(Chara _CC, Thing _weapon, Card _TC = null, Point _TP = null,

cs
		}
	}

	public void PlayRangedAnime(int numFire) 
	public void PlayRangedAnime(int numFire, float delay = 0f) 
	{
		if (weapon == null)
		{

public void PlayRangedAnime(int numFire)

cs
	}
	for (int i = 0; i < numFire; i++)
	{
		TweenUtil.Delay((float)i * data.delay, delegate
		TweenUtil.Delay((float)i * data.delay + delay, delegate 
		{
			if (EClass.core.IsGameStarted && _CC.IsAliveInCurrentZone && _zone == _CC.currentZone)
			{

ENC

public class ENC

cs

	public const int mod_drill = 606;

	public const int revealFaith = 481; 
	public const int strongStomach = 480; 

	public const int mod_ammo_recover = 604;

	public const int invisibility = 415; 
	public const int seeInvisible = 416;

	public const int loving = 417;

public class ENC

cs

	public const int negateBlind = 421;

	public const int negateParalysis = 422; 
	public const int encHit = 414; 

	public const int invisibility = 415; 
	public const int negateParalysis = 422; 

	public const int negateFear = 423; 
	public const int negateSleep = 424; 

	public const int negateConfusion = 425;

public class ENC

cs

	public const int breathing = 429;

	public const int negateShockwave = 430; 
	public const int negateSleep = 424; 
	public const int encHit = 414; 
	public const int negateFear = 423; 

	public const int slowCorruption = 412;

	public const int encSpell = 411;

	public const int throwReturn = 410; 
	public const int mod_precision = 605;

	public const int counter = 380;

public class ENC

cs

	public const int rusher = 382;

	public const int redirect_blaser = 383; 
	public const int negateTeleport = 400;

	public const int levitation = 401;

public class ENC

cs

	public const int corruption = 409;

	public const int throwReturn = 410; 
	public const int negateShockwave = 430; 

	public const int defense_range = 435;

	public const int guts = 436; 
	public const int negatePoison = 420;

	public const int knightly = 438; 
	public const int parry = 437; 
	public const int bane_fish = 467; 

	public const int bane_all = 468;

	public const int strongStomach = 480; 
	public const int revealFaith = 481; 

	public const int force_weapon = 482;

public class ENC

cs

	public const int nonLethal = 485;

	public const int bane_fish = 467; 
	public const int safetyMeasure = 486;

	public const int parry = 437; 
	public const int creativeChef = 487; 
	public const int guts = 436; 

	public const int music_drunk = 489;

public class ENC

cs

	public const int mod_ammo_knockback = 603;

	public const int creativeChef = 487; 
	public const int bane_god = 466;

	public const int bane_machine = 465; 
	public const int deathagony = 488;

	public const int bane_animal = 463; 
	public const int knightly = 438; 
	public const int bane_man = 464;

	public const int negateParry = 439;

	public const int bane_machine = 465; 
	public const int sustain_STR = 440;

	public const int sustain_END = 441; 
	public const int sustain_DEX = 442; 

	public const int sustain_PER = 443;

public class ENC

cs

	public const int sustain_WIL = 445;

	public const int sustain_MAG = 446; 
	public const int sustain_END = 441; 

	public const int sustain_DEX = 442; 
	public const int sustain_CHA = 447; 

	public const int sustain_figure = 450;

	public const int bane_dragon = 460;

	public const int bane_undead = 461; 
	public const int bane_animal = 463; 
	public const int bane_fairy = 462;

	public const int sustain_CHA = 447; 
	public const int bane_undead = 461; 
	public const int sustain_MAG = 446; 

	public static readonly int[] IDS = new int[101] 
	public static readonly int[] IDS = new int[102] 
	{
		651, 650, 641, 640, 624, 609, 622, 621, 608, 620,
		652, 623, 653, 851, 655, 656, 660, 661, 662, 663,
		664, 665, 666, 850, 607, 865, 852, 654, 606, 481, 
		604, 416, 417, 418, 419, 421, 422, 415, 423, 425, 
		426, 427, 428, 429, 430, 424, 414, 412, 411, 605, 
		380, 381, 382, 400, 401, 402, 403, 404, 405, 406, 
		407, 408, 409, 410, 435, 436, 420, 438, 468, 480, 
		482, 483, 484, 485, 467, 486, 437, 489, 600, 601, 
		602, 603, 487, 466, 488, 464, 439, 465, 440, 441, 
		443, 444, 445, 446, 442, 450, 460, 461, 463, 462, 
		447
		664, 665, 666, 850, 607, 865, 852, 654, 606, 480, 
		604, 415, 416, 417, 418, 419, 421, 414, 422, 424, 
		425, 426, 427, 428, 429, 423, 412, 411, 410, 605, 
		380, 381, 382, 383, 400, 401, 402, 403, 404, 405, 
		406, 407, 408, 409, 430, 435, 420, 437, 467, 468, 
		481, 482, 483, 484, 485, 486, 487, 436, 489, 600, 
		601, 602, 603, 466, 465, 488, 463, 438, 464, 439, 
		440, 442, 443, 444, 445, 441, 447, 450, 460, 462, 
		461, 446
	};
}

GoalCombat

public virtual bool TryUseAbility(int dist, bool beforeMove = false)

cs
			break;
		case "taunt":
		{
			bool flag6 = owner.HasCondition<StanceTaunt>(); 
			bool flag7 = tactics.source.taunt != -1 && 100 * owner.hp / owner.MaxHP >= tactics.source.taunt; 
			num = ((flag6 && !flag7) ? 100 : ((!flag6 && flag7) ? 100 : 0)); 
			bool flag9 = owner.HasCondition<StanceTaunt>(); 
			bool flag10 = tactics.source.taunt != -1 && 100 * owner.hp / owner.MaxHP >= tactics.source.taunt; 
			num = ((flag9 && !flag10) ? 100 : ((!flag9 && flag10) ? 100 : 0)); 
			break;
		}
		case "song":
		{
			bool flag10 = owner.HasCondition<BaseSong>(); 
			bool flag11 = owner.mana.value > owner.mana.max / 3; 
			num = ((flag10 && !flag11) ? 100 : ((!flag10 && flag11) ? 100 : 0)); 
			bool flag7 = owner.HasCondition<BaseSong>(); 
			bool flag8 = owner.mana.value > owner.mana.max / 3; 
			num = ((flag7 && !flag8) ? 100 : ((!flag7 && flag8) ? 100 : 0)); 
			break;
		}
		case "melee":
			if (dist > owner.body.GetMeleeDistance()) 
			if (tactics.source.melee == 0 || dist > owner.body.GetMeleeDistance()) 
			{
				continue;
			}

public virtual bool TryUseAbility(int dist, bool beforeMove = false)

cs
			{
				continue;
			}
			bool flag8 = text == "dot"; 
			if (flag8 && (owner.isRestrained || (tc != null && tc.IsRestrainedResident))) 
			bool flag6 = text == "dot"; 
			if (flag6 && (owner.isRestrained || (tc != null && tc.IsRestrainedResident))) 
			{
				continue;
			}
			num = ((text == "attackMelee") ? tactics.P_Melee : tactics.P_Spell) + GetAttackMod(act);
			if (num > 0 && flag8) 
			if (num > 0 && flag6) 
			{
				num += 10;
			}

public virtual bool TryUseAbility(int dist, bool beforeMove = false)

cs
			{
				continue;
			}
			bool flag9 = ability.act is ActBolt; 
			bool flag11 = ability.act is ActBolt; 
			if (!flag || (owner.IsPCParty && (EClass._zone.IsTown || EClass._zone.IsPCFaction)) || (act.id == 9150 && EClass._zone.IsPCFaction && owner.IsNeutralOrAbove()))
			{
				continue;
			}
			GetNumEnemy(flag9 ? 6 : 5); 
			if (numEnemy == 0 || (owner.IsPCFactionOrMinion && GetNumNeutral(flag9 ? 6 : 5) > 0)) 
			GetNumEnemy(flag11 ? 6 : 5); 
			if (numEnemy == 0 || (owner.IsPCFactionOrMinion && GetNumNeutral(flag11 ? 6 : 5) > 0)) 
			{
				continue;
			}

Zone_Void

public override void OnGenerateMap()

cs

	public override void OnActivate()
	{
		if (base.lv == -10000 && EClass._map.FindThing<TraitStairsDown>() == null) 
		if (base.lv > MinLv && EClass._map.FindThing<TraitStairsDown>() == null && EClass._map.FindThing<TraitStairsLocked>() == null) 
		{
			Thing t = ThingGen.Create(base.biome.style.GetIdStairs(upstairs: false), base.biome.style.matStairs);
			AddCard(t, EClass._map.GetCenterPos().GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false)).Install();