Skip to content

EA 23.326 Nightly

July 9, 2026

39 files modified. 2 new files created.

Important Changes

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

Card (2)

cs
public virtual void HealHPHost(int a, HealSource origin = HealSource.None) 
public virtual void HealHPHost(long a, HealSource origin = HealSource.None) 
cs
public virtual void HealHP(int a, HealSource origin = HealSource.None) 
public virtual void HealHP(long a, HealSource origin = HealSource.None) 

Zone (1)

cs
public void SetFieldEffect(int idEle, int a) 
public void SetFieldEffect(int idEle, int a, int duration = 0) 

ABILITY

public override int GetPower(Card c)

cs
		}
	}
	a = EClass.curve(a, 400, 100);
	if (this is Spell) 
	if (this is Spell || this is Song) 
	{
		a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100;
	}

public override int GetPower(Card c)

cs
		return (int)a;
	}

	public static int GetSongPower(Chara c, int idSkill, int power) 
	{ 
		long a = MathEx.Max(c.LV * 6 + 30, (long)c.Evalue(idSkill) * 4L + 30); 
		a = EClass.curve(a, 400, 100); 
		a = a * Mathf.Max(100 + c.Evalue(411) - c.Evalue(93), 1) / 100; 
		if (a > 214748364) 
		{ 
			a = 214748364L; 
		} 
		return (int)a; 
	} 
	public override void OnChangeValue()
	{
		Card card = owner.Card;

ActEffect

void AddCon<T>(int rate, int power) where T : Condition

cs
		break;
	}
	case EffectId.HealComplete:
		TC.HealHPHost(100000000, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item); 
		TC.HealHPHost(100000000L, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item); 
		TC.CureHost(CureType.HealComplete, power, state);
		TC.Say("heal_heavy", TC);
		break;
	case EffectId.Heal:
	case EffectId.JureHeal:
	{
		int num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		long num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		if (actRef.refThing != null)
		{
			num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100;

void AddCon<T>(int rate, int power) where T : Condition

cs
			EClass.game.religions.Healing.Talk("ability");
			num9 += TC.MaxHP / 4;
			TC.AddCondition<ConInvulnerable>();
			TC.HealHP(num9, HealSource.Item); 
			TC.Cure(CureType.Heal, power, state); 
		} 
		else
		{ 
			TC.HealHPHost(num9, (actRef.refThing == null) ? HealSource.Magic : HealSource.Item); 
			TC.CureHost(CureType.Heal, power, state); 
		}
		TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.CureHost(CureType.Heal, power, state); 
		TC.Say((power >= 300) ? "heal_heavy" : "heal_light", TC);
		break;
	}
	case EffectId.RemedyJure:
		TC.HealHP(1000000, HealSource.Magic); 
		TC.HealHP(1000000L, HealSource.Magic); 
		TC.CureHost(CureType.Jure, power, state);
		TC.Say("heal_jure", TC);
		break;

ActPray

public static void Pray(Chara c, bool passive)

cs
	static void Heal(Chara _c)
	{
		_c.PlayEffect("revive");
		_c.HealHP(999999); 
		_c.HealHP(999999L); 
		_c.mana.Mod(999999);
		_c.Cure(CureType.Prayer, 999999);
		_c.RemoveCondition<ConDeathSentense>();

Affinity

public Thing OnGift(Thing t)

cs
	{
		CC.Talk("thanks2");
	}
	if (flag3 || flag2) 
	{ 
		CC.SetStr(72, CC.GetFavFood().id); 
		CC.SetStr(73, CC.GetFavCat().id); 
	} 
	CC.ModAffinity(EClass.pc, num);
	return result;
}

CINT

public class CINT

cs

	public const int dateLunchGift = 71;

	public const int favFood = 72; 
	public const int favCat = 73; 
	public const int fiamaPet = 100;

	public const int noRestock = 101;

CTAG

public enum CTAG

cs
	alwaysDropCorpse,
	allowDevour,
	noRide,
	ride 
	ride, 
	allowIngredient 
}

Card

public Window.SaveData GetWindowSaveData()

cs

	public bool IsExcludeFromCraft(Recipe.Ingredient ing)
	{
		if ((IsUnique && ing.id != id && !ing.idOther.Contains(id)) || c_isImportant) 
		if ((IsUnique && !HasTag(CTAG.allowIngredient) && ing.id != id && !ing.idOther.Contains(id)) || c_isImportant) 
		{
			return true;
		}

public int GetCurrency(string id = "money")

cs
		return (int)sum;
	}

	public virtual void HealHPHost(int a, HealSource origin = HealSource.None) 
	public virtual void HealHPHost(long a, HealSource origin = HealSource.None) 
	{
		if (isChara)
		{

public virtual void HealHPHost(int a, HealSource origin = HealSource.None)

cs
		HealHP(a, origin);
	}

	public virtual void HealHP(int a, HealSource origin = HealSource.None) 
	public virtual void HealHP(long a, HealSource origin = HealSource.None) 
	{
		long num = a; 
		if (origin == HealSource.Magic)
		{
			num = (long)a * (long)Mathf.Max(100 - Evalue(93), 1) / 100; 
			a = a * Mathf.Max(100 - Evalue(93), 1) / 100; 
		}
		if (num > 100000000) 
		if (a + hp >= MaxHP) 
		{
			num = 100000000L; 
			hp = MaxHP; 
		}
		hp += (int)num; 
		if (hp > MaxHP) 
		else
		{
			hp = MaxHP; 
			hp += (int)a; 
		}
		switch (origin)
		{

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
				{
					Say("wall_bond", chara3, this);
					chara3.DamageHP(dmg, ele, eleP, attackSource, origin, showEffect, weapon, Chara);
					origin?.Chara?.DoHostileAction(chara3); 
					return;
				}
			}

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
					{
						int num = chara4.Evalue(1241);
						int num2 = chara4.Evalue(438);
						if ((num != 0 || num2 != 0) && !chara4.IsDisabled && !chara4.isRestrained && (!IsPCFactionOrMinion || chara4.IsPCFactionOrMinion) && (IsPCFactionOrMinion || !chara4.IsPCFactionOrMinion) && chara4.Dist(this) <= Mathf.Max(num, (num2 > 0) ? 1 : 0) && (num != 0 || num2 <= 0 || hp * 100 / MaxHP <= chara4.hp * 100 / chara4.MaxHP)) 
						if ((num != 0 || num2 != 0) && !chara4.IsDisabled && !chara4.isRestrained && (!IsPCFactionOrMinion || chara4.IsPCFactionOrMinion) && (IsPCFactionOrMinion || !chara4.IsPCFactionOrMinion) && chara4.Dist(this) <= Mathf.Max(num, (num2 > 0) ? 1 : 0) && (num != 0 || num2 <= 0 || (long)hp * 100L / MaxHP <= (long)chara4.hp * 100L / chara4.MaxHP)) 
						{
							Say((num2 == 0) ? "wall_flesh" : "wall_knightly", chara4, this);
							chara4.DamageHP(dmg * (100L + (long)((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect, weapon, Chara);
							origin?.Chara?.DoHostileAction(chara4); 
							return;
						}
					}

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
							Chara.AddCondition<ConFractured>((int)Mathf.Max(10f, 30f - Mathf.Sqrt(Evalue(436))));
							hp = Mathf.Min(half * (int)Mathf.Sqrt(Evalue(436) * 2) / 100, MaxHP / 3);
						});
						goto IL_10a8; 
						goto IL_1107; 
					}
				}
				if (zoneInstanceBout != null && (bool)LayerDrama.Instance)

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
						if (EClass.player.invlunerable)
						{
							EvadeDeath(null);
							goto IL_10a8; 
							goto IL_1107; 
						}
					}
					if (Evalue(1220) > 0 && Chara.stamina.value >= (IsPC ? (Chara.stamina.max / 2) : (Chara.stamina.max / 3 * 2)))

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
			}
		}
	}
	goto IL_10a8; 
	IL_10a8: 
	goto IL_1107; 
	IL_1107: 
	if (trait.CanBeAttacked)
	{
		renderer.PlayAnime(AnimeID.HitObj);

public void SpawnLoot(Card origin)

cs
		default:
		{
			string text = Chara.race.corpse[0];
			if (id == "titan_iron") 
			{ 
				text = "ingot"; 
			} 
			bool num2 = text == "_meat";
			int num3 = 10;
			if (AI_Slaughter.slaughtering)

public bool HasElementNoCopy()

cs
		{
			return true;
		}
		if (HasElement(766)) 
		{ 
			return true; 
		} 
		return false;
	}

public int GetValue(PriceType priceType = PriceType.Default, bool sell = false)

cs
		{
			num2 *= (float)(tier + 1);
		}
		if (num2 > 2.1474836E+09f) 
		{ 
			return int.MaxValue; 
		} 
		return (int)num2;
	}

Chara

public override void SetRenderParam(RenderParam p)

cs
		if (source._tiles_snow.Length > 1)
		{
			int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
			if (num < 0) 
			{ 
				num = 0; 
			} 
			p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
		}
		else

public override void SetRenderParam(RenderParam p)

cs
	else if (sourceCard._tiles.Length > 1)
	{
		int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
		if (num2 < 0) 
		{ 
			num2 = 0; 
		} 
		p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
	}
	else

public SourceThing.Row GetFavFood()

cs
			return value;
		}
	}
	string str = GetStr(72); 
	if (!str.IsEmpty() && EClass.sources.things.map[str] != null) 
	{ 
		return EClass.sources.things.map[str]; 
	} 
	if (_listFavFood.Count == 0)
	{
		foreach (SourceThing.Row row in EClass.sources.things.rows)

public SourceCategory.Row GetFavCat()

cs
			return value;
		}
	}
	string str = GetStr(73); 
	if (!str.IsEmpty() && EClass.sources.categories.map[str] != null) 
	{ 
		return EClass.sources.categories.map[str]; 
	} 
	SourceCategory.Row r = null;
	if (_listFavCat.Count == 0)
	{

ConIncognito

public class ConIncognito : BaseBuff

cs
{
	public override void OnStart()
	{
		EClass._zone.ResetHostility(); 
		EClass._zone.RefreshCriminal(); 
		if (!EClass._zone.HasField(10002)) 
		{ 
			EClass._zone.ResetHostility(); 
			EClass._zone.RefreshCriminal(); 
			EClass._zone.SetFieldEffect(10002, 1, 20); 
		} 
	}

	public override void OnRemoved()
	{
		EClass._zone.RefreshCriminal(); 
		if (!EClass._zone.HasField(10002)) 
		{ 
			EClass._zone.RefreshCriminal(); 
		} 
	}
}

ConTransmute

public override void OnHit(Card attacker, AttackSource source)

cs

	public void Change()
	{
		if (owner.ai is GoalCombat { abilities: not null } goalCombat) 
		if (owner.ai is GoalCombat { IsRunning: not false, abilities: not null } goalCombat) 
		{
			goalCombat.BuildAbilityList();
		}

CustomElementContent

public static CustomElementContent CreateFromRow(SourceElement.Row r, ModPackage

cs

	public override void OnGameLoad(GameIOContext context)
	{
		SourceElement.Row row = EClass.sources.elements.alias[base.SourceId]; 
		if (addOnLoad && !EClass.pc.HasElement(base.SourceId)) 
		SourceElement.Row row = EClass.sources.elements.alias.TryGetValue(base.SourceId); 
		if (row != null && addOnLoad && !EClass.pc.HasElement(base.SourceId)) 
		{
			switch (row.group)
			{

CustomThingContent

public void OnThingCreated(Thing thing)

cs
		int value3 = value2;
		thing.SetInt(text2, value3);
	}
	thing.ChangeRarity(rarity); 
	if (thing.source.ContainsTag("forceRarity")) 
	{ 
		thing.ChangeRarity(rarity); 
	} 
	if (noCopy)
	{
		EClass.core.actionsNextFrame.Add(delegate

public Thing Create(int createLv = -1)

cs
		{
			thing.SetStr("price_calc_override", priceCalc);
		}
		thing.ChangeRarity(rarity); 
		return thing;
	}

CustomZoneContent

public override void OnGameLoad(GameIOContext context)

cs
	Zone zone = ModUtil.FindZoneByFullName(parent);
	if (zone != null)
	{
		Spatial arg = SpatialGen.Create(base.SourceId, zone, register: true); 
		Debug.Log($"#mod-content spawned custom zone {arg}"); 
		Spatial spatial = SpatialGen.Create(base.SourceId, zone, register: true); 
		EClass.game.world.region.elomap.SetZone(spatial.x, spatial.y, spatial as Zone); 
		Debug.Log($"#mod-content spawned custom zone {spatial}"); 
		return;
	}
	ModUtil.LogModError("source zone row '" + base.SourceId + "' has invalid addMap parent '" + parent + "'", base.Owner);

ELEMENT

public class ELEMENT

cs

	public const int recharge = 761;

	public const int effectRange = 770; 
	public const int forbidden = 766; 

	public const int comfort = 750;

	public const int _void = 0;

	public const int nutrition = 10; 
	public const int weight = 11; 

	public const int lv = 1;

public class ELEMENT

cs

	public const int socket = 5;

	public const int weight = 11; 
	public const int nutrition = 10; 
	public const int effectRange = 770; 

	public const int size = 12;

public class ELEMENT

cs

	public const int water = 15;

	public const int decay = 17; 
	public const int heat = 16; 

	public const int taste = 18;

	public const int poison = 20;

	public const int heat = 16; 
	public const int decay = 17; 

	public const int cut = 22;

public class ELEMENT

cs

	public const int fire = 21;

	public static readonly int[] IDS = new int[37] 
	public static readonly int[] IDS = new int[38] 
	{
		765, 763, 762, 751, 752, 753, 754, 755, 756, 759,
		760, 761, 770, 750, 0, 10, 1, 2, 3, 5, 
		11, 12, 13, 14, 15, 17, 18, 20, 16, 22, 
		23, 24, 25, 26, 29, 85, 21
		760, 761, 766, 750, 0, 11, 1, 2, 3, 5, 
		10, 770, 12, 13, 14, 15, 16, 18, 20, 17, 
		22, 23, 24, 25, 26, 29, 85, 21
	};
}
public class Element : EClass

ENC

public class ENC

cs

	public const int noDamage = 654;

	public const int r_mana = 641; 
	public const int living = 653;

	public const int r_PV = 651;

	public const int r_mana = 641; 
	public const int r_DV = 650; 
	public const int eco = 652;

	public const int absorbHP = 660;

	public const int r_life = 640; 
	public const int r_DV = 650; 

	public const int absorbMP = 661;

	public const int convertCold = 851; 
	public const int convertFire = 850; 

	public const int eheluck = 663;

public class ENC

cs

	public const int encRagnarok = 667;

	public const int convertFire = 850; 
	public const int mod_frustration = 624; 
	public const int r_life = 640; 

	public const int convertImpact = 865;

public class ENC

cs

	public const int convertLightning = 852;

	public const int convertCold = 851; 
	public const int absorbSP = 662;

	public const int mod_feint = 623; 
	public const int mod_frustration = 624; 

	public const int sustain_LER = 444;

	public const int mod_flurry = 621; 
	public const int mod_cleave = 622; 

	public const int negatePoison = 420;

public class ENC

cs

	public const int slowCorruption = 412;

	public const int mod_cleave = 622; 
	public const int encHit = 414; 

	public const int invisibility = 415; 
	public const int mod_feint = 623; 

	public const int sustain_STR = 440;

	public const int sustain_END = 441;

	public const int encHit = 414; 
	public const int invisibility = 415; 

	public const int sustain_PER = 443;

public class ENC

cs

	public const int mod_ammo = 600;

	public const int deathagony = 488; 
	public const int mod_reload = 601;

	public const int mod_ammo_knockback = 603; 
	public const int mod_ammo_recover = 604;

	public const int mod_precision = 605;

public class ENC

cs

	public const int mod_chaser = 620;

	public const int mod_flurry = 621; 
	public const int sustain_DEX = 442;

	public const int mod_ammo_knockback = 603; 
	public const int deathagony = 488; 

	public const int creativeChef = 487;

public class ENC

cs

	public const int bane_dragon = 460;

	public const int bane_machine = 465; 
	public const int bane_god = 466;

	public const int bane_fish = 467;

public class ENC

cs

	public const int optimizeMana = 483;

	public const int bane_machine = 465; 
	public const int slot_rune = 484;

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

ElementContainer

public void Remove(int id)

cs
				parent.ModLink(id, -element.Value);
			}
			dict.Remove(id);
			element.owner = null; 
		}
	}

FACTION

``

cs

public class FACTION
{
	public const int bfRuin = 3702; 
	public const int bfForest = 3601;

	public const int bfSnow = 3602;

public class FACTION

cs

	public const int bfFertile = 3700;

	public const int bfRuin = 3702; 
	public const int bfPlain = 3600;

	public const int bfSea = 3605;

public class FACTION

cs

	public static readonly int[] IDS = new int[53]
	{
		3702, 3601, 3602, 3603, 3604, 3701, 3606, 3700, 3600, 3605, 
		3601, 3602, 3603, 3604, 3701, 3606, 3700, 3702, 3600, 3605, 
		3500, 2119, 2206, 2205, 2204, 2202, 2201, 2200, 2116, 2120,
		2118, 2117, 3703, 2207, 3704, 4002, 3706, 2115, 4006, 4005,
		4004, 4003, 4001, 4000, 3900, 3805, 3804, 3803, 3802, 3801,

+FieldEffectAlert

File Created
cs
public class FieldEffectAlert : FieldEffect
{
}

FoodEffect

public static void ProcNutrition(Chara c, Thing food, float effP, float validFil

cs
		}
		string[] foodEffect = value.source.foodEffect;
		int id = value.id;
		float num = effP * (float)value.Value; 
		float num = effP * (float)Mathf.Min(value.Value, 10000); 
		if (value.source.category == "food" && c.IsPC)
		{
			bool flag2 = num >= 0f;

GameDate

public class GameDate : Date

cs

	public const int minPerRound = 5;

	private List<Element> _fieldEffectsToRemove = new List<Element>(); 
	public void AdvanceSec(int a)
	{
		base.sec += a;

public void AdvanceMin(int a)

cs
			EClass.player.countNewline = 0;
		}
		EClass.screen.pcOrbit.OnChangeMin();
		foreach (ZoneEvent item in EClass._zone.events.list) 
		if (EClass._zone.fieldElements.dict.Count > 0) 
		{ 
			_fieldEffectsToRemove.Clear(); 
			foreach (Element value in EClass._zone.fieldElements.dict.Values) 
			{ 
				if (value.vPotential > 0) 
				{ 
					value.vPotential--; 
					if (value.vPotential == 0) 
					{ 
						_fieldEffectsToRemove.Add(value); 
					} 
				} 
			} 
			foreach (Element item in _fieldEffectsToRemove) 
			{ 
				EClass._zone.RemoveFieldEffect(item.id); 
			} 
		} 
		foreach (ZoneEvent item2 in EClass._zone.events.list) 
		{
			item.minElapsed += a; 
			item2.minElapsed += a; 
		}
	}

GoalCombat

int HealFactor(Chara c)

cs
			return true;
		}
	}
	if (owner != null && owner.IsAliveInCurrentZone && owner.CanDestroyPath() && (!owner.CanSeeLos(tc) || !owner.CanInteractTo(tc.pos)) && tc.Dist(owner) == 1 && tc.pos.HasBridge != owner.pos.HasBridge) 
	{ 
		if (tc.pos.HasBridge) 
		{ 
			EClass._map.SetBridge(tc.pos.x, tc.pos.z, 0, 0, 0, 0, 0); 
		} 
		else
		{ 
			EClass._map.SetBridge(owner.pos.x, owner.pos.z, 0, 0, 0, 0, 0); 
		} 
	} 
	if (EClass.debug.logCombat)
	{
		Debug.Log(owner.Name + "/" + abilities.Count);

GrowSystemWeed

public override void OnMineObj(Chara c = null)

cs
		PopHarvest(c ?? EClass.pc, ThingGen.Create("grass", EClass.sources.materials.alias["grass"].id), EClass.rnd(5));
		base.OnMineObj(c);
	}
	public override void OnSetObj() 
	{ 
		GrowSystem.cell.objDir = EClass.rnd(source.tiles.Length); 
	} 
	public override int GetStageTile() 
	{ 
		return source._tiles[GrowSystem.cell.objDir % source._tiles.Length] + GrowSystem.currentStage.idx - 2; 
	} 
}

Map

public void SetFloor(int x, int z, int idMat, int idFloor, int dir)

cs
	cell._floorMat = (byte)idMat;
	cell._floor = (byte)idFloor;
	cell.floorDir = dir;
	cell.isWatered = false; 
	Critter.RebuildCritter(cell);
	RefreshNeighborTiles(x, z);
}

Player

public Layer SelectDomain(Action onKill = null)

cs
	List<SourceElement.Row> list2 = new List<SourceElement.Row>();
	foreach (SourceElement.Row row2 in EClass.sources.elements.rows)
	{
		if (row2.categorySub == "eleAttack" && !row2.tag.Contains("hidden") && ((EClass.pc.HasElement(1402) && Guild.Mage.relation.rank >= 6 && row2.id != 925 && row2.id != 926) || !row2.tag.Contains("high") || EClass.pc.job.domain.Contains(row2.id))) 
		if (row2.categorySub == "eleAttack" && !row2.tag.Contains("hidden") && ((EClass.pc.HasElement(1402) && Guild.Mage.relation.rank >= 6 && row2.id != 925 && row2.id != 926 && row2.id != 927) || !row2.tag.Contains("high") || EClass.pc.job.domain.Contains(row2.id))) 
		{
			list2.Add(row2);
		}

Props

void TryAdd(Thing t)

cs
	}
	void TryAdd(Thing t)
	{
		if (t.HasElement(10) && !(t.trait is TraitFoodFishSlice) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t)) 
		if (t.HasElement(10) && !(t.trait is TraitFoodFishSlice) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.category.IsChildOf("drink") && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t)) 
		{
			stack.Add(t.Thing);
		}

Recipe

static string CatName(string id)

cs

		public bool IsValidIngredient(Thing t)
		{
			if (ingType == IngType.CreativeFood && t.HasElement(10) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !(t.trait is TraitFoodFishSlice)) 
			if (ingType == IngType.CreativeFood && t.HasElement(10) && !t.category.IsChildOf("seasoning") && !t.category.IsChildOf("meal") && !t.category.IsChildOf("drink") && !(t.trait is TraitFoodFishSlice)) 
			{
				return true;
			}

SPELL

public class SPELL

cs
{
	public const int SpEnchantWeapon = 8250;

	public const int ball_Holy = 50109; 
	public const int flare_Nerve = 51208;

	public const int bit_Nerve = 51108;

public class SPELL

cs

	public const int weapon_Nerve = 50808;

	public const int sword_ = 7008; 
	public const int miasma_Nerve = 50708;

	public const int arrow_Nerve = 50508; 
	public const int ball_Holy = 50109; 
	public const int funnel_Nerve = 50608; 

	public const int hand_Nerve = 50408;

public class SPELL

cs

	public const int flare_Sound = 51207;

	public const int funnel_Nerve = 50608; 
	public const int bit_Sound = 51107; 

	public const int bolt_Holy = 50309; 
	public const int arrow_Nerve = 50508; 

	public const int hand_Holy = 50409; 
	public const int sword_ = 7008; 

	public const int arrow_Holy = 50509; 
	public const int bolt_Holy = 50309; 

	public const int weapon_Chaos = 50810; 
	public const int hand_Holy = 50409; 

	public const int miasma_Chaos = 50710;

public class SPELL

cs

	public const int funnel_Holy = 50609;

	public const int bit_Sound = 51107; 
	public const int puddle_Chaos = 50910; 
	public const int arrow_Holy = 50509; 

	public const int sword_Sound = 51007;

	public const int weapon_Sound = 50807; 
	public const int weapon_Chaos = 50810; 

	public const int flare_Poison = 51205; 
	public const int puddle_Sound = 50907; 
	public const int miasma_Sound = 50707; 

	public const int bit_Poison = 51105;

public class SPELL

cs

	public const int miasma_Poison = 50705;

	public const int ball_Nether = 50106; 
	public const int funnel_Poison = 50605;

	public const int hand_Poison = 50405; 
	public const int flare_Poison = 51205; 
	public const int arrow_Poison = 50505; 

	public const int bolt_Poison = 50305;

public class SPELL

cs

	public const int bit_Mind = 51104;

	public const int arrow_Poison = 50505; 
	public const int sword_Mind = 51004; 

	public const int puddle_ = 7800; 
	public const int hand_Poison = 50405; 

	public const int bolt_Nether = 50306; 
	public const int ball_Nether = 50106; 

	public const int hand_Nether = 50406; 
	public const int puddle_ = 7800; 

	public const int miasma_Sound = 50707; 
	public const int bolt_Nether = 50306; 

	public const int funnel_Sound = 50607;

public class SPELL

cs

	public const int arrow_Nether = 50506;

	public const int puddle_Sound = 50907; 
	public const int hand_Nether = 50406; 

	public const int sword_Mind = 51004; 
	public const int weapon_Sound = 50807; 
	public const int puddle_Chaos = 50910; 

	public const int sword_Chaos = 51010;

	public const int flare_Chaos = 51210; 
	public const int bit_Chaos = 51110; 

	public const int bolt_Impact = 50315;

public class SPELL

cs

	public const int ball_Cut = 50114;

	public const int bit_Chaos = 51110; 
	public const int flare_Acid = 51213;

	public const int bit_Acid = 51113; 
	public const int sword_Acid = 51013;

	public const int funnel_ = 7005;

public class SPELL

cs

	public const int puddle_Magic = 50911;

	public const int bolt_Ether = 50312; 
	public const int weapon_Magic = 50811;

	public const int miasma_Magic = 50711; 
	public const int funnel_Magic = 50611;

	public const int arrow_Magic = 50511;

public class SPELL

cs

	public const int ball_Magic = 50111;

	public const int miasma_Magic = 50711; 
	public const int flare_Chaos = 51210; 

	public const int hand_Ether = 50412; 
	public const int bolt_Ether = 50312; 

	public const int arrow_Ether = 50512; 
	public const int puddle_Mind = 50904; 
	public const int hand_Ether = 50412; 

	public const int funnel_Ether = 50612;

public class SPELL

cs

	public const int miasma_Ether = 50712;

	public const int bit_Acid = 51113; 
	public const int arrow_Ether = 50512; 

	public const int puddle_Mind = 50904; 
	public const int SpUncurseG = 8241; 

	public const int weapon_Mind = 50804;

	public const int miasma_Mind = 50704; 
	public const int funnel_Mind = 50604; 

	public const int SpIncognito = 8780;

public class SPELL

cs

	public const int SpSummonTrooper = 9052;

	public const int bit_Lightning = 51102; 
	public const int sword_Lightning = 51002;

	public const int puddle_Lightning = 50902;

public class SPELL

cs

	public const int funnel_Lightning = 50602;

	public const int flare_Lightning = 51202; 
	public const int arrow_Lightning = 50502;

	public const int bolt_Lightning = 50302; 
	public const int bit_Lightning = 51102; 
	public const int hand_Lightning = 50402; 

	public const int SpTelekinesis = 8215;

public class SPELL

cs

	public const int sword_Cold = 51001;

	public const int hand_Lightning = 50402; 
	public const int puddle_Cold = 50901; 

	public const int ball_Darkness = 50103; 
	public const int bolt_Lightning = 50302; 

	public const int SpGate = 8202; 
	public const int flare_Lightning = 51202; 

	public const int bolt_Darkness = 50303; 
	public const int ball_Darkness = 50103; 

	public const int funnel_Mind = 50604; 
	public const int SpGate = 8202; 

	public const int arrow_Mind = 50504;

public class SPELL

cs

	public const int hand_Darkness = 50403;

	public const int puddle_Cold = 50901; 
	public const int bolt_Darkness = 50303; 

	public const int weapon_Cold = 50801;

public class SPELL

cs

	public const int funnel_Cold = 50601;

	public const int arrow_Cold = 50501; 
	public const int SpDrawBacker = 9503;

	public const int SpDrawMetal = 9502;

public class SPELL

cs

	public const int FieldSpider = 10000;

	public const int SpUncurseG = 8241; 
	public const int miasma_Mind = 50704; 

	public const int FieldFeast = 10001;

	public const int bit_Void = 51116; 
	public const int arrow_Cold = 50501; 
	public const int ball_Fire = 50100; 

	public const int hand_Cold = 50401;

public class SPELL

cs

	public const int bolt_Fire = 50300;

	public const int ball_Fire = 50100; 
	public const int bit_Void = 51116; 
	public const int FieldAlert = 10002; 

	public const int flare_Void = 51216;

	public static readonly int[] IDS = new int[296] 
	public static readonly int[] IDS = new int[297] 
	{
		8250, 50109, 51208, 51108, 51008, 50908, 50808, 7008, 50708, 50508, 
		50408, 50308, 7009, 50108, 51207, 50608, 50309, 50409, 50509, 50810, 
		50710, 50610, 50510, 50410, 50310, 7007, 50110, 51209, 51109, 51009, 
		50909, 50809, 50709, 50609, 51107, 50910, 51007, 50807, 51205, 51105, 
		51005, 50905, 50805, 50705, 50106, 50605, 50405, 50305, 8200, 50105, 
		51204, 51104, 50505, 7800, 50306, 50406, 50707, 50607, 50507, 50407, 
		50307, 7010, 50107, 51206, 51106, 51006, 50906, 50806, 50706, 50606, 
		50506, 50907, 51004, 51010, 51210, 50315, 7002, 50115, 51214, 51114, 
		8250, 51208, 51108, 51008, 50908, 50808, 50708, 50109, 50608, 50408, 
		50308, 7009, 50108, 51207, 51107, 50508, 7008, 50309, 50409, 50710, 
		50610, 50510, 50410, 50310, 7007, 50110, 51209, 51109, 51009, 50909, 
		50809, 50709, 50609, 50509, 51007, 50810, 50907, 50707, 51105, 51005, 
		50905, 50805, 50705, 50605, 51205, 50505, 50305, 8200, 50105, 51204, 
		51104, 51004, 50405, 50106, 7800, 50306, 50607, 50507, 50407, 50307, 
		7010, 50107, 51206, 51106, 51006, 50906, 50806, 50706, 50606, 50506, 
		50406, 50807, 50910, 51010, 51110, 50315, 7002, 50115, 51214, 51114, 
		51014, 50415, 50914, 50714, 50614, 50514, 50414, 50314, 7003, 50814,
		50515, 50615, 50715, 51016, 50916, 50816, 50716, 50616, 50516, 50416,
		50316, 7001, 50116, 51215, 51115, 51015, 50915, 50815, 50114, 51110, 
		51213, 51013, 7005, 50112, 51211, 51111, 51011, 50911, 50312, 50811, 
		50611, 50511, 50411, 50311, 7006, 50111, 50711, 50412, 50512, 50612, 
		50913, 50813, 50713, 50613, 50513, 50413, 50313, 7004, 50113, 51212, 
		51112, 51012, 50912, 50812, 50712, 51113, 50904, 50804, 50704, 8780, 
		8776, 8775, 8770, 8721, 8720, 8790, 8710, 8707, 8706, 8705, 
		8704, 8702, 8700, 8708, 8791, 8792, 8240, 9009, 9008, 9007, 
		9006, 9005, 9004, 9003, 9002, 9001, 9000, 8801, 8800, 8221, 
		8230, 8232, 8555, 9010, 8550, 8507, 8400, 8390, 8380, 8300, 
		8288, 8286, 8401, 8285, 8281, 8280, 8260, 8256, 8255, 8251, 
		8284, 8402, 8403, 8404, 8506, 8504, 8503, 8502, 8501, 8500, 
		8491, 8490, 8480, 8471, 8470, 8450, 8430, 8406, 8405, 8510, 
		9050, 9051, 9052, 51102, 51002, 50902, 50802, 50702, 50602, 51202, 
		50502, 50302, 8215, 50102, 51201, 51101, 51001, 50402, 50103, 8202, 
		50303, 50604, 50504, 50404, 50304, 8201, 50104, 51203, 51103, 51003, 
		50903, 50803, 50703, 50603, 50503, 50403, 50901, 50801, 50701, 50601, 
		9503, 9502, 9501, 9500, 9210, 9200, 9160, 9156, 9155, 9151, 
		9150, 9056, 9055, 9054, 9053, 10000, 8241, 10001, 51116, 50501, 
		50316, 7001, 50116, 51215, 51115, 51015, 50915, 50815, 50114, 51213, 
		51113, 51013, 7005, 50112, 51211, 51111, 51011, 50911, 50811, 50711, 
		50611, 50511, 50411, 50311, 7006, 50111, 51210, 50312, 50904, 50412, 
		50612, 50913, 50813, 50713, 50613, 50513, 50413, 50313, 7004, 50113, 
		51212, 51112, 51012, 50912, 50812, 50712, 50512, 8241, 50804, 50604, 
		8780, 8776, 8775, 8770, 8721, 8720, 8790, 8710, 8707, 8706, 
		8705, 8704, 8702, 8700, 8708, 8791, 8792, 8240, 9009, 9008, 
		9007, 9006, 9005, 9004, 9003, 9002, 9001, 9000, 8801, 8800, 
		8221, 8230, 8232, 8555, 9010, 8550, 8507, 8400, 8390, 8380, 
		8300, 8288, 8286, 8401, 8285, 8281, 8280, 8260, 8256, 8255, 
		8251, 8284, 8402, 8403, 8404, 8506, 8504, 8503, 8502, 8501, 
		8500, 8491, 8490, 8480, 8471, 8470, 8450, 8430, 8406, 8405, 
		8510, 9050, 9051, 9052, 51002, 50902, 50802, 50702, 50602, 50502, 
		51102, 50402, 8215, 50102, 51201, 51101, 51001, 50901, 50302, 51202, 
		50103, 8202, 50504, 50404, 50304, 8201, 50104, 51203, 51103, 51003, 
		50903, 50803, 50703, 50603, 50503, 50403, 50303, 50801, 50701, 50601, 
		50501, 9503, 9502, 9501, 9500, 9210, 9200, 9160, 9156, 9155, 
		9151, 9150, 9056, 9055, 9054, 9053, 10000, 50704, 10001, 50100, 
		50401, 50301, 8220, 50101, 51200, 51100, 51000, 50900, 50800, 50700,
		50600, 50500, 50400, 50300, 50100, 51216
		50600, 50500, 50400, 50300, 51116, 10002, 51216
	};
}
public class Spell : Ability

ShopType

public enum ShopType

cs
	KeeperOfGarden,
	TravelMerchant,
	TravelMerchant2,
	CustomContent 
	CustomContent, 
	AnimalGoods 
}

+Song

File Created
cs
public class Song : Ability
{
}

SourceDeco

public class Row : TileRow

cs

		public float autotileBrightness;

		[NonSerialized] 
		public string name_L; 
		[NonSerialized] 
		public string detail_L; 
		public override bool UseAlias => true;

		public override string GetAlias => alias;

SourceManager

public void InitLang()

cs

	public void OnChangeLang()
	{
		InitLang(); 
	}

	public void Init()

StanceSongEnd

public class StanceSongEnd : BaseSong

cs

	public override void TickSong()
	{
		if (owner.IsPCFactionOrMinion && EClass._zone.isPeace) 
		{ 
			return; 
		} 
		foreach (Chara item in owner.pos.ListCharasInRadius(owner, 4, (Chara c) => !c.IsDeadOrSleeping && c.IsHostile(owner)))
		{
			if (owner == null || !owner.ExistsOnMap)

TaskDrawWater

public override void OnCreateProgress(Progress_Custom p)

cs
		num = ((num <= 0) ? 1 : (2 + num / 10));
		if (num > 1)
		{
			List<Point> list = EClass._map.ListPointsInSquare(pos, num - 1); 
			List<Point> list = EClass._map.ListPointsInSquare(pos, num - 1, mustBeWalkable: false); 
			list.Sort((Point a, Point b) => a.Distance(pos) - b.Distance(pos));
			{
				foreach (Point item in list)

TileType

public HitResult _HitTest(Point pos, Card target, bool canIgnore = true)

cs
	}
	if (pos.HasBlock)
	{
		if (!CanBuiltOnBlock && pos.sourceBlock.tileType.IsOccupyCell && !EClass.core.config.test.allowBlockOnItem) 
		if (!CanBuiltOnBlock && pos.sourceBlock.tileType.IsOccupyCell && (!EClass.core.config.test.allowBlockOnItem || !EClass._zone.IsPCFactionOrTent)) 
		{
			return HitResult.Invalid;
		}

Trait

public Thing CreateStock()

cs
			{
			case ShopType.Dye:
			{
				Thing thing = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30)); 
				thing.ChangeMaterial(EClass.sources.materials.rows.Where((SourceMaterial.Row r) => r.tier <= 4).RandomItem().alias); 
				return thing; 
				Thing thing4 = ThingGen.Create("dye").SetNum(15 + EClass.rnd(30)); 
				thing4.ChangeMaterial(EClass.sources.materials.rows.Where((SourceMaterial.Row r) => r.tier <= 4).RandomItem().alias); 
				return thing4; 
			}
			case ShopType.GeneralExotic:
				return FromFilter("shop_generalExotic");

public Thing CreateStock()

cs
				return FromFilter("shop_magic");
			case ShopType.Ecopo:
			{
				Thing thing2 = TraitSeed.MakeRandomSeed(enc: true); 
				Thing thing3 = TraitSeed.MakeRandomSeed(enc: true); 
				if (EClass.rnd(2) == 0)
				{
					TraitSeed.LevelSeed(thing2, (thing2.trait as TraitSeed).row, 1); 
					TraitSeed.LevelSeed(thing3, (thing3.trait as TraitSeed).row, 1); 
				}
				return thing2; 
				return thing3; 
			}
			case ShopType.AnimalGoods:
				if (EClass.rnd(2) == 0) 
				{ 
					return Create("saddle"); 
				} 
				if (EClass.rnd(2) == 0) 
				{ 
					return Create("saddle_waist"); 
				} 
				return Create("pasture"); 
			case ShopType.Healer:
			{
				Thing thing3 = null; 
				Thing thing2 = null; 
				for (int i = 0; i < 1000; i++)
				{
					thing3 = FromFilter("shop_healer"); 
					if (thing3.trait is TraitScroll { source: not null } traitScroll) 
					thing2 = FromFilter("shop_healer"); 
					if (thing2.trait is TraitScroll { source: not null } traitScroll) 
					{
						if (!(traitScroll.source.aliasParent != "WIL") && !(traitScroll.source.categorySub == "attack"))
						{
							break;
						}
					}
					else if (thing3.trait is TraitPotionRandom { source: not null } traitPotionRandom) 
					else if (thing2.trait is TraitPotionRandom { source: not null } traitPotionRandom) 
					{
						if (!(traitPotionRandom.source.aliasParent != "WIL") && !(traitPotionRandom.source.categorySub == "attack"))
						{
							thing3.SetNum(EClass.rnd(5) + 1); 
							thing2.SetNum(EClass.rnd(5) + 1); 
							break;
						}
					}
					else if (thing3.trait is TraitRodRandom { source: not null } traitRodRandom && !(traitRodRandom.source.aliasParent != "WIL") && !(traitRodRandom.source.categorySub == "attack")) 
					else if (thing2.trait is TraitRodRandom { source: not null } traitRodRandom && !(traitRodRandom.source.aliasParent != "WIL") && !(traitRodRandom.source.categorySub == "attack")) 
					{
						break;
					}
				}
				return thing3; 
				return thing2; 
			}
			case ShopType.Milk:
				if (EClass._zone is Zone_Nefu && EClass.rnd(2) == 0)
				{
					Thing thing4 = ThingGen.Create("_milk"); 
					thing4.MakeRefFrom(EClass.sources.charas.rows.Where((SourceChara.Row r) => r.race == "mifu" || r.race == "nefu").RandomItem().model); 
					Debug.Log(thing4); 
					return thing4; 
					Thing thing = ThingGen.Create("_milk"); 
					thing.MakeRefFrom(EClass.sources.charas.rows.Where((SourceChara.Row r) => r.race == "mifu" || r.race == "nefu").RandomItem().model); 
					Debug.Log(thing); 
					return thing; 
				}
				return Create("_milk");
			case ShopType.Map:

TraitAnimalTamer

public class TraitAnimalTamer : TraitCitizen

cs
public class TraitAnimalTamer : TraitCitizen
public class TraitAnimalTamer : TraitMerchant
{
	public override int GuidePriotiy => 15;

	public override SlaverType SlaverType => SlaverType.Animal;
	public override ShopType ShopType => ShopType.AnimalGoods; 
}

TraitFigure

public override int GetValue()

cs
		{
			return base.GetValue();
		}
		return MathEx.ClampToInt((base.GetValue() + Mathf.Min(source.LV, 2000000) * 50) * ((!source.multisize) ? 1 : 2) * ((source.quality < 4) ? 1 : 2)); 
		return MathEx.ClampToInt((base.GetValue() + Mathf.Min(source.LV, 1000000) * 50) * ((!source.multisize) ? 1 : 2) * ((source.quality < 4) ? 1 : 2)); 
	}

	public override void TrySetAct(ActPlan p)

TraitMixer

public class TraitMixer : TraitChopper

cs
public class TraitMixer : TraitChopper
{
	public override bool Contains(RecipeSource r) 
	{ 
		if (!base.Contains(r)) 
		{ 
			return r.idFactory == "mixer"; 
		} 
		return true; 
	} 
}

TraitPowerStatue

public virtual bool IsImplemented()

cs
	{
		return true;
	}
	public override void SetName(ref string s) 
	{ 
		if (!(this is TraitGodStatue) && !owner.isOn) 
		{ 
			s = s + Lang.space + "empty".lang(); 
		} 
	} 
}

WidgetDate

public void _Refresh()

cs
	gridFieldEffect.childAlignment = (flag ? TextAnchor.UpperRight : TextAnchor.UpperLeft);
	foreach (UIButton componentsInDirectChild in gridFieldEffect.GetComponentsInDirectChildren<UIButton>())
	{
		if (!(componentsInDirectChild.refObj is FieldEffect fieldEffect) || fieldEffect.owner != EMono._zone.fieldElements || fieldEffect.Value == 9) 
		if (!(componentsInDirectChild.refObj is FieldEffect fieldEffect) || fieldEffect.owner != EMono._zone.fieldElements || fieldEffect.Value == 0) 
		{
			UnityEngine.Object.DestroyImmediate(componentsInDirectChild.gameObject);
		}

Zone

public virtual int MaxSoil

cs

	public Zone FindOrCreateLevel(int destLv, string subId = "")
	{
		if (destLv == base.lv) 
		{ 
			return this; 
		} 
		Zone zone = FindZone(destLv);
		if (zone != null)
		{

public void OnVisit()

cs
		base.visitCount++;
	}
	base.version = EClass.core.version.GetInt();
	if (fieldElements.dict.Count() > 0) 
	if (HasField(10000)) 
	{
		Tutorial.Reserve("field");
	}

public bool HasField(int idEle)

cs
		return fieldElements.Has(idEle);
	}

	public void SetFieldEffect(int idEle, int a) 
	public void SetFieldEffect(int idEle, int a, int duration = 0) 
	{ 
		fieldElements.SetBase(idEle, a, duration); 
	} 
	public void RemoveFieldEffect(int idEle) 
	{
		fieldElements.SetBase(idEle, a); 
		fieldElements.Remove(idEle); 
	}

	public void RefreshElectricity()