Skip to content

EA 23.114 Nightly

March 26, 2025

31 files modified. 8 new files created.

Important Changes

None.

ABILITY

@@ -2,11 +2,7 @@

cs

public class ABILITY
{
	public const int ActChat = 5044; 

	public const int AI_Fish = 5039; 

	public const int ActRanged = 5040; 
	public const int AI_Drink = 5045; 

	public const int AI_Read = 5041;

@@ -14,7 +10,7 @@ public class ABILITY

cs

	public const int AI_TendAnimal = 5043;

	public const int AI_Drink = 5045; 
	public const int ActChat = 5044; 

	public const int ActInstall = 5046;

@@ -32,13 +28,13 @@ public class ABILITY

cs

	public const int TaskHarvest = 5053;

	public const int ActThrow = 5038; 

	public const int AI_Bladder = 5054;

	public const int AI_PlayMusic = 6001; 
	public const int ActRestrain = 5055; 

	public const int AI_Meditate = 6003; 
	public const int ActRanged = 5040; 

	public const int AI_PlayMusic = 6001; 

	public const int AI_Steal = 6011;

@@ -60,21 +56,21 @@ public class ABILITY

cs

	public const int ActSuicide = 6410;

	public const int ActRush = 6450; 
	public const int ActDuplicate = 6420; 

	public const int ActCrabBreathe = 6500;

	public const int ActRestrain = 5055; 

	public const int ActCurse = 6600;

	public const int ActNoItem = 5037; 
	public const int ActEntangle = 6601; 

	public const int TaskBuild = 5035; 
	public const int AI_Meditate = 6003; 

	public const int Wait = 5005; 
	public const int ActDraw = 6602; 

	public const int Shoot = 5006; 
	public const int AI_Fish = 5039; 

	public const int ActNoItem = 5037; 

	public const int Use = 5007;

@@ -100,13 +96,13 @@ public class ABILITY

cs

	public const int TaskPick = 5018;

	public const int TaskMoveInstalled = 5036; 

	public const int TaskReadBoard = 5019;

	public const int TaskTrain = 5021; 
	public const int TaskFarm = 5020; 

	public const int TaskSleepOnBed = 5022; 
	public const int ActThrow = 5038; 

	public const int TaskTrain = 5021; 

	public const int TaskGoOut = 5023;

@@ -132,15 +128,17 @@ public class ABILITY

cs

	public const int GoalIdle = 5034;

	public const int TaskFarm = 5020; 
	public const int TaskBuild = 5035; 

	public const int ActEntangle = 6601; 
	public const int TaskMoveInstalled = 5036; 

	public const int ActDuplicate = 6420; 
	public const int TaskSleepOnBed = 5022; 

	public const int ActNTR = 6603;

	public const int breathe_ = 7000; 
	public const int ActRush = 6450; 

	public const int ActFear = 6611; 

	public const int breathe_Fire = 50200;

@@ -158,15 +156,15 @@ public class ABILITY

cs

	public const int breathe_Sound = 50207;

	public const int ActDraw = 6602; 
	public const int breathe_Nerve = 50208; 

	public const int breathe_Holy = 50209; 
	public const int ActWeaken = 6610; 

	public const int breathe_Chaos = 50210;

	public const int breathe_Magic = 50211; 
	public const int breathe_ = 7000; 

	public const int breathe_Ether = 50212; 
	public const int breathe_Magic = 50211; 

	public const int breathe_Acid = 50213;

@@ -186,72 +184,78 @@ public class ABILITY

cs

	public const int Sleep = 5004;

	public const int ActHeadpat = 6904; 

	public const int ActKizuamiTrick = 6903; 

	public const int breathe_Nerve = 50208; 
	public const int Wait = 5005; 

	public const int ActJureHeal = 6901; 
	public const int Shoot = 5006; 

	public const int ActTouchSleep = 6612; 
	public const int breathe_Ether = 50212; 

	public const int ActFear = 6611; 
	public const int ActHeadpat = 6904; 

	public const int ActWeaken = 6610; 
	public const int breathe_Holy = 50209; 

	public const int ActLulwyTrick = 6902;

	public const int ActGazeDim = 6620; 

	public const int ActTouchDrown = 6613;

	public const int ActGazeDim = 6620; 
	public const int ActTouchSleep = 6612; 

	public const int ActGazeInsane = 6621; 
	public const int ActKizuamiTrick = 6903; 

	public const int ActGazeMutation = 6622; 
	public const int ActGazeMana = 6623; 

	public const int ActDrainBlood = 6626; 
	public const int ActGazeMutation = 6622; 

	public const int ActInsult = 6630;

	public const int ActScream = 6631;

	public const int ActGazeMana = 6623; 
	public const int ActSteal = 6640; 

	public const int ActStealFood = 6641;

	public const int ActStealMoney = 6642;

	public const int ActNeckHunt = 6650; 
	public const int ActDrainBlood = 6626; 

	public const int ActDropMine = 6660;

	public const int ActThrowPotion = 6661; 

	public const int ActSwarm = 6662; 
	public const int ActJureHeal = 6901; 

	public const int ActManaAbsorb = 6900;

	public const int StManaCost = 6720;

	public const int ActSteal = 6640; 
	public const int ActNeckHunt = 6650; 

	public const int ActGazeInsane = 6621; 

	public const int ActBladeStorm = 6664; 

	public const int ActMultiHit = 6663; 

	public const int ActSwarm = 6662; 

	public const int ActThrowPotion = 6661; 

	public const int StTaunt = 6700;

	public static readonly int[] IDS = new int[118] 
	public static readonly int[] IDS = new int[120] 
	{
		5044, 5039, 5040, 5041, 5042, 5043, 5045, 5046, 5047, 5048, 
		5049, 5050, 5051, 5052, 5053, 5038, 5054, 6001, 6003, 6011, 
		6012, 6013, 6015, 6018, 6019, 6020, 6050, 6400, 6410, 6450, 
		6500, 5055, 6600, 5037, 5035, 5005, 5006, 5007, 5008, 5009, 
		5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5036, 
		5019, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 
		5030, 5031, 5032, 5033, 5034, 5020, 6601, 6420, 6603, 7000, 
		50200, 50201, 50202, 50203, 50204, 50205, 50206, 50207, 6602, 50209, 
		50210, 50211, 50212, 50213, 50214, 50215, 50216, 5000, 5001, 5002, 
		5003, 5004, 6904, 6903, 50208, 6901, 6612, 6611, 6610, 6902, 
		6613, 6620, 6621, 6622, 6626, 6630, 6631, 6623, 6641, 6642, 
		6650, 6660, 6661, 6662, 6900, 6720, 6640, 6700
		5045, 5041, 5042, 5043, 5044, 5046, 5047, 5048, 5049, 5050, 
		5051, 5052, 5053, 5054, 5055, 5040, 6001, 6011, 6012, 6013, 
		6015, 6018, 6019, 6020, 6050, 6400, 6410, 6420, 6500, 6600, 
		6601, 6003, 6602, 5039, 5037, 5007, 5008, 5009, 5010, 5011, 
		5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5038, 
		5021, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 
		5032, 5033, 5034, 5035, 5036, 5022, 6603, 6450, 6611, 50200, 
		50201, 50202, 50203, 50204, 50205, 50206, 50207, 50208, 6610, 50210, 
		7000, 50211, 50213, 50214, 50215, 50216, 5000, 5001, 5002, 5003, 
		5004, 5005, 5006, 50212, 6904, 50209, 6902, 6620, 6613, 6612, 
		6903, 6623, 6622, 6630, 6631, 6640, 6641, 6642, 6626, 6660, 
		6901, 6900, 6720, 6650, 6621, 6664, 6663, 6662, 6661, 6700
	};
}
public class Ability : Act

ActMelee

@@ -3,6 +3,8 @@

cs

public class ActMelee : ActBaseAttack
{
	public virtual float BaseDmgMTP => 1f; 

	public virtual bool UseWeaponDist => true;

	public override int PerformDistance

@@ -270,7 +272,7 @@ void Attack(Card _tc, Point _tp, float mtp, bool subAttack)

cs
				{
					Act.CC.Say("attack_chaser");
				}
				flag = AttackProcess.Current.Perform(count, hasHit, dmgMulti * mtp, maxRoll, subAttack); 
				flag = AttackProcess.Current.Perform(count, hasHit, dmgMulti * mtp * BaseDmgMTP, maxRoll, subAttack); 
				if (!flag && frustration > 0 && 10f + 2f * Mathf.Sqrt(frustration) > (float)EClass.rnd(100))
				{
					AttackProcess.Current.critFury = true;

@@ -297,6 +299,10 @@ void Attack(Card _tc, Point _tp, float mtp, bool subAttack)

cs
						{
							usedTalisman = true;
							flag2 = true;
							if (Act.CC.Evalue(609) > 0 && Mathf.Min(10f + Mathf.Sqrt(Act.CC.Evalue(609)) * 5f, 90f) > (float)EClass.rnd(100)) 
							{ 
								flag2 = false; 
							} 
							int spellExp = Act.CC.elements.GetSpellExp(Act.CC, act, 200);
							Act.CC.ModExp(act.id, spellExp);
						}

+ActMeleeBladeStorm

File Created
cs
public class ActMeleeBladeStorm : ActMelee
{
	public override float BaseDmgMTP => 0.2f;
}

+ActMultihit

File Created
cs
public class ActMultihit : Ability
{
	public override bool CanPerform()
	{
		if (Act.TC == null)
		{
			return false;
		}
		return base.CanPerform();
	}

	public override bool Perform()
	{
		int num = 0;
		Card orgTC = Act.TC;
		int num2 = 4 + EClass.rnd(6);
		for (int i = 0; i < num2; i++)
		{
			if (!Act.CC.IsAliveInCurrentZone || !orgTC.IsAliveInCurrentZone)
			{
				break;
			}
			bool anime = i % 4 == 0;
			TweenUtil.Delay((float)num * 0.07f, delegate
			{
				if (anime)
				{
					orgTC.pos.PlayEffect("ab_bladestorm");
				}
				orgTC.pos.PlaySound("ab_swarm");
			});
			num++;
			new ActMeleeBladeStorm().Perform(Act.CC, orgTC);
		}
		return true;
	}
}

ActPlan

@@ -500,62 +500,72 @@ public void _Update(PointTarget target)

cs
		}
		items.ForeachReverse(delegate(Card _c)
		{
			Chara c2 = _c.Chara; 
			if (c2 != null && !c2.IsPC && EClass.pc.CanSee(c2)) 
			if (_c.isThing) 
			{
				int num = c2.Dist(EClass.pc); 
				if (num <= 1 || !EClass.pc.isBlind) 
				if (_c.trait.CanBeAttacked) 
				{
					if (!EClass.pc.isBlind && !c2.IsHostile() && (input == ActInput.AllAction || !(c2.IsPCParty || c2.IsMinion || isKey)) && (input == ActInput.AllAction || !c2.IsNeutral() || c2.quest != null || EClass.game.quests.IsDeliverTarget(c2)) && c2.isSynced && num <= 2) 
					TrySetAct(ACT.Melee, _c); 
				} 
			} 
			else
			{ 
				Chara c2 = _c.Chara; 
				if (c2 != null && !c2.IsPC && EClass.pc.CanSee(c2)) 
				{ 
					int num = c2.Dist(EClass.pc); 
					if (num <= 1 || !EClass.pc.isBlind) 
					{
						bool flag5 = !c2.HasCondition<ConSuspend>() && (!c2.isRestrained || !c2.IsPCFaction); 
						if (EClass._zone.instance is ZoneInstanceMusic && !c2.IsPCFactionOrMinion) 
						{ 
							flag5 = false; 
						} 
						if (flag5 || altAction) 
						if (!EClass.pc.isBlind && !c2.IsHostile() && (input == ActInput.AllAction || !(c2.IsPCParty || c2.IsMinion || isKey)) && (input == ActInput.AllAction || !c2.IsNeutral() || c2.quest != null || EClass.game.quests.IsDeliverTarget(c2)) && c2.isSynced && num <= 2) 
						{
							if (EClass.pc.HasElement(1216) && c2.HasCondition<ConSleep>()) 
							bool flag5 = !c2.HasCondition<ConSuspend>() && (!c2.isRestrained || !c2.IsPCFaction); 
							if (EClass._zone.instance is ZoneInstanceMusic && !c2.IsPCFactionOrMinion) 
							{
								TrySetAct(new AI_Fuck
								flag5 = false; 
							} 
							if (flag5 || altAction) 
							{ 
								if (EClass.pc.HasElement(1216) && c2.HasCondition<ConSleep>()) 
								{
									target = c2, 
									succubus = true
								}, c2); 
									TrySetAct(new AI_Fuck
									{ 
										target = c2, 
										succubus = true
									}, c2); 
								} 
								TrySetAct(ACT.Chat, c2); 
							}
							TrySetAct(ACT.Chat, c2); 
						}
					} 
					if (c2.host != EClass.pc) 
					{ 
						TraitShackle traitShackle = c2.pos.FindThing<TraitShackle>(); 
						if (c2.IsRestrainedResident) 
						if (c2.host != EClass.pc) 
						{
							if (traitShackle != null && traitShackle.AllowTraining) 
							TraitShackle traitShackle = c2.pos.FindThing<TraitShackle>(); 
							if (c2.IsRestrainedResident) 
							{
								TrySetAct(new AI_PracticeDummy
								if (traitShackle != null && traitShackle.AllowTraining) 
								{
									target = c2 
								}); 
									TrySetAct(new AI_PracticeDummy
									{ 
										target = c2 
									}); 
								} 
							} 
							else if ((c2.IsHostile() || altAction || c2.isRestrained) && c2.IsAliveInCurrentZone) 
							{ 
								TrySetAct(ACT.Melee, c2); 
							}
						}
						else if ((c2.IsHostile() || altAction || c2.isRestrained) && c2.IsAliveInCurrentZone) 
						if (c2.IsPCPartyMinion && !c2.Chara.IsEscorted() && altAction) 
						{
							TrySetAct(ACT.Melee, c2); 
							TrySetAct("ActBanishSummon", delegate
							{ 
								EClass.pc.Say("summon_vanish", c2); 
								c2.pos.PlayEffect("vanish"); 
								c2.pos.PlaySound("vanish"); 
								c2.pos.PlayEffect("teleport"); 
								c2.Destroy(); 
								return true; 
							}, c2, null, 99); 
						}
					}
					if (c2.IsPCPartyMinion && !c2.Chara.IsEscorted() && altAction) 
					{ 
						TrySetAct("ActBanishSummon", delegate
						{ 
							EClass.pc.Say("summon_vanish", c2); 
							c2.pos.PlayEffect("vanish"); 
							c2.pos.PlaySound("vanish"); 
							c2.pos.PlayEffect("teleport"); 
							c2.Destroy(); 
							return true; 
						}, c2, null, 99); 
					} 
				}
			}
		});

ActRush

@@ -25,22 +25,22 @@ public override bool CanPerform()

cs
	bool flag = Act.CC.IsPC && !(Act.CC.ai is GoalAutoCombat);
	if (flag)
	{
		Act.TC = EClass.scene.mouseTarget.TargetChara; 
		Act.TC = EClass.scene.mouseTarget.card; 
	}
	if (Act.TC == null)
	{
		return false;
	}
	Act.TP.Set(flag ? EClass.scene.mouseTarget.pos : Act.TC.pos); 
	if (Act.CC.isRestrained) 
	if (Act.TC.isThing && !Act.TC.trait.CanBeAttacked) 
	{
		return false;
	}
	if (Act.CC.host != null || Act.CC.Dist(Act.TP) <= 2) 
	Act.TP.Set(flag ? EClass.scene.mouseTarget.pos : Act.TC.pos); 
	if (Act.CC.isRestrained) 
	{
		return false;
	}
	if (Los.GetRushPoint(Act.CC.pos, Act.TP) == null) 
	if (Act.CC.host != null || Act.CC.Dist(Act.TP) <= 2) 
	{
		return false;
	}

@@ -52,7 +52,7 @@ public override bool Perform()

cs
	bool flag = Act.CC.IsPC && !(Act.CC.ai is GoalAutoCombat);
	if (flag)
	{
		Act.TC = EClass.scene.mouseTarget.TargetChara; 
		Act.TC = EClass.scene.mouseTarget.card; 
	}
	if (Act.TC == null)
	{

ActSwarm

@@ -2,9 +2,11 @@

cs

public class ActSwarm : Ability
{
	public override int PerformDistance => 3; 

	public override bool CanPerform()
	{
		if (Act.TC == null || !Act.CC.IsHostile(Act.TC.Chara)) 
		if (Act.CC == Act.TC || Act.TC == null || Act.CC.Dist(Act.TC) > PerformDistance) 
		{
			return false;
		}

@@ -14,13 +16,14 @@ public override bool CanPerform()

cs
public override bool Perform()
{
	float num = 0f;
	foreach (Chara item in EClass._map.charas.ToList()) 
	Card tC = Act.TC; 
	foreach (Card item in EClass._map.Cards.ToList()) 
	{
		if (!Act.CC.IsAliveInCurrentZone)
		{
			break;
		}
		if (item.IsAliveInCurrentZone && item != Act.CC && item.IsHostile(Act.CC) && Act.CC.CanSeeLos(item)) 
		if (item.IsAliveInCurrentZone && item != Act.CC && (!item.isChara || item == tC || item.Chara.IsHostile(Act.CC)) && (item.isChara || item.trait.CanBeAttacked) && item.Dist(Act.CC) <= PerformDistance && Act.CC.CanSeeLos(item)) 
		{
			Point pos = item.pos;
			TweenUtil.Delay(num, delegate

AttackProcess

@@ -610,7 +610,10 @@ public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
	num -= num9;
	num = TC.ApplyProtection(num) + num9 + num8;
	TC.DamageHP(num, num4, num5, (!IsRanged && !isThrow) ? AttackSource.Melee : AttackSource.Range, CC, showEffect, weapon);
	conWeapon?.Mod(-1); 
	if (conWeapon != null && (CC.Evalue(609) <= 0 || !(Mathf.Min(10f + Mathf.Sqrt(CC.Evalue(609)) * 5f, 90f) > (float)EClass.rnd(100)))) 
	{ 
		conWeapon.Mod(-1); 
	} 
	bool flag2 = IsCane || (weapon != null && weapon.Evalue(482) > 0);
	int attackStyleElement = CC.body.GetAttackStyleElement(attackStyle);
	if (!subAttack)

BaseCondition

@@ -98,6 +98,8 @@ public bool isPerfume

cs

	public virtual bool ConsumeTurn => false;

	public virtual bool HasDuration => base.source.duration != "-1"; 

	public virtual bool PreventRegen => false;

	public virtual bool ShouldRefresh => false;

Card

@@ -4021,6 +4021,10 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
	{
		renderer.PlayAnime(AnimeID.HitObj);
		hp = MaxHP;
		if (trait.CanBeSmashedToDeath) 
		{ 
			hp = -1; 
		} 
	}
	Chara target;
	if (hp < 0)

@@ -4065,6 +4069,16 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
				Chara.AddCondition<ConInvulnerable>();
				return;
			}
			if (HasCondition<ConRebirth>()) 
			{ 
				Say("rebirth", this); 
				hp = Mathf.Min(MaxHP * (int)(5f + Mathf.Sqrt(Chara.GetCondition<ConRebirth>().power)) / 100, MaxHP); 
				Chara.AddCondition<ConInvulnerable>(); 
				Chara.RemoveCondition<ConRebirth>(); 
				PlayEffect("revive"); 
				PlaySound("revive"); 
				return; 
			} 
			foreach (Chara chara3 in EClass._map.charas)
			{
				if (Chara.IsFriendOrAbove(chara3) && chara3.HasElement(1408) && chara3.faith == EClass.game.religions.Healing && EClass.world.date.GetRawDay() != chara3.GetInt(58) && (!chara3.IsPCFaction || IsPCFaction))

@@ -4108,6 +4122,44 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
			Debug.Log(EClass.player.invlunerable);
			Debug.Log(EClass.pc.ai?.ToString() + "/" + EClass.pc.ai.IsRunning);
			Die(e, origin, attackSource);
			if (trait.CanBeSmashedToDeath) 
			{ 
				Rand.SetSeed(uid); 
				if (EClass.rnd(3) == 0) 
				{ 
					string text2 = new int[18] 
					{ 
						233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728, 
						237, 869, 1178, 1179, 1180, 1243, 1244, 1245
					}.RandomItem().ToString(); 
					if (EClass.rnd(10) == 0) 
					{ 
						text2 = "casino_coin"; 
					} 
					if (EClass.rnd(10) == 0) 
					{ 
						text2 = "scratchcard"; 
					} 
					if (EClass.rnd(3) == 0) 
					{ 
						text2 = "money"; 
					} 
					if (EClass.rnd(5) == 0) 
					{ 
						text2 = "plat"; 
					} 
					if (EClass.rnd(10) == 0) 
					{ 
						text2 = "money2"; 
					} 
					if (EClass.rnd(20) == 0) 
					{ 
						text2 = "medal"; 
					} 
					EClass._zone.AddCard(ThingGen.Create(text2).SetNum((!(text2 == "money")) ? 1 : EClass.rndHalf(100)), pos); 
				} 
				Rand.SetSeed(); 
			} 
			ProcAbsorb();
			if (EClass.pc.Evalue(1355) > 0 && (IsPCFactionOrMinion || (origin != null && origin.IsPCParty)))
			{

@@ -4445,7 +4497,7 @@ void ProcAbsorb()

cs
		{
			int valueOrDefault = (origin.Evalue(662) + weapon?.Evalue(662, ignoreGlobalElement: true)).GetValueOrDefault();
			int valueOrDefault2 = (origin.Evalue(661) + weapon?.Evalue(661, ignoreGlobalElement: true)).GetValueOrDefault();
			if (valueOrDefault > 0 && attackSource == AttackSource.Melee && origin.isChara && Chara.IsHostile(origin as Chara)) 
			if (valueOrDefault > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara)) 
			{
				int num12 = EClass.rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10));
				origin.Chara.stamina.Mod(num12);

@@ -4488,7 +4540,7 @@ public virtual void Die(Element e = null, Card origin = null, AttackSource attac

cs
	{
		_pos.PlaySound(material.GetSoundDead(sourceCard));
		_pos.PlayEffect("mine").SetParticleColor(material.GetColor()).Emit(10 + EClass.rnd(10));
		material.AddBlood(_pos, 6); 
		material.AddBlood(_pos, trait.CanBeSmashedToDeath ? (12 + EClass.rnd(8)) : 6); 
		if (_pos.IsSync)
		{
			string text = ((rootCard != this) ? "destroyed_inv_" : "destroyed_ground_");

@@ -5981,6 +6033,11 @@ bool IsParentLocked()

cs
		}
	}

	public bool HasTalk(string idTopic) 
	{ 
		return !MOD.listTalk.GetTalk(c_idTalk.IsEmpty(id), idTopic, useDefault: true).IsEmpty(); 
	} 

	public void Talk(string idTopic, string ref1 = null, string ref2 = null, bool forceSync = false)
	{
		if (IsPC && !EClass.player.forceTalk && idTopic != "goodBoy" && idTopic != "insane")

@@ -6517,11 +6574,18 @@ public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
		switch (currency)
		{
		case CurrencyType.Plat:
			if (id == "lucky_coin") 
		{ 
			string text = id; 
			if (!(text == "lucky_coin")) 
			{
				return 100; 
				if (!(text == "book_skill")) 
				{ 
					break; 
				} 
				return 50; 
			}
			break; 
			return 100; 
		} 
		case CurrencyType.Medal:
			switch (id)
			{

Chara

@@ -138,6 +138,8 @@ public class Chara : Card, IPathfindWalker

cs

	public bool bossText;

	public bool ignoreSPAbsorb; 

	private Faction _faction;

	public SourceChara.Row source;

@@ -3589,6 +3591,7 @@ public override void Tick()

cs
{
	SyncRide();
	combatCount--;
	ignoreSPAbsorb = false; 
	if (IsPC)
	{
		if (hasMovedThisTurn)

@@ -5404,6 +5407,7 @@ public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
		break;
	case Act.CostType.SP:
		stamina.Mod(-num4);
		ignoreSPAbsorb = true; 
		break;
	}
	if (a is Spell && GetCondition<ConSilence>() != null)

@@ -5429,16 +5433,10 @@ public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
		return true;
	}
	bool flag2 = true;
	switch (a.id) 
	if (HasTalk("phrase_" + a.source.alias)) 
	{
	case 9150: 
		EClass.player.forceTalk = true; 
		Talk("ab_meteor"); 
		break; 
	case 6662: 
		EClass.player.forceTalk = true;
		Talk("ab_swarm"); 
		break; 
		Talk("phrase_" + a.source.alias); 
	}
	if (pt)
	{

@@ -9258,7 +9256,7 @@ public void ModTempElement(int ele, int a, bool naturalDecay = false)

cs
	}
	int num = Mathf.Abs(elements.ValueWithoutLink(ele)) * 2 + 20;
	int num2 = tempElements.Base(ele) + a;
	if (num2 < -num || num2 > num) 
	if (num2 < -num || num2 > num || (a < 0 && num2 < -100)) 
	{
		a = 0;
	}

@@ -9317,7 +9315,7 @@ public void DiminishTempElements(int a = 1)

cs
	{
		if (item.vBase > 0)
		{
			ModTempElement(item.id, -Mathf.Min(a, item.vBase), naturalDecay: true); 
			ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true); 
		}
	}
}

+ConNightmare

File Created
cs
public class ConNightmare : BaseDebuff
{
}

+ConRebirth

File Created
cs
public class ConRebirth : BaseBuff
{
	public override void Tick()
	{
	}
}

CoreDebug

@@ -947,7 +947,6 @@ public void UpdateInput()

cs
	}
	if (Input.GetKeyDown(KeyCode.F3))
	{
		EClass.pc.AddCondition<ConDisease>(); 
		for (int i = 0; i < 10; i++)
		{
			Thing thing = ThingGen.Create("egg_fertilized");

@@ -984,7 +983,7 @@ public void UpdateInput()

cs
	}
	if (Input.GetKeyDown(KeyCode.F4))
	{
		TestSpawn(param1, param2, 5); 
		EClass.pc.PlayEffect("phoenix"); 
		return;
	}
	if (Input.GetKeyDown(KeyCode.F5))

DOMAIN

@@ -2,42 +2,42 @@

cs

public class DOMAIN
{
	public const int domEarth = 812; 

	public const int domOblivion = 813;

	public const int domEyth = 814; 

	public const int domHarmony = 815; 

	public const int domWind = 807;

	public const int domLuck = 810; 
	public const int domElement = 806; 

	public const int domMachine = 809; 
	public const int domComm = 805; 

	public const int domHarmony = 815; 
	public const int domHealing = 811; 

	public const int domEyth = 814; 
	public const int domMiracle = 803; 

	public const int domEarth = 812; 
	public const int domLuck = 810; 

	public const int domHarvest = 808;

	public const int domComm = 805; 
	public const int domMachine = 809; 

	public const int domTest = 800;

	public const int domHealing = 811; 

	public const int domElement = 806; 

	public const int domArcane = 804; 

	public const int domMiracle = 803; 
	public const int domSurvival = 801; 

	public const int domFaith = 802;

	public const int domSurvival = 801; 
	public const int domArcane = 804; 

	public static readonly int[] IDS = new int[16]
	{
		813, 807, 810, 809, 815, 814, 812, 808, 805, 800, 
		811, 806, 804, 803, 802, 801
		812, 813, 814, 815, 807, 806, 805, 811, 803, 810, 
		808, 809, 800, 801, 802, 804
	};
}
public class Domain : EClass

ELEMENT

@@ -5,27 +5,27 @@

cs

public class ELEMENT
{
	public const int roasted = 762; 
	public const int rare = 751; 

	public const int cute = 752; 

	public const int antidote = 753;

	public const int recharge = 761; 
	public const int nerve = 754; 

	public const int purity = 759; 
	public const int blood = 755; 

	public const int hotspring = 756;

	public const int blood = 755; 

	public const int nerve = 754; 
	public const int stimulant = 760; 

	public const int comfort = 750; 
	public const int recharge = 761; 

	public const int rare = 751; 
	public const int roasted = 762; 

	public const int stimulant = 760; 
	public const int comfort = 750; 

	public const int cute = 752; 
	public const int purity = 759; 

	public const int _void = 0;

@@ -75,8 +75,8 @@ public class ELEMENT

cs

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

@@ -629,7 +629,7 @@ public void _WriteNote(UINote n, Chara c, Act act)

cs
					condition.SetRefVal(79, (act.id == 8710) ? 222 : 221);
					break;
				}
				n.AddText("_bullet".lang() + "hintCon".lang(condition.Name, condition.EvaluateTurn(p).ToString() ?? "")); 
				n.AddText("_bullet".lang() + (condition.HasDuration ? "hintCon" : "hintCon2").lang(condition.Name, condition.EvaluateTurn(p).ToString() ?? "")); 
				condition._WriteNote(n, asChild: true);
			}
			else

ENC

@@ -8,19 +8,17 @@ public class ENC

cs

	public const int r_DV = 650;

	public const int r_mana = 641; 

	public const int mod_frustration = 624;

	public const int mod_flurry = 621; 

	public const int mod_cleave = 622;

	public const int mod_feint = 623;

	public const int r_life = 640; 

	public const int noDamage = 654;

	public const int r_life = 640; 
	public const int r_mana = 641; 

	public const int onlyPet = 655;

@@ -42,7 +40,7 @@ public class ENC

cs

	public const int convertFire = 850;

	public const int mod_chaser = 620; 
	public const int mod_flurry = 621; 

	public const int convertImpact = 865;

@@ -50,11 +48,11 @@ public class ENC

cs

	public const int permaCurse = 656;

	public const int mod_splash = 608; 
	public const int mod_chaser = 620; 

	public const int bane_man = 464; 
	public const int bane_machine = 465; 

	public const int mod_drill = 606; 
	public const int mod_splash = 608; 

	public const int allNeckHunt = 428;

@@ -70,7 +68,7 @@ public class ENC

cs

	public const int negateParalysis = 422;

	public const int negatePoison = 420; 
	public const int negateBlind = 421; 

	public const int innocence = 418;

@@ -108,27 +106,31 @@ public class ENC

cs

	public const int negateTeleport = 400;

	public const int mod_scatter = 607; 
	public const int mod_talisman = 609; 

	public const int breathing = 429;

	public const int sustain_STR = 440;

	public const int negateBlind = 421; 
	public const int negatePoison = 420; 

	public const int sustain_DEX = 442;

	public const int mod_scatter = 607; 

	public const int mod_drill = 606; 

	public const int mod_precision = 605;

	public const int mod_ammo_recover = 604;

	public const int mod_ammo_knockback = 603; 
	public const int sustain_END = 441; 

	public const int mod_rapid = 602;

	public const int mod_reload = 601;

	public const int sustain_END = 441; 
	public const int mod_ammo = 600; 

	public const int slot_rune = 484;

@@ -144,11 +146,11 @@ public class ENC

cs

	public const int bane_fish = 467;

	public const int bane_god = 466; 
	public const int mod_ammo_knockback = 603; 

	public const int bane_machine = 465; 
	public const int sustain_WIL = 445; 

	public const int mod_ammo = 600; 
	public const int bane_man = 464; 

	public const int bane_animal = 463;

@@ -162,22 +164,22 @@ public class ENC

cs

	public const int sustain_MAG = 446;

	public const int sustain_WIL = 445; 
	public const int bane_god = 466; 

	public const int sustain_LER = 444;

	public const int sustain_PER = 443;

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

FACTION

@@ -12,31 +12,29 @@ public class FACTION

cs

	public const int bfSnow = 3602;

	public const int bfHill = 3603; 

	public const int bfFertile = 3700; 
	public const int fConstruction = 2003; 

	public const int bfSea = 3605; 
	public const int bfBeach = 3604; 

	public const int fRation = 2207;

	public const int fEducation = 2116; 
	public const int bfSea = 3605; 

	public const int bfFertile = 3700; 

	public const int bfGeyser = 3701;

	public const int bfBeach = 3604; 
	public const int bfHill = 3603; 

	public const int fAttraction = 2206;

	public const int fPromo = 2202; 
	public const int fElec = 2201; 

	public const int fFood = 2204;

	public const int fMoral = 2203;

	public const int fConstruction = 2003; 

	public const int fElec = 2201; 
	public const int fPromo = 2202; 

	public const int fSoil = 2200;

@@ -44,11 +42,13 @@ public class FACTION

cs

	public const int fTaxEvasion = 2119;

	public const int fAdmin = 2115; 
	public const int fLuck = 2118; 

	public const int fLoyal = 2117;

	public const int fLuck = 2118; 
	public const int fAdmin = 2115; 

	public const int fEducation = 2116; 

	public const int bfRuin = 3702;

@@ -56,11 +56,11 @@ public class FACTION

cs

	public const int bfTranquil = 3703;

	public const int bfMonster = 3707; 
	public const int bfBasin = 3709; 

	public const int bfHunt = 3705;

	public const int actBuildInspect = 4006; 
	public const int bfVolcano = 3704; 

	public const int actBuildRecipe = 4005;

@@ -72,7 +72,7 @@ public class FACTION

cs

	public const int actBuildMine = 4001;

	public const int bfVolcano = 3704; 
	public const int actBuildCut = 4000; 

	public const int bfStart = 3900;

@@ -82,40 +82,40 @@ public class FACTION

cs

	public const int bfGum = 3803;

	public const int actBuildCut = 4000; 
	public const int actBuildInspect = 4006; 

	public const int bfMushroom = 3801;

	public const int bfSilica = 3802; 
	public const int bfCoal = 3800; 

	public const int bfFreshAir = 3708; 
	public const int bfLandmark5 = 3784; 

	public const int bfBasin = 3709; 
	public const int bfLandmark4 = 3783; 

	public const int bfBreed = 3710; 
	public const int bfLandmark3 = 3782; 

	public const int bfLandmark1 = 3780; 
	public const int bfLandmark2 = 3781; 

	public const int bfFish = 3706; 
	public const int bfLandmark1 = 3780; 

	public const int bfLandmark3 = 3782; 
	public const int bfBreed = 3710; 

	public const int bfLandmark4 = 3783; 
	public const int bfFreshAir = 3708; 

	public const int bfLandmark5 = 3784; 
	public const int bfMonster = 3707; 

	public const int bfCoal = 3800; 
	public const int bfFish = 3706; 

	public const int bfLandmark2 = 3781; 
	public const int bfSilica = 3802; 

	public static readonly int[] IDS = new int[52]
	{
		3500, 3600, 3601, 3602, 3603, 3700, 3605, 2207, 2116, 3701, 
		3604, 2206, 2202, 2204, 2203, 2003, 2201, 2200, 2120, 2119, 
		2115, 2117, 2118, 3702, 2205, 3703, 3707, 3705, 4006, 4005, 
		4004, 4003, 4002, 4001, 3704, 3900, 3805, 3804, 3803, 4000, 
		3801, 3802, 3708, 3709, 3710, 3780, 3706, 3782, 3783, 3784, 
		3800, 3781
		3500, 3600, 3601, 3602, 2003, 3604, 2207, 3605, 3700, 3701, 
		3603, 2206, 2201, 2204, 2203, 2202, 2200, 2120, 2119, 2118, 
		2117, 2115, 2116, 3702, 2205, 3703, 3709, 3705, 3704, 4005, 
		4004, 4003, 4002, 4001, 4000, 3900, 3805, 3804, 3803, 4006, 
		3801, 3800, 3784, 3783, 3782, 3781, 3780, 3710, 3708, 3707, 
		3706, 3802
	};
}
public class Faction : EClass

FEAT

@@ -3,27 +3,27 @@

cs

public class FEAT
{
	public const int featLuck = 1628; 
	public const int featSTR = 1620; 

	public const int featCHA = 1627; 
	public const int featDEX = 1621; 

	public const int featWIL = 1626; 
	public const int featEND = 1622; 

	public const int featMAG = 1625; 
	public const int featLuck = 1628; 

	public const int featLER = 1624;

	public const int featPER = 1623; 
	public const int featMAG = 1625; 

	public const int featEND = 1622; 
	public const int featWIL = 1626; 

	public const int featDEX = 1621; 
	public const int featCHA = 1627; 

	public const int featSTR = 1620; 
	public const int featPER = 1623; 

	public const int featStamina = 1612;

	public const int featLuckyCat = 1412; 
	public const int featMilitant = 1419; 

	public const int featLife = 1610;

@@ -31,8 +31,6 @@ public class FEAT

cs

	public const int featExecutioner = 1420;

	public const int featMilitant = 1419; 

	public const int featSwordsage = 1418;

	public const int featWitch = 1417;

@@ -51,13 +49,13 @@ public class FEAT

cs

	public const int featHardy = 1630;

	public const int featParty = 1645; 
	public const int featLonelySoul = 1646; 

	public const int featEvade = 1632;

	public const int featEarthStrength = 1411; 
	public const int featLuckyCat = 1412; 

	public const int featChef = 1658; 
	public const int featManaCost = 1657; 

	public const int featScavenger = 1656;

@@ -79,7 +77,7 @@ public class FEAT

cs

	public const int featRapidMagic = 1648;

	public const int featLonelySoul = 1646; 
	public const int featParty = 1645; 

	public const int featBodyParts = 1644;

@@ -101,11 +99,11 @@ public class FEAT

cs

	public const int featSummoner = 1647;

	public const int featReboot = 1410; 
	public const int featEarthStrength = 1411; 

	public const int featManaCost = 1657; 
	public const int featChef = 1658; 

	public const int featPaladin2 = 1408; 
	public const int featBoost = 1409; 

	public const int featLoyal = 1225;

@@ -123,7 +121,7 @@ public class FEAT

cs

	public const int featBaby = 1232;

	public const int featHeavyEater = 1234; 
	public const int featCosmicHorror = 1233; 

	public const int featLightEater = 1235;

@@ -157,7 +155,7 @@ public class FEAT

cs

	public const int featSpike = 1221;

	public const int featBoost = 1409; 
	public const int featReboot = 1410; 

	public const int featSlowFood = 1200;

@@ -205,44 +203,46 @@ public class FEAT

cs

	public const int featGod_oblivion1 = 1340;

	public const int featCosmicHorror = 1233; 

	public const int featWizard = 1402; 

	public const int featGod_trickery1 = 1345; 
	public const int featHeavyEater = 1234; 

	public const int featGod_moonshadow1 = 1350;

	public const int featGod_strife1 = 1355; 
	public const int featGod_trickery1 = 1345; 

	public const int featWarrior = 1400;

	public const int featThief = 1401;

	public const int featWizard = 1402; 

	public const int featFarmer = 1403;

	public const int featArcher = 1404; 
	public const int featPianist = 1405; 

	public const int featTourist = 1406;

	public const int featPianist = 1405; 

	public const int featPaladin = 1407;

	public const int featArcher = 1404; 

	public const int featPaladin2 = 1408; 

	public const int featGod_strife1 = 1355; 

	public static readonly int[] IDS = new int[113]
	{
		1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1612, 
		1412, 1610, 1421, 1420, 1419, 1418, 1417, 1416, 1415, 1414, 
		1413, 1629, 1611, 1630, 1645, 1632, 1411, 1658, 1656, 1655, 
		1654, 1653, 1652, 1651, 1650, 1649, 1631, 1648, 1646, 1644, 
		1643, 1642, 1641, 1640, 1636, 1635, 1634, 1633, 1647, 1410, 
		1657, 1408, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 
		1234, 1235, 1236, 1237, 1238, 1239, 1300, 1305, 1310, 1315, 
		1320, 1325, 1330, 1224, 1223, 1222, 1221, 1409, 1200, 1201, 
		1202, 1203, 1204, 1205, 1206, 1207, 1208, 1335, 1209, 1211, 
		1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1210, 
		1340, 1233, 1402, 1345, 1350, 1355, 1400, 1401, 1403, 1404, 
		1406, 1405, 1407
		1620, 1621, 1622, 1628, 1624, 1625, 1626, 1627, 1623, 1612, 
		1419, 1610, 1421, 1420, 1418, 1417, 1416, 1415, 1414, 1413, 
		1629, 1611, 1630, 1646, 1632, 1412, 1657, 1656, 1655, 1654, 
		1653, 1652, 1651, 1650, 1649, 1631, 1648, 1645, 1644, 1643, 
		1642, 1641, 1640, 1636, 1635, 1634, 1633, 1647, 1411, 1658, 
		1409, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 
		1235, 1236, 1237, 1238, 1239, 1300, 1305, 1310, 1315, 1320, 
		1325, 1330, 1224, 1223, 1222, 1221, 1410, 1200, 1201, 1202, 
		1203, 1204, 1205, 1206, 1207, 1208, 1335, 1209, 1211, 1212, 
		1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1210, 1340, 
		1234, 1350, 1345, 1400, 1401, 1402, 1403, 1405, 1406, 1407, 
		1404, 1408, 1355
	};
}
public class Feat : Element

FOOD

@@ -1,6 +1,6 @@

cs
public class FOOD
{
	public const int food_poison = 702; 
	public const int food_cat = 701; 

	public const int food_love = 703;

@@ -14,9 +14,9 @@ public class FOOD

cs

	public const int food_god = 758;

	public const int food_cat = 701; 
	public const int food_poison = 702; 

	public const int food_CHA = 700;

	public static readonly int[] IDS = new int[9] { 702, 703, 704, 705, 706, 757, 758, 701, 700 }; 
	public static readonly int[] IDS = new int[9] { 701, 703, 704, 705, 706, 757, 758, 702, 700 }; 
}

HotbarManager

@@ -176,12 +176,14 @@ public void ResetHotbar(int id)

cs
		break;
	}
	case 4:
	{ 
		hotbar = SetHobar(4, 9);
		if (!EClass.core.IsGameStarted)
		{
			return;
		}
		if (EClass.debug.godBuild || EClass.Branch != null) 
		FactionBranch factionBranch = ((EClass._zone is Zone_Tent) ? EClass.pc.homeBranch : EClass.Branch); 
		if (EClass.debug.godBuild || factionBranch != null) 
		{
			hotbar.SetItem(new HotItemActionMode
			{

@@ -191,7 +193,7 @@ public void ResetHotbar(int id)

cs
			{
				id = "FlagCell"
			});
			if (EClass.debug.godBuild || EClass.Branch.elements.Has(4006)) 
			if (EClass.debug.godBuild || factionBranch.elements.Has(4006)) 
			{
				hotbar.SetItem(new HotItemActionMode
				{

@@ -205,7 +207,7 @@ public void ResetHotbar(int id)

cs
					id = "EditMarker"
				});
			}
			if (EClass.debug.godBuild || EClass.Branch.elements.Has(4005)) 
			if (EClass.debug.godBuild || factionBranch.elements.Has(4005)) 
			{
				hotbar.SetItem(new HotItemActionMode
				{

@@ -222,6 +224,7 @@ public void ResetHotbar(int id)

cs
			}
		}
		break;
	} 
	case 5:
		hotbar = SetHobar(5, 9);
		hotbar.SetItem(new HotItemLayer

LayerInventory

@@ -580,6 +580,11 @@ public static LayerInventory CreateContainer(Card owner, Card container)

cs
		}
		layerInventory.windows[0].saveData = container.c_windowSaveData;
		ELayer.ui.AddLayer(layerInventory);
		if (container.id == "barrel") 
		{ 
			ELayer.player.forceTalk = true; 
			ELayer.pc.party.members.RandomItem().Talk("barrel"); 
		} 
		return layerInventory;
	}

MUTATION

@@ -1,34 +1,36 @@

cs
public class MUTATION
{
	public const int mutationDex = 1514; 
	public const int mutationRegenN = 1517; 

	public const int mutationRegen = 1516;

	public const int mutationDexN = 1515;

	public const int etherPoisonHand = 1565; 
	public const int mutationSkin = 1510; 

	public const int mutationEye = 1512; 
	public const int mutationEyeN = 1513; 

	public const int mutationSkinN = 1511;

	public const int mutationRegenN = 1517; 
	public const int mutationSpeed = 1518; 

	public const int mutationEyeN = 1513; 
	public const int mutationDex = 1514; 

	public const int mutationSpeed = 1518; 
	public const int mutationSpeedN = 1519; 

	public const int mutationSkin = 1510; 
	public const int mutationEye = 1512; 

	public const int mutationStr = 1520; 
	public const int mutationStrN = 1521; 

	public const int etherPoisonHand = 1565; 

	public const int etherManaBattery = 1564;

	public const int etherProvoke = 1563;

	public const int etherArmor = 1562; 
	public const int mutationStr = 1520; 

	public const int mutationSpeedN = 1519; 
	public const int etherStupid = 1561; 

	public const int etherWeak = 1560;

@@ -46,27 +48,21 @@ public class MUTATION

cs

	public const int etherEye = 1553;

	public const int etherFeet = 1552; 

	public const int etherStupid = 1561; 

	public const int etherUgly = 1551; 

	public const int mutationStrN = 1521; 
	public const int etherArmor = 1562; 

	public const int mutationChaN = 1523;

	public const int mutationCha = 1522; 

	public const int mutationBrain = 1524;

	public const int mutationBrainN = 1525;

	public const int mutationCold = 1526; 

	public const int mutationCha = 1522; 
	public const int mutationColdN = 1527; 

	public const int mutationLightning = 1528;

	public const int mutationLightningN = 1529; 
	public const int mutationCold = 1526; 

	public const int mutationBody = 1530;

@@ -74,14 +70,18 @@ public class MUTATION

cs

	public const int etherGravity = 1550;

	public const int mutationColdN = 1527; 
	public const int etherUgly = 1551; 

	public const int mutationLightningN = 1529; 

	public const int etherFeet = 1552; 

	public static readonly int[] IDS = new int[38]
	{
		1514, 1516, 1515, 1565, 1512, 1511, 1517, 1513, 1518, 1510, 
		1520, 1564, 1563, 1562, 1519, 1560, 1559, 1558, 1557, 1556, 
		1555, 1554, 1553, 1552, 1561, 1551, 1521, 1523, 1524, 1525, 
		1526, 1522, 1528, 1529, 1530, 1531, 1550, 1527
		1517, 1516, 1515, 1510, 1513, 1511, 1518, 1514, 1519, 1512, 
		1521, 1565, 1564, 1563, 1520, 1561, 1560, 1559, 1558, 1557, 
		1556, 1555, 1554, 1553, 1562, 1523, 1522, 1524, 1525, 1527, 
		1528, 1526, 1530, 1531, 1550, 1551, 1529, 1552
	};
}
public class Mutation : Feat

NotificationBuff

@@ -24,6 +24,7 @@ public override void OnRefresh()

cs
		}
		text = condition.GetText() + (EClass.debug.showExtra ? (" " + condition.value) : "");
		item.textDuration.SetText(condition.TextDuration);
		item.textDuration.SetActive(condition.HasDuration); 
	}

	public override void OnInstantiate()

POLICY

@@ -3,27 +3,27 @@

cs

public class POLICY
{
	public const int store_premium = 2817; 
	public const int suite_room = 2813; 

	public const int home_discount = 2800; 
	public const int store_ripoff = 2816; 

	public const int open_business = 2810; 
	public const int platinum_ticket = 2815; 

	public const int tourist_safety = 2811; 
	public const int mass_exhibition = 2814; 

	public const int bed_quality = 2812; 
	public const int home_discount = 2800; 

	public const int suite_room = 2813; 
	public const int tourist_safety = 2811; 

	public const int mass_exhibition = 2814; 
	public const int open_business = 2810; 

	public const int platinum_ticket = 2815; 
	public const int store_premium = 2817; 

	public const int store_ripoff = 2816; 
	public const int bed_quality = 2812; 

	public const int license_food = 2818;

	public const int license_stolen = 2824; 
	public const int milk_fan = 2825; 

	public const int license_general = 2820;

@@ -33,9 +33,7 @@ public class POLICY

cs

	public const int legendary_exhibition = 2823;

	public const int livestock_priv = 2715; 

	public const int milk_fan = 2825; 
	public const int license_stolen = 2824; 

	public const int egg_fan = 2826;

@@ -45,11 +43,15 @@ public class POLICY

cs

	public const int license_furniture = 2819;

	public const int forcePanty = 2712; 
	public const int livestock_priv = 2715; 

	public const int vaccination = 2509; 
	public const int self_sufficient = 2511; 

	public const int noMother = 2710; 
	public const int incomeTransfer = 2711; 

	public const int wealth_tax = 2500; 

	public const int faith_tax = 2501; 

	public const int food_for_people = 2502;

@@ -59,60 +61,58 @@ public class POLICY

cs

	public const int legal_drug = 2505;

	public const int incomeTransfer = 2711; 

	public const int faith_tax = 2501; 

	public const int human_right = 2506;

	public const int inquisition = 2507; 
	public const int forcePanty = 2712; 

	public const int nocturnal_life = 2508;

	public const int ban_radio = 2510; 
	public const int vaccination = 2509; 

	public const int self_sufficient = 2511; 
	public const int ban_radio = 2510; 

	public const int resident_tax = 2512;

	public const int resident_wanted = 2513;

	public const int wealth_tax = 2500; 
	public const int inquisition = 2507; 

	public const int stop_growth = 2515;

	public const int speed_growth = 2516; 
	public const int border_watch = 2704; 

	public const int energy_conservation = 2700; 
	public const int auto_farm = 2707; 

	public const int noAnimal = 2709; 
	public const int taxfree = 2514; 

	public const int trash_sort = 2701; 
	public const int noDM = 2708; 

	public const int trash_no = 2702; 
	public const int noAnimal = 2709; 

	public const int noMother = 2710; 

	public const int weed_no = 2703;

	public const int noDM = 2708; 
	public const int taxTransfer = 2705; 

	public const int auto_farm = 2707; 
	public const int demon_invocation = 2706; 

	public const int taxfree = 2514; 
	public const int speed_growth = 2516; 

	public const int taxTransfer = 2705; 
	public const int energy_conservation = 2700; 

	public const int border_watch = 2704; 
	public const int trash_sort = 2701; 

	public const int demon_invocation = 2706; 
	public const int trash_no = 2702; 

	public static readonly int[] IDS = new int[51]
	{
		2817, 2800, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2818, 
		2824, 2820, 2821, 2822, 2823, 2715, 2825, 2826, 2827, 2828, 
		2819, 2712, 2509, 2710, 2502, 2503, 2504, 2505, 2711, 2501, 
		2506, 2507, 2508, 2510, 2511, 2512, 2513, 2500, 2515, 2516, 
		2700, 2709, 2701, 2702, 2703, 2708, 2707, 2514, 2705, 2704, 
		2706
		2813, 2816, 2815, 2814, 2800, 2811, 2810, 2817, 2812, 2818, 
		2825, 2820, 2821, 2822, 2823, 2824, 2826, 2827, 2828, 2819, 
		2715, 2511, 2711, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 
		2712, 2508, 2509, 2510, 2512, 2513, 2507, 2515, 2704, 2707, 
		2514, 2708, 2709, 2710, 2703, 2705, 2706, 2516, 2700, 2701, 
		2702
	};
}
public class Policy : EClass

SKILL

@@ -1,138 +1,138 @@

cs
public class SKILL
{
	public const int shield = 123; 
	public const int digging = 230; 

	public const int armorHeavy = 122; 
	public const int climbing = 242; 

	public const int armorLight = 120; 
	public const int music = 241; 

	public const int fireproof = 50; 
	public const int acidproof = 51; 

	public const int weaponScythe = 110; 
	public const int fireproof = 50; 

	public const int weaponCrossbow = 109;

	public const int twohand = 130; 

	public const int acidproof = 51; 

	public const int PDR = 55; 
	public const int travel = 240; 

	public const int EDR = 56; 
	public const int weaponScythe = 110; 

	public const int weaponBlunt = 111;

	public const int twowield = 131; 

	public const int strategy = 135; 

	public const int marksman = 133; 

	public const int climbing = 242; 

	public const int music = 241; 
	public const int armorLight = 120; 

	public const int travel = 240; 
	public const int armorHeavy = 122; 

	public const int taming = 237; 
	public const int shield = 123; 

	public const int milking = 235; 
	public const int twohand = 130; 

	public const int digging = 230; 
	public const int twowield = 131; 

	public const int parasite = 227;

	public const int tactics = 132; 

	public const int riding = 226;

	public const int lumberjack = 225; 

	public const int mining = 220; 

	public const int spotting = 210;

	public const int weightlifting = 207;

	public const int swimming = 200; 
	public const int milking = 235; 

	public const int stealth = 152; 
	public const int swimming = 200; 

	public const int evasionPlus = 151;

	public const int evasion = 150;

	public const int taming = 237; 

	public const int eyeofmind = 134;

	public const int mining = 220; 
	public const int marksman = 133; 

	public const int lumberjack = 225; 
	public const int tactics = 132; 

	public const int martial = 100; 
	public const int stealth = 152; 

	public const int strategy = 135; 

	public const int weaponDagger = 107;

	public const int fishing = 245; 
	public const int weaponPolearm = 106; 

	public const int evasionPerfect = 57; 
	public const int END = 71; 

	public const int life = 60; 
	public const int STR = 70; 

	public const int mana = 61; 
	public const int FPV = 68; 

	public const int vigor = 62; 
	public const int DMG = 67; 

	public const int DV = 64; 
	public const int HIT = 66; 

	public const int PV = 65;

	public const int HIT = 66; 
	public const int DEX = 72; 

	public const int DMG = 67; 
	public const int DV = 64; 

	public const int FPV = 68; 
	public const int mana = 61; 

	public const int STR = 70; 
	public const int life = 60; 

	public const int END = 71; 
	public const int evasionPerfect = 57; 

	public const int DEX = 72; 
	public const int EDR = 56; 

	public const int PER = 73; 
	public const int PDR = 55; 

	public const int fishing = 245; 

	public const int vigor = 62; 

	public const int throwing = 108;

	public const int LER = 74; 
	public const int PER = 73; 

	public const int MAG = 76; 
	public const int WIL = 75; 

	public const int CHA = 77; 
	public const int weaponGun = 105; 

	public const int LUC = 78; 
	public const int weaponBow = 104; 

	public const int SPD = 79; 
	public const int weaponStaff = 103; 

	public const int INT = 80; 
	public const int weaponAxe = 102; 

	public const int critical = 90; 
	public const int weaponSword = 101; 

	public const int vopal = 91; 
	public const int antiMagic = 93; 

	public const int LER = 74; 

	public const int penetration = 92;

	public const int antiMagic = 93; 
	public const int critical = 90; 

	public const int weaponAxe = 102; 
	public const int INT = 80; 

	public const int weaponStaff = 103; 
	public const int SPD = 79; 

	public const int weaponBow = 104; 
	public const int LUC = 78; 

	public const int weaponGun = 105; 
	public const int CHA = 77; 

	public const int weaponPolearm = 106; 
	public const int MAG = 76; 

	public const int WIL = 75; 
	public const int vopal = 91; 

	public const int gathering = 250;

	public const int weaponSword = 101; 
	public const int martial = 100; 

	public const int blacksmith = 256;

@@ -204,8 +204,6 @@ public class SKILL

cs

	public const int eleLightning = 912;

	public const int eleDarkness = 913; 

	public const int alchemy = 257;

	public const int sculpture = 258;

@@ -224,7 +222,9 @@ public class SKILL

cs

	public const int farming = 286;

	public const int cooking = 287; 
	public const int eleDarkness = 913; 

	public const int building = 288; 

	public const int appraising = 289;

@@ -234,54 +234,54 @@ public class SKILL

cs

	public const int investing = 292;

	public const int building = 288; 
	public const int cooking = 287; 

	public const int regeneration = 300;

	public const int eleFire = 910;

	public const int env = 313; 

	public const int disarmTrap = 293;

	public const int fun = 312; 
	public const int env = 313; 

	public const int bladder = 311; 
	public const int fun = 312; 

	public const int hygine = 310;

	public const int memorization = 307;

	public const int bladder = 311; 

	public const int magicDevice = 305;

	public const int casting = 304;

	public const int manaCapacity = 303;

	public const int eleCold = 911; 

	public const int controlmana = 302;

	public const int meditation = 301;

	public const int faith = 306;

	public const int eleCold = 911; 

	public static readonly int[] IDS = new int[133]
	{
		123, 122, 120, 50, 110, 109, 130, 51, 55, 56, 
		111, 131, 135, 133, 242, 241, 240, 237, 235, 230, 
		227, 132, 226, 210, 207, 200, 152, 151, 150, 134, 
		220, 225, 100, 107, 245, 57, 60, 61, 62, 64, 
		65, 66, 67, 68, 70, 71, 72, 73, 108, 74, 
		76, 77, 78, 79, 80, 90, 91, 92, 93, 102, 
		103, 104, 105, 106, 75, 250, 101, 256, 916, 917, 
		230, 242, 241, 51, 50, 109, 240, 110, 111, 120, 
		122, 123, 130, 131, 227, 226, 225, 220, 210, 207, 
		235, 200, 151, 150, 237, 134, 133, 132, 152, 135, 
		107, 106, 71, 70, 68, 67, 66, 65, 72, 64, 
		61, 60, 57, 56, 55, 245, 62, 108, 73, 75, 
		105, 104, 103, 102, 101, 93, 74, 92, 90, 80, 
		79, 78, 77, 76, 91, 250, 100, 256, 916, 917, 
		918, 919, 920, 921, 922, 923, 924, 925, 926, 950,
		951, 952, 915, 953, 955, 956, 957, 958, 959, 960,
		961, 962, 963, 964, 965, 970, 972, 255, 954, 914,
		971, 912, 913, 257, 258, 259, 260, 261, 280, 281, 
		285, 286, 287, 289, 290, 291, 292, 288, 300, 910, 
		313, 293, 312, 311, 310, 307, 305, 304, 303, 911, 
		302, 301, 306
		971, 912, 257, 258, 259, 260, 261, 280, 281, 285, 
		286, 913, 288, 289, 290, 291, 292, 287, 300, 910, 
		293, 313, 312, 310, 307, 311, 305, 304, 303, 302, 
		301, 306, 911
	};
}
public class Skill : Element

SLOT

@@ -1,40 +1,40 @@

cs
public class SLOT
{
	public const int leg = 38; 

	public const int toolbelt = 44; 

	public const int tool = 40; 

	public const int back = 33;

	public const int arm = 34; 
	public const int tool = 40; 

	public const int ammo = 42; 
	public const int torso = 32; 

	public const int lightsource = 45;

	public const int neck = 31; 
	public const int finger = 36; 

	public const int torso = 32; 
	public const int arm = 34; 

	public const int leg = 38; 

	public const int hand = 35;

	public const int waist = 37; 

	public const int foot = 39;

	public const int finger = 36; 
	public const int neck = 31; 

	public const int toolbelt = 44; 

	public const int range = 41; 

	public const int token = 43;

	public const int head = 30;

	public const int waist = 37; 

	public const int range = 41; 
	public const int ammo = 42; 

	public static readonly int[] IDS = new int[16]
	{
		38, 44, 40, 33, 34, 42, 45, 31, 32, 35, 
		39, 36, 43, 30, 37, 41
		33, 40, 32, 45, 36, 34, 38, 35, 37, 39, 
		31, 44, 41, 43, 30, 42
	};
}

SPELL

@@ -1,69 +1,57 @@

cs
public class SPELL
{
	public const int funnel_Nerve = 50608; 

	public const int hand_Sound = 50407; 

	public const int arrow_Sound = 50507; 

	public const int funnel_Sound = 50607; 

	public const int miasma_Sound = 50707; 

	public const int arrow_Holy = 50509; 
	public const int hand_Poison = 50405; 

	public const int bolt_Holy = 50309; 
	public const int arrow_Mind = 50504; 

	public const int ball_Holy = 50109; 
	public const int weapon_Sound = 50807; 

	public const int puddle_Sound = 50907;

	public const int ball_Nerve = 50108;

	public const int hand_Mind = 50404; 

	public const int bolt_Nerve = 50308;

	public const int hand_Nerve = 50408;

	public const int puddle_Nerve = 50908; 

	public const int weapon_Nerve = 50808; 

	public const int miasma_Nerve = 50708; 

	public const int arrow_Nerve = 50508;

	public const int weapon_Sound = 50807; 
	public const int funnel_Nerve = 50608; 

	public const int hand_Holy = 50409; 
	public const int bolt_Mind = 50304; 

	public const int funnel_Poison = 50605; 
	public const int miasma_Nerve = 50708; 

	public const int ball_Sound = 50107; 
	public const int weapon_Nerve = 50808; 

	public const int funnel_Holy = 50609; 
	public const int puddle_Nerve = 50908; 

	public const int bolt_Mind = 50304; 
	public const int ball_Holy = 50109; 

	public const int hand_Mind = 50404; 
	public const int bolt_Holy = 50309; 

	public const int arrow_Mind = 50504; 
	public const int hand_Holy = 50409; 

	public const int funnel_Mind = 50604; 
	public const int arrow_Holy = 50509; 

	public const int miasma_Mind = 50704; 
	public const int funnel_Holy = 50609; 

	public const int weapon_Mind = 50804; 
	public const int miasma_Sound = 50707; 

	public const int puddle_Mind = 50904; 
	public const int funnel_Sound = 50607; 

	public const int ball_Poison = 50105; 
	public const int hand_Sound = 50407; 

	public const int bolt_Poison = 50305;

	public const int hand_Poison = 50405; 
	public const int ball_Poison = 50105; 

	public const int arrow_Poison = 50505;

	public const int funnel_Poison = 50605; 

	public const int miasma_Poison = 50705;

	public const int weapon_Poison = 50805;

@@ -72,6 +60,12 @@ public class SPELL

cs

	public const int ball_Nether = 50106;

	public const int puddle_Mind = 50904; 

	public const int weapon_Mind = 50804; 

	public const int arrow_Sound = 50507; 

	public const int bolt_Nether = 50306;

	public const int hand_Nether = 50406;

@@ -86,15 +80,23 @@ public class SPELL

cs

	public const int puddle_Nether = 50906;

	public const int funnel_Mind = 50604; 

	public const int ball_Sound = 50107; 

	public const int bolt_Sound = 50307;

	public const int miasma_Mind = 50704; 

	public const int miasma_Holy = 50709;

	public const int weapon_Acid = 50813; 
	public const int miasma_Acid = 50713; 

	public const int puddle_Holy = 50909;

	public const int miasma_Acid = 50713; 
	public const int ball_Mind = 50104; 

	public const int weapon_Acid = 50813; 

	public const int puddle_Acid = 50913;

@@ -116,10 +118,10 @@ public class SPELL

cs

	public const int ball_Impact = 50115;

	public const int funnel_Acid = 50613; 

	public const int bolt_Impact = 50315;

	public const int hand_Impact = 50415; 

	public const int arrow_Impact = 50515;

	public const int funnel_Impact = 50615;

@@ -142,11 +144,11 @@ public class SPELL

cs

	public const int miasma_Void = 50716;

	public const int hand_Impact = 50415; 
	public const int funnel_Acid = 50613; 

	public const int arrow_Acid = 50513; 
	public const int weapon_Holy = 50809; 

	public const int hand_Acid = 50413; 
	public const int arrow_Acid = 50513; 

	public const int bolt_Acid = 50313;

@@ -200,15 +202,13 @@ public class SPELL

cs

	public const int ball_Acid = 50113;

	public const int weapon_Holy = 50809; 

	public const int ball_Mind = 50104; 
	public const int hand_Acid = 50413; 

	public const int bolt_Fire = 50300; 
	public const int puddle_Darkness = 50903; 

	public const int weapon_Darkness = 50803; 
	public const int weapon_Void = 50816; 

	public const int SpMutation = 8380; 
	public const int miasma_Darkness = 50703; 

	public const int SpWish = 8390;

@@ -254,17 +254,19 @@ public class SPELL

cs

	public const int SpSpeedUp = 8510;

	public const int SpRebirth = 8550; 

	public const int SpSilence = 8700;

	public const int SpWeakness = 8702;

	public const int SpLevitate = 8300; 
	public const int SpMutation = 8380; 

	public const int SpWeakResEle = 8704; 
	public const int SpLevitate = 8300; 

	public const int SpReconstruction = 8288;

	public const int SpChangeMaterial = 8285; 
	public const int SpChangeMaterialG = 8286; 

	public const int ball_ = 7001;

@@ -290,9 +292,9 @@ public class SPELL

cs

	public const int SpReturn = 8220;

	public const int SpEvac = 8221; 
	public const int SpWeakResEle = 8704; 

	public const int SpIdentify = 8230; 
	public const int SpEvac = 8221; 

	public const int SpIdentifyG = 8232;

@@ -316,13 +318,17 @@ public class SPELL

cs

	public const int SpChangeMaterialLesser = 8284;

	public const int SpChangeMaterialG = 8286; 
	public const int SpChangeMaterial = 8285; 

	public const int SpBane = 8706; 
	public const int SpIdentify = 8230; 

	public const int weapon_Darkness = 50803; 

	public const int SpNightmare = 8705; 

	public const int SpGravity = 8708;

	public const int SpSpeedDown = 8710; 
	public const int funnel_Fire = 50600; 

	public const int miasma_Fire = 50700;

@@ -372,15 +378,15 @@ public class SPELL

cs

	public const int funnel_Darkness = 50603;

	public const int miasma_Darkness = 50703; 

	public const int funnel_Fire = 50600; 

	public const int arrow_Fire = 50500;

	public const int hand_Fire = 50400;

	public const int weapon_Void = 50816; 
	public const int bolt_Fire = 50300; 

	public const int ball_Fire = 50100; 

	public const int SpSpeedDown = 8710; 

	public const int SpTelepathy = 8770;

@@ -404,11 +410,11 @@ public class SPELL

cs

	public const int SpSummonFire = 9002;

	public const int SpSummonTentacle = 9003; 
	public const int SpBane = 8706; 

	public const int puddle_Darkness = 50903; 
	public const int SpSummonTentacle = 9003; 

	public const int SpSummonMonster = 9004; 
	public const int SpSummonPawn = 9005; 

	public const int SpSummonYeek = 9006;

@@ -432,36 +438,35 @@ public class SPELL

cs

	public const int SpDrawBacker = 9503;

	public const int ball_Fire = 50100; 

	public const int SpSummonPawn = 9005; 
	public const int SpSummonMonster = 9004; 

	public const int puddle_Void = 50916;

	public static readonly int[] IDS = new int[219] 
	public static readonly int[] IDS = new int[221] 
	{
		50608, 50407, 50507, 50607, 50707, 50509, 50309, 50109, 50907, 50108, 
		50308, 50408, 50908, 50808, 50708, 50508, 50807, 50409, 50605, 50107, 
		50609, 50304, 50404, 50504, 50604, 50704, 50804, 50904, 50105, 50305, 
		50405, 50505, 50705, 50805, 50905, 50106, 50306, 50406, 50506, 50606, 
		50706, 50806, 50906, 50307, 50709, 50813, 50909, 50713, 50913, 50114, 
		50314, 50414, 50514, 50614, 50714, 50814, 50914, 50115, 50613, 50315, 
		50515, 50615, 50715, 50815, 50915, 50116, 50316, 50416, 50516, 50616, 
		50716, 50415, 50513, 50413, 50313, 50110, 50310, 50410, 50510, 50610, 
		50710, 50810, 50910, 50111, 50311, 50411, 50511, 50611, 50711, 50811, 
		50911, 50112, 50312, 50412, 50512, 50612, 50712, 50812, 50912, 50113, 
		50809, 50104, 50300, 50803, 8380, 8390, 8400, 8401, 8402, 8403, 
		50405, 50504, 50807, 50907, 50108, 50404, 50308, 50408, 50508, 50608, 
		50304, 50708, 50808, 50908, 50109, 50309, 50409, 50509, 50609, 50707, 
		50607, 50407, 50305, 50105, 50505, 50605, 50705, 50805, 50905, 50106, 
		50904, 50804, 50507, 50306, 50406, 50506, 50606, 50706, 50806, 50906, 
		50604, 50107, 50307, 50704, 50709, 50713, 50909, 50104, 50813, 50913, 
		50114, 50314, 50414, 50514, 50614, 50714, 50814, 50914, 50115, 50315, 
		50415, 50515, 50615, 50715, 50815, 50915, 50116, 50316, 50416, 50516, 
		50616, 50716, 50613, 50809, 50513, 50313, 50110, 50310, 50410, 50510, 
		50610, 50710, 50810, 50910, 50111, 50311, 50411, 50511, 50611, 50711, 
		50811, 50911, 50112, 50312, 50412, 50512, 50612, 50712, 50812, 50912, 
		50113, 50413, 50903, 50816, 50703, 8390, 8400, 8401, 8402, 8403, 
		8404, 8405, 8406, 8430, 8450, 8470, 8471, 8480, 8490, 8491,
		8500, 8501, 8502, 8503, 8504, 8506, 8510, 8700, 8702, 8300, 
		8704, 8288, 8285, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 
		7800, 8200, 8201, 8202, 8220, 8221, 8230, 8232, 8240, 8241, 
		8250, 8251, 8255, 8256, 8260, 8280, 8281, 8284, 8286, 8706, 
		8708, 8710, 50700, 50800, 50900, 50101, 50301, 50401, 50501, 50601, 
		50701, 50801, 50901, 50102, 50302, 50402, 50502, 50602, 50702, 50802, 
		50902, 50103, 50303, 50403, 50503, 50603, 50703, 50600, 50500, 50400, 
		50816, 8770, 8775, 8776, 8780, 8790, 8791, 8800, 8801, 9000, 
		9001, 9002, 9003, 50903, 9004, 9006, 9007, 9050, 9150, 9151, 
		9160, 9200, 9500, 9501, 9502, 9503, 50100, 9005, 50916
		8500, 8501, 8502, 8503, 8504, 8506, 8510, 8550, 8700, 8702, 
		8380, 8300, 8288, 8286, 7001, 7002, 7003, 7004, 7005, 7006, 
		7007, 7800, 8200, 8201, 8202, 8220, 8704, 8221, 8232, 8240, 
		8241, 8250, 8251, 8255, 8256, 8260, 8280, 8281, 8284, 8285, 
		8230, 50803, 8705, 8708, 50600, 50700, 50800, 50900, 50101, 50301, 
		50401, 50501, 50601, 50701, 50801, 50901, 50102, 50302, 50402, 50502, 
		50602, 50702, 50802, 50902, 50103, 50303, 50403, 50503, 50603, 50500, 
		50400, 50300, 50100, 8710, 8770, 8775, 8776, 8780, 8790, 8791, 
		8800, 8801, 9000, 9001, 9002, 8706, 9003, 9005, 9006, 9007, 
		9050, 9150, 9151, 9160, 9200, 9500, 9501, 9502, 9503, 9004, 
		50916
	};
}
public class Spell : Ability

Thing

@@ -1093,6 +1093,10 @@ public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
	{
		AddText("isNoSell", FontColor.Ether);
	}
	if (trait.IsOnlyUsableByPc) 
	{ 
		AddText("isOnlyUsableByPC", FontColor.Ether); 
	} 
	if (base.isStolen)
	{
		AddText("isStolen", FontColor.Ether);

ThingGen

@@ -153,6 +153,13 @@ public static Thing CreateSpellbook(string alias, int num = 1)

cs
		return CreateSpellbook(EClass.sources.elements.alias[alias].id, num);
	}

	public static Thing CreateSkillbook(int ele, int num = 1) 
	{ 
		Thing thing = Create("book_skill").SetNum(num); 
		thing.refVal = ele; 
		return thing; 
	} 

	public static Thing CreateSpellbook(int ele, int num = 1)
	{
		Thing thing = Create("spellbook").SetNum(num);

Trait

@@ -63,6 +63,8 @@ public string[] Params

cs

	public virtual bool IsGround => false;

	public virtual bool IsOnlyUsableByPc => false; 

	public virtual bool InvertHeldSprite => false;

	public virtual bool IsChangeFloorHeight => owner.Pref.Surface;

@@ -284,6 +286,8 @@ public virtual bool CanBeStolen

cs

	public virtual bool CanBeDestroyed => true;

	public virtual bool CanBeSmashedToDeath => false; 

	public virtual bool CanBeHallucinated => true;

	public virtual bool CanBeDropped => true;

@@ -464,6 +468,38 @@ public virtual ToggleType ToggleType

cs
		}
	}

	public virtual string IdSoundToggleOn 
	{ 
		get 
		{ 
			if (Electricity >= 0) 
			{ 
				if (ToggleType != ToggleType.Fire) 
				{ 
					return "switch_on"; 
				} 
				return "torch_lit"; 
			} 
			return "switch_on_electricity"; 
		} 
	} 

	public virtual string IdSoundToggleOff 
	{ 
		get 
		{ 
			if (Electricity >= 0) 
			{ 
				if (ToggleType != ToggleType.Fire) 
				{ 
					return "switch_off"; 
				} 
				return "torch_unlit"; 
			} 
			return "switch_off_electricity"; 
		} 
	} 

	public virtual int ShopLv => Mathf.Max(1, EClass._zone.development / 10 + owner.c_invest + 1);

	public virtual CopyShopType CopyShop => CopyShopType.None;

@@ -1167,28 +1203,20 @@ public virtual void PlayToggleEffect(bool silent)

cs
			if (!silent)
			{
				owner.Say(flag ? "toggle_fire" : "toggle_ele", EClass.pc, owner);
				string id = ((Electricity < 0) ? "switch_on_electricity" : (flag ? "torch_lit" : "switch_on")); 
				if (this is TraitMusicBox) 
				{ 
					id = "switch_on_musicbox"; 
				} 
				owner.PlaySound(id); 
				owner.PlaySound(IdSoundToggleOn); 
			}
			RefreshRenderer();
			owner.RecalculateFOV();
			return; 
		}
		if (!silent) 
		else
		{
			string id2 = ((Electricity < 0) ? "switch_off_electricity" : (flag ? "torch_unlit" : "switch_off")); 
			if (this is TraitMusicBox) 
			if (!silent) 
			{
				id2 = "switch_off_musicbox"; 
				owner.PlaySound(IdSoundToggleOff); 
			}
			owner.PlaySound(id2); 
			RefreshRenderer(); 
			owner.RecalculateFOV(); 
		}
		RefreshRenderer(); 
		owner.RecalculateFOV(); 
	}

	public virtual void OnToggle()

@@ -1484,6 +1512,8 @@ public void OnBarter()

cs
	{
	case ShopType.Plat:
		NoRestock(ThingGen.Create("lucky_coin").SetNum(10));
		NoRestock(ThingGen.CreateSkillbook(6662)); 
		NoRestock(ThingGen.CreateSkillbook(6664)); 
		break;
	case ShopType.Copy:
	{

TraitBookSkill

@@ -9,6 +9,20 @@ public class TraitBookSkill : TraitScroll

cs

	public virtual bool IsPlan => false;

	public override string IdNoRestock => owner.id + "_" + source?.id; 

	public override bool IsOnlyUsableByPc 
	{ 
		get 
		{ 
			if (source != null) 
			{ 
				return source.category == "ability"; 
			} 
			return false; 
		} 
	} 

	public override bool CanRead(Chara c)
	{
		return !c.isBlind;

@@ -84,6 +98,11 @@ public override void OnRead(Chara c)

cs
		owner.Say("skillbook_knownSkill", c, source.GetName());
		return;
	}
	if (IsOnlyUsableByPc && !c.IsPC) 
	{ 
		owner.SayNothingHappans(); 
		return; 
	} 
	owner.Say(IsPlan ? "skillbook_learnPlan" : "skillbook_learn", c, source.GetName());
	if (IsPlan)
	{

+TraitChestOyster

File Created
cs
public class TraitChestOyster : TraitChest
{
	public override int ChanceLock => 100;

	public override void Prespawn(int lv)
	{
		if (EClass.rnd(3) != 0)
		{
			if (EClass.rnd(2) == 0)
			{
				owner.c_lockLv = 0;
			}
		}
		else
		{
			ThingGen.CreateTreasureContent(owner.Thing, lv, TreasureType.RandomChest, clearContent: true);
		}
	}
}

TraitGodStatue

@@ -34,21 +34,31 @@ public override void _OnUse(Chara c)

cs
	{
	case "harvest":
	{
		Thing t2 = ThingGen.Create("book_kumiromi"); 
		EClass.pc.Pick(t2); 
		Thing t = ThingGen.Create("book_kumiromi"); 
		EClass.pc.Pick(t); 
		break;
	}
	case "machine":
	{
		Thing t = owner.things.Find("gene") ?? DNA.GenerateManiGene(owner); 
		EClass.pc.Pick(t); 
		Thing t2 = owner.things.Find("gene") ?? DNA.GenerateManiGene(owner); 
		EClass.pc.Pick(t2); 
		break;
	}
	case "healing":
	{ 
		Msg.Say("jure_hug");
		EClass.player.ModKeyItem("jure_feather");
		Msg.Say("jure_hug2");
		for (int i = 0; i < 5; i++) 
		{ 
			Chara chara = EClass.pc.party.members.RandomItem(); 
			if (!chara.HasCondition<ConRebirth>()) 
			{ 
				chara.AddCondition<ConRebirth>(); 
			} 
		} 
		break;
	} 
	case "luck":
		EClass.player.ModKeyItem((!EClass.player.wellWished && EClass.player.CountKeyItem("well_wish") == 0) ? "well_wish" : "well_enhance");
		break;

TraitMusicBox

@@ -2,6 +2,10 @@ public class TraitMusicBox : TraitJukeBox

cs
{
	public override ToggleType ToggleType => ToggleType.Custom;

	public override string IdSoundToggleOn => "switch_on_musicbox"; 

	public override string IdSoundToggleOff => "switch_off_musicbox"; 

	public override bool CanUseFromInventory => false;

	public override bool OnUse(Chara c)

+TraitSack

File Created
cs
public class TraitSack : Trait
{
	public override bool CanBeSmashedToDeath => true;

	public override bool CanBeAttacked => !EClass._zone.IsPCFactionOrTent;
}

+TraitTerraGlobe

File Created
cs
public class TraitTerraGlobe : TraitItem
{
	public override bool UseExtra => owner.isOn;

	public override bool IsAnimeOn => owner.isOn;

	public override string IdSoundToggleOn => "switch_on_spin";

	public override string IdSoundToggleOff => "switch_off_spin";

	public override ToggleType ToggleType => ToggleType.Custom;

	public override bool CanUseFromInventory => false;

	public override bool OnUse(Chara c)
	{
		Toggle(!owner.isOn);
		return true;
	}
}

+TraitVase

File Created
cs
public class TraitVase : TraitSack
{
}

Zone

@@ -2283,7 +2283,7 @@ public void Generate()

cs
		bp.GenerateMap(this);
	}
	map.SetZone(this);
	if (this is Zone_Field) 
	if (this is Zone_Field zone_Field) 
	{
		if (EClass.rnd(3) == 0)
		{

@@ -2298,6 +2298,19 @@ public void Generate()

cs
				}
			}
		}
		if (zone_Field.IdBiome == "Sand" || zone_Field.IdBiome == "Water") 
		{ 
			int num2 = 1 + EClass.rnd((zone_Field.IdBiome == "water") ? 4 : 2); 
			for (int j = 0; j < num2; j++) 
			{ 
				Point randomSurface2 = EClass._map.bounds.GetRandomSurface(centered: false, walkable: true, allowWater: true); 
				if (!randomSurface2.HasObj) 
				{ 
					Thing t2 = ThingGen.Create("pearl_oyster"); 
					EClass._zone.AddCard(t2, randomSurface2).Install(); 
				} 
			} 
		} 
		if (EClass.rnd(8) == 0)
		{
			SpawnAltar();