Skip to content

EA 23.77 Nightly

January 16, 2025

35 files modified. 2 new files created.

Important Changes

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

ELEMENT (1)

cs
public static int GetResistDamage(int dmg, int v) 
public static int GetResistDamage(int dmg, int v, int power = 0) 

TraitMap (5)

cs
public void Add(Card c) 
cs
public void Remove(Card c) 
cs
public Card GetRandom() 
cs
public Card GetRandom(Func<Trait, bool> func) 
cs
public bool Contains(Card c) 

TraitSet (3)

cs
public void Add(Card c) 
cs
public void Remove(Card c) 
cs
public bool Contains(Card c) 

ABILITY

@@ -4,8 +4,6 @@ public class ABILITY

cs
{
	public const int AI_Drink = 5045;

	public const int TaskMoveInstalled = 5036; 

	public const int ActNoItem = 5037;

	public const int ActThrow = 5038;

@@ -32,11 +30,11 @@ public class ABILITY

cs

	public const int AI_Sleep = 5050;

	public const int TaskBuild = 5035; 

	public const int ActZap = 5051;

	public const int TaskHarvest = 5053; 
	public const int TaskMoveInstalled = 5036; 

	public const int ActBash = 5052; 

	public const int AI_Bladder = 5054;

@@ -64,15 +62,15 @@ public class ABILITY

cs

	public const int ActEscape = 6400;

	public const int ActBash = 5052; 

	public const int ActSuicide = 6410;

	public const int GoalIdle = 5034; 
	public const int TaskHarvest = 5053; 

	public const int AI_Equip = 5032; 
	public const int ActDuplicate = 6420; 

	public const int Melee = 5002; 
	public const int TaskBuild = 5035; 

	public const int ActCancelTask = 5033; 

	public const int Ranged = 5003;

@@ -100,11 +98,11 @@ public class ABILITY

cs

	public const int TaskAttack = 5015;

	public const int ActCancelTask = 5033; 

	public const int TaskTame = 5016;

	public const int TaskPick = 5018; 
	public const int GoalIdle = 5034; 

	public const int TaskTalk = 5017; 

	public const int TaskReadBoard = 5019;

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

cs

	public const int AI_Deconstruct = 5031;

	public const int TaskTalk = 5017; 

	public const int ActRush = 6450; 
	public const int AI_Equip = 5032; 

	public const int ActDuplicate = 6420; 
	public const int TaskPick = 5018; 

	public const int breathe_Darkness = 50203; 
	public const int ActCrabBreathe = 6500; 

	public const int ActJureHeal = 6901; 
	public const int ActRush = 6450; 

	public const int ActLulwyTrick = 6902; 
	public const int breathe_Mind = 50204; 

	public const int ActKizuamiTrick = 6903;

@@ -156,11 +152,11 @@ public class ABILITY

cs

	public const int breathe_Lightning = 50202;

	public const int ActCrabBreathe = 6500; 
	public const int breathe_Darkness = 50203; 

	public const int StManaCost = 6720; 
	public const int ActCurse = 6600; 

	public const int breathe_Mind = 50204; 
	public const int breathe_Poison = 50205; 

	public const int breathe_Nether = 50206;

@@ -180,21 +176,19 @@ public class ABILITY

cs

	public const int breathe_Cut = 50214;

	public const int breathe_Poison = 50205; 

	public const int ActWait = 5000; 
	public const int breathe_Impact = 50215; 

	public const int ActManaAbsorb = 6900; 
	public const int ActMelee = 5001; 

	public const int ActThrowPotion = 6661; 
	public const int ActWait = 5000; 

	public const int ActCurse = 6600; 
	public const int ActLulwyTrick = 6902; 

	public const int ActEntangle = 6601; 
	public const int Melee = 5002; 

	public const int ActDraw = 6602; 
	public const int ActJureHeal = 6901; 

	public const int ActMelee = 5001; 
	public const int ActGazeMutation = 6622; 

	public const int ActNTR = 6603;

@@ -204,17 +198,17 @@ public class ABILITY

cs

	public const int ActTouchSleep = 6612;

	public const int StTaunt = 6700; 
	public const int ActGazeDim = 6620; 

	public const int ActGazeInsane = 6621;

	public const int ActGazeDim = 6620; 
	public const int ActManaAbsorb = 6900; 

	public const int ActGazeMana = 6623;

	public const int ActDrainBlood = 6626; 
	public const int ActDraw = 6602; 

	public const int ActInsult = 6630; 
	public const int ActDrainBlood = 6626; 

	public const int ActScream = 6631;

@@ -228,22 +222,30 @@ public class ABILITY

cs

	public const int ActDropMine = 6660;

	public const int ActGazeMutation = 6622; 
	public const int ActThrowPotion = 6661; 

	public const int StTaunt = 6700; 

	public const int StManaCost = 6720; 

	public const int ActInsult = 6630; 

	public const int ActEntangle = 6601; 

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

+AI_Craft

File Created
cs
public class AI_Craft : AIAct
{
	public Point pos;
}

+AI_Craft_Snowman

File Created
cs
using System.Collections.Generic;

public class AI_Craft_Snowman : AI_Craft
{
	public override IEnumerable<Status> Run()
	{
		yield return DoGoto(pos, 1);
		Progress_Custom seq = new Progress_Custom
		{
			onProgress = delegate
			{
				owner.LookAt(pos);
				Msg.SetColor(Msg.colors.Ono);
				Msg.Say(Lang.GetList("walk_snow").RandomItem());
				pos.PlaySound(MATERIAL.sourceSnow.soundFoot);
			},
			onProgressComplete = delegate
			{
				Thing thing = ThingGen.Create("snowman");
				EClass._zone.AddCard(thing, pos).Install();
				owner.Say("crafted", thing);
				owner.PlaySound(MATERIAL.sourceSnow.GetSoundDead());
				owner.PlayAnime(AnimeID.Jump);
				pos.TalkWitnesses(EClass.pc, (EClass.rnd(2) == 0) ? "nice_statue" : "ding_other", 5);
				EClass.pc.ModExp(258, 50);
			}
		}.SetDuration(25, 5);
		yield return Do(seq);
	}
}

AI_Idle

@@ -626,10 +626,10 @@ public override IEnumerable<Status> Run()

cs
		{
			owner.pos.ForeachNeighbor(delegate(Point p)
			{
				Card card = p.FindThing<TraitBall>()?.owner; 
				if (card != null) 
				Card card2 = p.FindThing<TraitBall>()?.owner; 
				if (card2 != null) 
				{
					owner.Pick(card.Thing); 
					owner.Pick(card2.Thing); 
				}
			});
		}

@@ -755,10 +755,10 @@ public override IEnumerable<Status> Run()

cs
	{
		if (owner.id == "ashland" || owner.id == "fiama")
		{
			Trait trait = EClass._map.Installed.traits.restSpots.RandomItem(); 
			if (trait != null) 
			Card card = EClass._map.Installed.traits.restSpots.RandomItem(); 
			if (card != null) 
			{
				yield return DoGotoSpot(trait.owner); 
				yield return DoGotoSpot(card); 
			}
			else
			{

AI_Slaughter

@@ -31,7 +31,10 @@ public override bool Perform()

cs
public override IEnumerable<Status> Run()
{
	yield return DoGoto(target);
	target.Chara.AddCondition<ConWait>(1000, force: true); 
	if (target != owner) 
	{ 
		target.Chara.AddCondition<ConWait>(1000, force: true); 
	} 
	Progress_Custom seq = new Progress_Custom
	{
		canProgress = () => IsValidTC(target),

@@ -45,7 +48,10 @@ public override IEnumerable<Status> Run()

cs
		{
			owner.LookAt(target);
			target.renderer.PlayAnime(AnimeID.Shiver);
			target.Chara.AddCondition<ConWait>(1000, force: true); 
			if (target != owner) 
			{ 
				target.Chara.AddCondition<ConWait>(1000, force: true); 
			} 
			if (owner.Dist(target) > 1)
			{
				owner.TryMoveTowards(target.pos);

@@ -74,19 +80,36 @@ public override IEnumerable<Status> Run()

cs
			}
			slaughtering = true;
			target.SetSale(sale: false);
			if (target.IsPCParty && !target.IsPC) 
			{ 
				if (target.Chara.host != null) 
				{ 
					ActRide.Unride(target.Chara.host, target.Chara.host.parasite == target.Chara, talk: false); 
				} 
				EClass.pc.party.RemoveMember(target.Chara); 
			} 
			target.Die();
			Msg.Say("goto_heaven", target);
			slaughtering = false;
			if (target.Chara.trait.IsUnique) 
			if (!target.IsPC) 
			{ 
				if (target.Chara.trait.IsUnique) 
				{ 
					target.c_dateDeathLock = EClass.world.date.GetRaw() + 86400; 
				} 
				else
				{ 
					target.Chara.homeBranch.BanishMember(target.Chara, skipMsg: true); 
				} 
			} 
			if (owner != null) 
			{
				target.c_dateDeathLock = EClass.world.date.GetRaw() + 86400; 
				owner.elements.ModExp(290, 200); 
			}
			else
			if (!EClass.pc.isDead) 
			{
				target.Chara.homeBranch.BanishMember(target.Chara, skipMsg: true); 
				EClass.pc.stamina.Mod(-3); 
			}
			owner.elements.ModExp(290, 200); 
			EClass.pc.stamina.Mod(-3); 
			if (num)
			{
				Msg.Say("killcat");

ActEffect

@@ -482,7 +482,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
	case EffectId.Summon:
	{
		CC.Say("summon_ally", CC);
		if (EClass._zone.CountMinions(CC) > CC.MaxSummon || CC.c_uidMaster != 0) 
		if (EClass._zone.CountMinions(CC) >= CC.MaxSummon || CC.c_uidMaster != 0) 
		{
			CC.Say("summon_ally_fail", CC);
			return;

@@ -515,7 +515,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		}
		for (int j = 0; j < num3; j++)
		{
			if (EClass._zone.CountMinions(CC) > CC.MaxSummon) 
			if (EClass._zone.CountMinions(CC) >= CC.MaxSummon) 
			{
				break;
			}

ActMelee

@@ -1,4 +1,5 @@

cs
using System.Collections.Generic;
using UnityEngine; 

public class ActMelee : ActBaseAttack
{

@@ -119,7 +120,7 @@ public bool Attack(float dmgMulti = 1f, bool maxRoll = false)

cs
	bool usedTalisman = false;
	int count = 0;
	int num = Act.CC.Dist(Act.TC);
	Point obj = Act.TC.pos.Copy(); 
	Point orgPos = Act.TC.pos.Copy(); 
	foreach (BodySlot slot in Act.CC.body.slots)
	{
		if (Act.TC == null || !Act.TC.IsAliveInCurrentZone)

@@ -141,33 +142,73 @@ public bool Attack(float dmgMulti = 1f, bool maxRoll = false)

cs
			ActRanged.TryReload(w);
		}
		int num2 = ((w != null) ? w.Evalue(606) : 0);
		if (w != null) 
		int scatter = ((w != null) ? w.Evalue(607) : 0); 
		int chaser = ((w != null) ? w.Evalue(620) : 0); 
		if (Act.CC.IsPCFaction) 
		{
			w.Evalue(607); 
			chaser += EClass.pc.faction.charaElements.Value(620); 
		}
		List<Point> list = EClass._map.ListPointsInLine(Act.CC.pos, Act.TC.pos, num2 / 10 + ((num2 % 10 > EClass.rnd(10)) ? 1 : 0) + 1);
		Attack(Act.TC, Act.TP); 
		Attack(Act.TC, Act.TP, 1f); 
		if (num2 > 0)
		{
			foreach (Point item in list)
			{
				if (!item.Equals(obj)) 
				if (!item.Equals(orgPos)) 
				{
					Chara firstChara = item.FirstChara;
					if (firstChara != null && firstChara.IsHostile(Act.CC))
					{
						Attack(firstChara, item); 
						Attack(firstChara, item, 1f); 
					}
				}
			}
		}
		count++; 
		void Attack(Card _tc, Point _tp) 
		else if (scatter > 0) 
		{ 
			Act.TP.ForeachNeighbor(delegate(Point p) 
			{ 
				if (!p.Equals(orgPos)) 
				{ 
					Chara firstChara2 = p.FirstChara; 
					if (firstChara2 != null && firstChara2.IsHostile(Act.CC)) 
					{ 
						Attack(firstChara2, p, Mathf.Min(0.5f + 0.05f * Mathf.Sqrt(scatter), 1f + 0.01f * Mathf.Sqrt(scatter))); 
					} 
				} 
			}); 
		} 
		int num3 = count; 
		count = num3 + 1; 
		void Attack(Card _tc, Point _tp, float mtp) 
		{
			Act.TC = _tc;
			Act.TP = _tp;
			AttackProcess.Current.Prepare(Act.CC, w, Act.TC, Act.TP, count);
			bool flag2 = AttackProcess.Current.Perform(count, hasHit, dmgMulti, maxRoll); 
			int num4 = 1; 
			if (chaser > 0) 
			{ 
				for (int i = 0; i < 10; i++) 
				{ 
					if (chaser > EClass.rnd((int)Mathf.Pow(4f, i + 2))) 
					{ 
						num4++; 
					} 
				} 
			} 
			bool flag2 = false; 
			for (int j = 0; j < num4; j++) 
			{ 
				if (j > 0) 
				{ 
					Msg.Say("attack_chaser"); 
				} 
				flag2 = AttackProcess.Current.Perform(count, hasHit, dmgMulti * mtp, maxRoll); 
				if (flag2) 
				{ 
					break; 
				} 
			} 
			if (flag2)
			{
				hasHit = true;

ActPlan

@@ -555,305 +555,314 @@ public void _Update(PointTarget target)

cs
				}
			}
		});
		if (_pos.IsHidden || !IsSelfOrNeighbor) 
		if (_pos.IsHidden) 
		{
			return;
		}
		items.ForeachReverse(delegate(Card _c) 
		if (IsSelfOrNeighbor) 
		{
			Chara c = _c.Chara; 
			if (c != null) 
			items.ForeachReverse(delegate(Card _c) 
			{
				bool flag3 = EClass.pc.CanSee(c); 
				if (flag3) 
				Chara c = _c.Chara; 
				if (c != null) 
				{
					if (input == ActInput.LeftMouse && c.IsPCFaction && !c.IsPC && pos.FindThing<TraitHitchingPost>() != null) 
					bool flag3 = EClass.pc.CanSee(c); 
					if (flag3) 
					{
						Chara ride = c; 
						List<string> list = EClass.core.pccs.sets["ride"].map["body"].map.Keys.ToList(); 
						int index = list.IndexOf(ride.c_idRidePCC); 
						if (index == -1) 
						if (input == ActInput.LeftMouse && c.IsPCFaction && !c.IsPC && pos.FindThing<TraitHitchingPost>() != null) 
						{
							index = 0; 
							Chara ride = c; 
							List<string> list = EClass.core.pccs.sets["ride"].map["body"].map.Keys.ToList(); 
							int index = list.IndexOf(ride.c_idRidePCC); 
							if (index == -1) 
							{ 
								index = 0; 
							} 
							TrySetAct("ActChangeRideSkin", delegate
							{ 
								UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction(); 
								uIContextMenu.AddSlider("rideSkin", (float a) => list[(int)a].Split('-')[0] ?? "", index, delegate(float a) 
								{ 
									ride.c_idRidePCC = list[(int)a]; 
									ride._CreateRenderer(); 
								}, 0f, list.Count - 1, isInt: true, hideOther: false); 
								uIContextMenu.Show(); 
								return false; 
							}, c); 
						}
						TrySetAct("ActChangeRideSkin", delegate
						if (!c.IsPC && ((c.IsPCFaction && !c.IsDisabled) || EClass.debug.enable) && input == ActInput.AllAction) 
						{
							UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction(); 
							uIContextMenu.AddSlider("rideSkin", (float a) => list[(int)a].Split('-')[0] ?? "", index, delegate(float a) 
							TrySetAct("actTrade", delegate 
							{
								ride.c_idRidePCC = list[(int)a]; 
								ride._CreateRenderer(); 
							}, 0f, list.Count - 1, isInt: true, hideOther: false); 
							uIContextMenu.Show(); 
							return false; 
						}, c); 
					} 
					if (!c.IsPC && ((c.IsPCFaction && !c.IsDisabled) || EClass.debug.enable) && input == ActInput.AllAction) 
					{ 
						TrySetAct("actTrade", delegate
						{ 
							LayerInventory.CreateContainer(c); 
							return false; 
						}, c); 
					} 
					if (c.host != null && EClass.pc.held != null && altAction) 
					{ 
						bool flag4 = true; 
						if ((EClass.pc.held.trait is TraitThrown || EClass.pc.held.trait.IsTool) && !HotItemHeld.disableTool) 
						{ 
							flag4 = false; 
								LayerInventory.CreateContainer(c); 
								return false; 
							}, c); 
						}
						if (!c.IsDisabled && flag4 && c.CanAcceptGift(EClass.pc, EClass.pc.held)) 
						if (c.host != null && EClass.pc.held != null && altAction) 
						{
							string lang = "actGive"; 
							if (c.Evalue(1232) > 0 && EClass.pc.held.trait is TraitDrinkMilkMother) 
							bool flag4 = true; 
							if ((EClass.pc.held.trait is TraitThrown || EClass.pc.held.trait.IsTool) && !HotItemHeld.disableTool) 
							{
								lang = "actMilk"; 
								flag4 = false; 
							}
							TrySetAct(lang, delegate
							if (!c.IsDisabled && flag4 && c.CanAcceptGift(EClass.pc, EClass.pc.held)) 
							{
								if (!c.IsValidGiftWeight(EClass.pc.held, 1)) 
								{ 
									c.Talk("tooHeavy"); 
									return true; 
								} 
								if (EClass.core.config.game.confirmGive) 
								string lang = "actGive"; 
								if (c.Evalue(1232) > 0 && EClass.pc.held.trait is TraitDrinkMilkMother) 
								{
									Dialog.YesNo("dialogGive".lang(EClass.pc.held.GetName(NameStyle.Full, 1)), func); 
									lang = "actMilk"; 
								}
								else
								TrySetAct(lang, delegate
								{
									func(); 
								} 
								return true; 
							}, c); 
									if (!c.IsValidGiftWeight(EClass.pc.held, 1)) 
									{ 
										c.Talk("tooHeavy"); 
										return true; 
									} 
									if (EClass.core.config.game.confirmGive) 
									{ 
										Dialog.YesNo("dialogGive".lang(EClass.pc.held.GetName(NameStyle.Full, 1)), func); 
									} 
									else
									{ 
										func(); 
									} 
									return true; 
								}, c); 
							} 
						}
					}
				} 
				if (input == ActInput.AllAction && EClass.pc.held != null && EClass.pc.held.trait is TraitDrink) 
				{ 
					TrySetAct(c.IsPC ? "actPour" : "ActThrow", delegate
					{ 
						ActThrow.Throw(EClass.pc, c.pos, c, EClass.pc.held.Split(1)); 
						return true; 
					}, (c.host != null) ? c : EClass.pc.held); 
				} 
				if (!c.IsPC && c.host == null && ((!EClass.pc.isBlind && flag3) || input != ActInput.AllAction)) 
				{ 
					if (c.isRestrained && (input == ActInput.AllAction || (!c.IsRestrainedResident && !c.IsHostile()))) 
					if (input == ActInput.AllAction && EClass.pc.held != null && EClass.pc.held.trait is TraitDrink) 
					{
						TrySetAct("ActUnrestrain", delegate
						TrySetAct(c.IsPC ? "actPour" : "ActThrow", delegate 
						{
							c.TryUnrestrain(force: true, EClass.pc); 
							ActThrow.Throw(EClass.pc, c.pos, c, EClass.pc.held.Split(1)); 
							return true;
						}, c); 
						}, (c.host != null) ? c : EClass.pc.held); 
					}
					if (!EClass.pc.isBlind && flag3 && input == ActInput.AllAction) 
					if (!c.IsPC && c.host == null && ((!EClass.pc.isBlind && flag3) || input != ActInput.AllAction)) 
					{
						TrySetAct(ACT.Kick, c); 
						if (c.IsMofuable) 
						if (c.isRestrained && (input == ActInput.AllAction || (!c.IsRestrainedResident && !c.IsHostile()))) 
						{
							TrySetAct("ActCuddle", delegate
							TrySetAct("ActUnrestrain", delegate 
							{
								EClass.pc.Cuddle(c); 
								c.TryUnrestrain(force: true, EClass.pc); 
								return true;
							}, c);
						}
						if (EClass.debug.showExtra) 
						if (!EClass.pc.isBlind && flag3 && input == ActInput.AllAction) 
						{
							TrySetAct("inspect", delegate
							TrySetAct(ACT.Kick, c); 
							if (c.IsMofuable) 
							{
								c.Inspect(); 
								return false; 
							}, c); 
								TrySetAct("ActCuddle", delegate
								{ 
									EClass.pc.Cuddle(c); 
									return true; 
								}, c); 
							} 
							if (EClass.debug.showExtra) 
							{ 
								TrySetAct("inspect", delegate
								{ 
									c.Inspect(); 
									return false; 
								}, c); 
							} 
						}
					}
				}
			} 
			else if (_c.isThing) 
			{ 
				if (!EClass.pc.isBlind) 
				else if (_c.isThing) 
				{
					Thing t = _c.Thing; 
					if (input == ActInput.AllAction) 
					if (!EClass.pc.isBlind) 
					{
						if ((EClass.debug.enable || EClass.player.HasKeyItem("license_illumination")) && t.LightData != null) 
						Thing t = _c.Thing; 
						if (input == ActInput.AllAction) 
						{
							if (t.c_lightColor != 0) 
							if ((EClass.debug.enable || EClass.player.HasKeyItem("license_illumination")) && t.LightData != null) 
							{
								TrySetAct("actClearLight", delegate
								if (t.c_lightColor != 0) 
								{ 
									TrySetAct("actClearLight", delegate
									{ 
										t.c_lightColor = 0; 
										t.RecalculateFOV(); 
										t.renderer.GetTC<TCExtra>()?.RefreshColor(); 
										return false; 
									}, t); 
								} 
								TrySetAct("actSetLight", delegate
								{
									t.c_lightColor = 0; 
									t.RecalculateFOV(); 
									t.renderer.GetTC<TCExtra>()?.RefreshColor(); 
									Color lightColor = t.LightColor; 
									EClass.ui.AddLayer<LayerColorPicker>().SetColor(lightColor, lightColor, delegate(PickerState state, Color _c) 
									{ 
										t.c_lightColor = (byte)Mathf.Clamp(_c.r * 32f, 1f, 31f) * 1024 + (byte)Mathf.Clamp(_c.g * 32f, 1f, 31f) * 32 + (byte)Mathf.Clamp(_c.b * 32f, 1f, 31f); 
										t.RecalculateFOV(); 
										t.renderer.GetTC<TCExtra>()?.RefreshColor(); 
									}); 
									return false;
								}, t);
							}
							TrySetAct("actSetLight", delegate
							{ 
								Color lightColor = t.LightColor; 
								EClass.ui.AddLayer<LayerColorPicker>().SetColor(lightColor, lightColor, delegate(PickerState state, Color _c) 
								{ 
									t.c_lightColor = (byte)Mathf.Clamp(_c.r * 32f, 1f, 31f) * 1024 + (byte)Mathf.Clamp(_c.g * 32f, 1f, 31f) * 32 + (byte)Mathf.Clamp(_c.b * 32f, 1f, 31f); 
									t.RecalculateFOV(); 
									t.renderer.GetTC<TCExtra>()?.RefreshColor(); 
								}); 
								return false; 
							}, t); 
						} 
						if (EClass.debug.enable && pos.cell.IsTopWater) 
						{ 
							TrySetAct("(debug) Toggle Float", delegate
							{ 
								t.isFloating = !t.isFloating; 
								return false; 
							}, t); 
						} 
						if (!EClass._zone.IsUserZone || !t.isNPCProperty) 
						{ 
							if (t.trait.CanEat(EClass.pc)) 
							if (EClass.debug.enable && pos.cell.IsTopWater) 
							{
								TrySetAct(new AI_Eat
								TrySetAct("(debug) Toggle Float", delegate
								{
									target = t 
									t.isFloating = !t.isFloating; 
									return false; 
								}, t);
							}
							if (t.trait.CanDrink(EClass.pc)) 
							if (!EClass._zone.IsUserZone || !t.isNPCProperty) 
							{
								TrySetAct(new AI_Drink
								if (t.trait.CanEat(EClass.pc)) 
								{
									target = t 
								}, t); 
							} 
							if (t.trait.CanRead(EClass.pc)) 
							{ 
								TrySetAct(new AI_Read
									TrySetAct(new AI_Eat
									{ 
										target = t 
									}, t); 
								} 
								if (t.trait.CanDrink(EClass.pc)) 
								{
									target = t 
								}, t); 
							} 
							if (t.trait.IsBlendBase) 
							{ 
								TrySetAct("invBlend", delegate
									TrySetAct(new AI_Drink
									{ 
										target = t 
									}, t); 
								} 
								if (t.trait.CanRead(EClass.pc)) 
								{
									LayerDragGrid.Create(new InvOwnerBlend(t)); 
									return true; 
								}, t); 
							} 
							if (t.trait.CanName) 
							{ 
								TrySetAct("changeName", delegate
									TrySetAct(new AI_Read
									{ 
										target = t 
									}, t); 
								} 
								if (t.trait.IsBlendBase) 
								{ 
									TrySetAct("invBlend", delegate
									{ 
										LayerDragGrid.Create(new InvOwnerBlend(t)); 
										return true; 
									}, t); 
								} 
								if (t.trait.CanName) 
								{
									Dialog.InputName("dialogChangeName", t.c_refText.IsEmpty(""), delegate(bool cancel, string text) 
									TrySetAct("changeName", delegate 
									{
										if (!cancel) 
										Dialog.InputName("dialogChangeName", t.c_refText.IsEmpty(""), delegate(bool cancel, string text) 
										{
											t.c_refText = text; 
										} 
									}); 
									return false; 
								}, t); 
											if (!cancel) 
											{ 
												t.c_refText = text; 
											} 
										}); 
										return false; 
									}, t); 
								} 
							} 
						} 
						if (isKey) 
						{ 
							_ = t.trait.CanBeAttacked; 
						} 
						else 
						{ 
							if (t.placeState == PlaceState.roaming && (_pos.cell.blocked || t.ignoreAutoPick || altAction || input == ActInput.AllAction || _pos.Equals(EClass.pc.pos)) && EClass.pc.CanPick(t)) 
							{ 
								listPick.Add(t); 
							} 
							if (t.IsInstalled) 
							{ 
								t.trait.TrySetToggleAct(this); 
								t.trait.TrySetAct(this); 
							}
						}
					}
					if (isKey) 
				} 
				void func() 
				{ 
					EClass.pc.GiveGift(c, EClass.pc.SplitHeld(1) as Thing); 
				} 
			}); 
			if (listPick.Count > 0) 
			{ 
				if (listPick.Count == 1) 
				{ 
					Thing _t = listPick[0]; 
					if (!EClass._zone.IsRegion || (!_t.ignoreAutoPick && _t.pos.Equals(EClass.pc.pos)) || altAction) 
					{
						_ = t.trait.CanBeAttacked; 
						TrySetAct("actPickOne", delegate
						{ 
							EClass.pc.Pick(_t); 
							return true; 
						}, listPick[0], CursorSystem.Hand, 1, isHostileAct: false, localAct: false); 
					}
					else 
				} 
				else 
				{ 
					IList<Card> _cards = items.Copy(); 
					TrySetAct("actPickAll", delegate
					{
						if (t.placeState == PlaceState.roaming && (_pos.cell.blocked || t.ignoreAutoPick || altAction || input == ActInput.AllAction || _pos.Equals(EClass.pc.pos)) && EClass.pc.CanPick(t)) 
						foreach (Card item in _cards) 
						{
							listPick.Add(t); 
						} 
						if (t.IsInstalled) 
						{ 
							t.trait.TrySetToggleAct(this); 
							t.trait.TrySetAct(this); 
							if (item.isThing && item.placeState == PlaceState.roaming) 
							{ 
								EClass.pc.Pick(item.Thing); 
							} 
						}
					} 
						return true; 
					}, null, CursorSystem.Hand, 1, isHostileAct: false, localAct: false); 
				}
			}
			void func() 
			if (input == ActInput.AllAction && pos.IsSky) 
			{
				EClass.pc.GiveGift(c, EClass.pc.SplitHeld(1) as Thing); 
				TrySetAct("actSkyJump", delegate
				{ 
					EClass.pc.FallFromZone(); 
					return false; 
				}); 
			}
		}); 
		if (listPick.Count > 0) 
		{ 
			if (listPick.Count == 1) 
			if (_pos.Equals(cc.pos)) 
			{
				Thing _t = listPick[0]; 
				if (!EClass._zone.IsRegion || (!_t.ignoreAutoPick && _t.pos.Equals(EClass.pc.pos)) || altAction) 
				if (cc.held != null && !cc.held.IsHotItem) 
				{ 
					TrySetAct("actPick", delegate
					{ 
						_ = cc.held; 
						cc.PickHeld(msg: true); 
						return false; 
					}, cc.held, CursorSystem.Inventory, 1, isHostileAct: false, localAct: false); 
				} 
				else if (!HasAct && !cc.isRestrained) 
				{ 
					TrySetAct(ACT.Wait); 
				} 
				if (EClass.pc.party.members.Count > 1) 
				{ 
					showOrder = true; 
				} 
				if (input == ActInput.AllAction && EClass.pc.held != null && !EClass.pc.held.trait.CanOnlyCarry) 
				{
					TrySetAct("actPickOne", delegate
					TrySetAct("actDrop", delegate 
					{
						EClass.pc.Pick(_t); 
						EClass.pc.DropThing(EClass.pc.held.Thing); 
						return true;
					}, listPick[0], CursorSystem.Hand, 1, isHostileAct: false, localAct: false); 
					}); 
				}
			} 
			else 
			{ 
				IList<Card> _cards = items.Copy(); 
				TrySetAct("actPickAll", delegate
				if (cc.isRestrained) 
				{
					foreach (Card item in _cards) 
					TrySetAct("ActUnrestrain", delegate
					{
						if (item.isThing && item.placeState == PlaceState.roaming) 
						{ 
							EClass.pc.Pick(item.Thing); 
						} 
					} 
					return true; 
				}, null, CursorSystem.Hand, 1, isHostileAct: false, localAct: false); 
						cc.TryUnrestrain(force: true, EClass.pc); 
						return true; 
					}, cc); 
				} 
			}
		}
		if (input == ActInput.AllAction && pos.IsSky) 
		if (list.Count == 0 && input == ActInput.AllAction && pos.cell.IsSnowTile && !pos.IsBlocked && !pos.HasObj && !pos.HasThing) 
		{
			TrySetAct("actSkyJump", delegate
			TrySetAct(new AI_Craft_Snowman
			{
				EClass.pc.FallFromZone(); 
				return false; 
				pos = pos.Copy() 
			});
		}
		if (!_pos.Equals(cc.pos)) 
		{ 
			return; 
		} 
		if (cc.held != null && !cc.held.IsHotItem) 
		{ 
			TrySetAct("actPick", delegate
			{ 
				_ = cc.held; 
				cc.PickHeld(msg: true); 
				return false; 
			}, cc.held, CursorSystem.Inventory, 1, isHostileAct: false, localAct: false); 
		} 
		else if (!HasAct && !cc.isRestrained) 
		{ 
			TrySetAct(ACT.Wait); 
		} 
		if (EClass.pc.party.members.Count > 1) 
		{ 
			showOrder = true; 
		} 
		if (input == ActInput.AllAction && EClass.pc.held != null && !EClass.pc.held.trait.CanOnlyCarry) 
		{ 
			TrySetAct("actDrop", delegate
			{ 
				EClass.pc.DropThing(EClass.pc.held.Thing); 
				return true; 
			}); 
		} 
		if (cc.isRestrained) 
		{ 
			TrySetAct("ActUnrestrain", delegate
			{ 
				cc.TryUnrestrain(force: true, EClass.pc); 
				return true; 
			}, cc); 
		} 
	}
	else
	{

Card

@@ -3596,7 +3596,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		}
		if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
		{
			dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef)); 
			dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), (origin != null) ? origin.Evalue(1238) : 0); 
			dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200));
		}
		switch (e.id)

@@ -3821,7 +3821,7 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
					if (EClass.player.invlunerable)
					{
						EvadeDeath();
						goto IL_0992; 
						goto IL_09ad; 
					}
				}
				if (IsPC && Evalue(1220) > 0 && Chara.stamina.value >= Chara.stamina.max / 2)

@@ -3833,8 +3833,8 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

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

@@ -5064,8 +5064,8 @@ public void Dye(string idMat)

cs

	public void Dye(SourceMaterial.Row mat)
	{
		isDyed = true; 
		c_dyeMat = mat.id; 
		isDyed = mat != null; 
		c_dyeMat = mat?.id ?? 0; 
		_colorInt = 0;
	}

Chara

@@ -2578,7 +2578,7 @@ public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
		{
			foreach (Thing thing2 in newPoint.Things)
			{
				if (thing2.IsInstalled && (thing2.trait.CanChangeHeight || thing2.Pref.Surface)) 
				if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface)) 
				{
					text = thing2.material.soundFoot;
				}

@@ -4571,6 +4571,7 @@ public void Revive(Point p = null, bool msg = false)

cs
	}
	sleepiness.value = 0;
	hostility = OriginalHostility;
	RemoveCondition<StanceTaunt>(); 
	if (IsPC)
	{
		if (EClass.player.preventDeathPenalty)

DOMAIN

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

cs

public class DOMAIN
{
	public const int domArcane = 804; 

	public const int domTest = 800; 

	public const int domSurvival = 801;

	public const int domFaith = 802;

	public const int domOblivion = 813; 

	public const int domTest = 800; 

	public const int domMiracle = 803;

	public const int domEyth = 814; 

	public const int domComm = 805;

	public const int domEyth = 814; 
	public const int domHealing = 811; 

	public const int domWind = 807; 
	public const int domEarth = 812; 

	public const int domHarvest = 808; 
	public const int domLuck = 810; 

	public const int domMachine = 809;

	public const int domLuck = 810; 
	public const int domArcane = 804; 

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

	public const int domOblivion = 813; 
	public const int domHarvest = 808; 

	public const int domEarth = 812; 
	public const int domWind = 807; 

	public const int domElement = 806;

	public const int domHarmony = 815; 

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

DramaOutcome

@@ -38,9 +38,9 @@ public void StartNewGame2()

cs

	public void PutOutFire()
	{
		foreach (Card value in EMono._map.props.installed.traits.GetTraitSet<TraitHearth>().Values) 
		foreach (Card item in EMono._map.props.installed.traits.GetTraitSet<TraitHearth>()) 
		{
			EMono._zone.AddCard(ThingGen.Create("dish_soup"), value.pos.GetRandomNeighbor()); 
			EMono._zone.AddCard(ThingGen.Create("dish_soup"), item.pos.GetRandomNeighbor()); 
		}
	}

ELEMENT

@@ -5,19 +5,19 @@

cs

public class ELEMENT
{
	public const int hotspring = 756; 
	public const int antidote = 753; 

	public const int blood = 755;

	public const int nerve = 754; 
	public const int rare = 751; 

	public const int antidote = 753; 
	public const int comfort = 750; 

	public const int cute = 752; 
	public const int hotspring = 756; 

	public const int rare = 751; 
	public const int nerve = 754; 

	public const int comfort = 750; 
	public const int cute = 752; 

	public const int _void = 0;

@@ -67,7 +67,7 @@ public class ELEMENT

cs

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

@@ -903,12 +903,17 @@ public static int GetResistLv(int v)

cs
		{
			num = -2;
		}
		if (num > 4) 
		{ 
			num = 4; 
		} 
		return num;
	}

	public static int GetResistDamage(int dmg, int v) 
	public static int GetResistDamage(int dmg, int v, int power = 0) 
	{
		int resistLv = GetResistLv(v);
		resistLv -= power; 
		if (resistLv >= 4)
		{
			return 0;

ENC

@@ -10,10 +10,10 @@ public class ENC

cs

	public const int r_mana = 641;

	public const int mod_drill = 606; 

	public const int mod_scatter = 607;

	public const int mod_chaser = 620; 

	public const int r_life = 640;

	public const int onlyPet = 655;

@@ -22,7 +22,7 @@ public class ENC

cs

	public const int permaCurse = 656;

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

	public const int absorbMP = 661;

@@ -36,9 +36,9 @@ public class ENC

cs

	public const int meleeDistance = 666;

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

	public const int mod_precision = 605; 
	public const int mod_drill = 606; 

	public const int convertImpact = 865;

@@ -46,11 +46,11 @@ public class ENC

cs

	public const int absorbHP = 660;

	public const int mod_ammo_recover = 604; 
	public const int mod_precision = 605; 

	public const int sustain_CHA = 447; 
	public const int resWeather = 408; 

	public const int mod_rapid = 602; 
	public const int mod_ammo_knockback = 603; 

	public const int breathing = 429;

@@ -62,6 +62,8 @@ public class ENC

cs

	public const int negateConfusion = 425;

	public const int negateSleep = 424; 

	public const int negateFear = 423;

	public const int negateParalysis = 422;

@@ -72,23 +74,21 @@ public class ENC

cs

	public const int seeInvisible = 416;

	public const int invisibility = 415; 

	public const int sustain_STR = 440;

	public const int slowCorruption = 412; 
	public const int invisibility = 415; 

	public const int encSpell = 411; 

	public const int throwReturn = 410;

	public const int corruption = 409;

	public const int resWeather = 408; 

	public const int travelSpeed = 407;

	public const int resMutation = 406;

	public const int slowDecay = 405; 
	public const int mod_ammo_recover = 604; 

	public const int weightMod = 404;

@@ -100,13 +100,15 @@ public class ENC

cs

	public const int negateTeleport = 400;

	public const int encSpell = 411; 
	public const int slowCorruption = 412; 

	public const int sustain_END = 441;

	public const int negateSleep = 424; 
	public const int slowDecay = 405; 

	public const int strongStomach = 480; 
	public const int force_weapon = 482; 

	public const int mod_rapid = 602; 

	public const int mod_reload = 601;

@@ -114,29 +116,27 @@ public class ENC

cs

	public const int optimizeMana = 483;

	public const int force_weapon = 482; 

	public const int revealFaith = 481;

	public const int strongStomach = 480; 

	public const int bane_all = 468;

	public const int bane_fish = 467;

	public const int bane_god = 466;

	public const int bane_machine = 465; 

	public const int bane_man = 464;

	public const int bane_animal = 463;

	public const int bane_fairy = 462;

	public const int bane_undead = 461; 
	public const int bane_machine = 465; 

	public const int mod_ammo_knockback = 603; 
	public const int bane_dragon = 460; 

	public const int sustain_PER = 443; 
	public const int sustain_CHA = 447; 

	public const int sustain_MAG = 446;

@@ -144,19 +144,21 @@ public class ENC

cs

	public const int sustain_LER = 444;

	public const int bane_dragon = 460; 
	public const int bane_undead = 461; 

	public const int sustain_PER = 443; 

	public const int sustain_DEX = 442;

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

FACTION

@@ -4,72 +4,70 @@

cs

public class FACTION
{
	public const int bfCave = 3500; 

	public const int bfPlain = 3600;

	public const int bfForest = 3601;

	public const int bfSnow = 3602;

	public const int fConstruction = 2003; 
	public const int bfRuin = 3702; 

	public const int fRation = 2207; 
	public const int bfHill = 3603; 

	public const int bfBeach = 3604; 
	public const int bfFertile = 3700; 

	public const int bfSea = 3605;

	public const int bfFertile = 3700; 
	public const int bfBeach = 3604; 

	public const int bfCave = 3500; 

	public const int bfGeyser = 3701;

	public const int bfHill = 3603; 
	public const int fRation = 2207; 

	public const int fAttraction = 2206; 
	public const int actBuildCollect = 4004; 

	public const int fMoral = 2203; 
	public const int fSafety = 2205; 

	public const int fFood = 2204;

	public const int fMoral = 2203; 

	public const int fPromo = 2202;

	public const int fElec = 2201;

	public const int fLoyal = 2117; 

	public const int fEducation = 2116; 

	public const int fAdmin = 2115; 

	public const int fTaxEvasion = 2119; 

	public const int fHeirloom = 2120; 
	public const int bfTranquil = 3703; 

	public const int fSoil = 2200;

	public const int bfRuin = 3702; 
	public const int fHeirloom = 2120; 

	public const int fSafety = 2205; 
	public const int fTaxEvasion = 2119; 

	public const int fLuck = 2118;

	public const int bfTranquil = 3703; 
	public const int fLoyal = 2117; 

	public const int bfHunt = 3705; 
	public const int fAttraction = 2206; 

	public const int bfVolcano = 3704;

	public const int actBuildRecipe = 4005; 
	public const int bfLandmark5 = 3784; 

	public const int actBuildCollect = 4004; 
	public const int bfFish = 3706; 

	public const int actBuildAnywhere = 4003; 
	public const int actBuildRecipe = 4005; 

	public const int actBuildInspect = 4006; 

	public const int actBuildTerrain = 4002;

	public const int actBuildMine = 4001;

	public const int fEducation = 2116; 

	public const int actBuildCut = 4000;

	public const int bfStart = 3900;

@@ -80,42 +78,44 @@ public class FACTION

cs

	public const int bfGum = 3803;

	public const int bfSilica = 3802; 
	public const int bfHunt = 3705; 

	public const int actBuildInspect = 4006; 
	public const int bfSilica = 3802; 

	public const int bfCoal = 3800;

	public const int bfMushroom = 3801; 
	public const int actBuildAnywhere = 4003; 

	public const int bfMonster = 3707; 
	public const int bfLandmark4 = 3783; 

	public const int bfFreshAir = 3708; 
	public const int bfLandmark3 = 3782; 

	public const int bfBasin = 3709; 
	public const int bfLandmark2 = 3781; 

	public const int bfLandmark1 = 3780; 

	public const int bfBreed = 3710;

	public const int bfFish = 3706; 
	public const int bfBasin = 3709; 

	public const int bfLandmark2 = 3781; 
	public const int bfFreshAir = 3708; 

	public const int bfLandmark3 = 3782; 
	public const int bfMonster = 3707; 

	public const int bfLandmark4 = 3783; 
	public const int bfMushroom = 3801; 

	public const int bfLandmark5 = 3784; 
	public const int fAdmin = 2115; 

	public const int bfLandmark1 = 3780; 
	public const int fConstruction = 2003; 

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

FEAT

@@ -3,15 +3,33 @@

cs

public class FEAT
{
	public const int featStamina = 1612; 
	public const int featSnail = 1211; 

	public const int featFaith = 1636; 

	public const int featMartial = 1635; 

	public const int featNegotiate = 1634; 

	public const int featSpotting = 1633; 

	public const int featEvade = 1632; 

	public const int featDefense = 1631; 

	public const int featHardy = 1630; 

	public const int featSPD = 1629; 

	public const int featLuck = 1628; 

	public const int featCHA = 1627;

	public const int featWIL = 1626;

	public const int featMAG = 1625; 
	public const int featAnimalLover = 1640; 

	public const int featLER = 1624; 
	public const int featMAG = 1625; 

	public const int featPER = 1623;

@@ -21,9 +39,9 @@ public class FEAT

cs

	public const int featSTR = 1620;

	public const int featLuck = 1628; 
	public const int featStamina = 1612; 

	public const int featSwordsage = 1418; 
	public const int featMana = 1611; 

	public const int featLife = 1610;

@@ -33,36 +51,44 @@ public class FEAT

cs

	public const int featMilitant = 1419;

	public const int featWitch = 1417; 
	public const int featSwordsage = 1418; 

	public const int featInquisitor = 1416; 
	public const int featLER = 1624; 

	public const int featFoxMaid = 1415; 
	public const int featResCurse = 1641; 

	public const int featWhiteVixen = 1414; 
	public const int featSleeper = 1642; 

	public const int featFairysan = 1413; 
	public const int featSorter = 1643; 

	public const int featLuckyCat = 1412; 
	public const int featUndead = 1210; 

	public const int featSPD = 1629; 
	public const int featSlowFood = 1200; 

	public const int featMana = 1611; 
	public const int featManaBond = 1201; 

	public const int featHardy = 1630; 
	public const int featFastLearner = 1202; 

	public const int featLonelySoul = 1646; 
	public const int featGrowParts = 1203; 

	public const int featEvade = 1632; 
	public const int featFairyWeak = 1204; 

	public const int featEarthStrength = 1411; 
	public const int featCannibalism = 1205; 

	public const int featChef = 1658; 
	public const int featMelilithCurse = 1206; 

	public const int featManaCost = 1657; 
	public const int featFoxBless = 1207; 

	public const int featFoxLearn = 1208; 

	public const int featFluffyTail = 1209; 

	public const int featChef = 1658; 

	public const int featScavenger = 1656;

	public const int featModelBeliever = 1655; 

	public const int featHeavyCasting = 1654;

	public const int featDreamWaker = 1653;

@@ -75,57 +101,23 @@ public class FEAT

cs

	public const int featDefender = 1649;

	public const int featDefense = 1631; 

	public const int featRapidMagic = 1648;

	public const int featParty = 1645; 

	public const int featBodyParts = 1644; 

	public const int featSorter = 1643; 

	public const int featSleeper = 1642; 

	public const int featResCurse = 1641; 

	public const int featAnimalLover = 1640; 

	public const int featFaith = 1636; 

	public const int featMartial = 1635; 

	public const int featNegotiate = 1634; 

	public const int featSpotting = 1633; 

	public const int featSummoner = 1647;

	public const int featReboot = 1410; 

	public const int featModelBeliever = 1655; 

	public const int featPaladin2 = 1408; 

	public const int featShiva = 1224; 

	public const int featLoyal = 1225; 

	public const int featUnderground = 1226; 

	public const int featServant = 1227; 
	public const int featLonelySoul = 1646; 

	public const int featDemigod = 1228; 
	public const int featParty = 1645; 

	public const int featLittleOne = 1229; 
	public const int featBodyParts = 1644; 

	public const int featAdam = 1230; 
	public const int featWitch = 1417; 

	public const int featNirvana = 1231; 
	public const int featInquisitor = 1416; 

	public const int featCosmicHorror = 1233; 
	public const int featManaCost = 1657; 

	public const int featHeavyEater = 1234; 
	public const int featWhiteVixen = 1414; 

	public const int featLightEater = 1235;

@@ -133,12 +125,12 @@ public class FEAT

cs

	public const int featRoran = 1237;

	public const int featElder = 1238; 

	public const int featGod_element1 = 1300;

	public const int featGod_earth1 = 1305;

	public const int featGod_wind1 = 1310; 

	public const int featGod_machine1 = 1315;

	public const int featGod_healing1 = 1320;

@@ -149,41 +141,31 @@ public class FEAT

cs

	public const int featGod_harmony1 = 1335;

	public const int featAcidBody = 1223; 

	public const int featGod_oblivion1 = 1340;

	public const int featSplit = 1222; 

	public const int featFate = 1220; 

	public const int featBoost = 1409; 

	public const int featSlowFood = 1200; 

	public const int featManaBond = 1201; 
	public const int featGod_trickery1 = 1345; 

	public const int featFastLearner = 1202; 
	public const int featGod_moonshadow1 = 1350; 

	public const int featGrowParts = 1203; 
	public const int featGod_strife1 = 1355; 

	public const int featFairyWeak = 1204; 
	public const int featWarrior = 1400; 

	public const int featCannibalism = 1205; 
	public const int featThief = 1401; 

	public const int featMelilithCurse = 1206; 
	public const int featWizard = 1402; 

	public const int featFoxBless = 1207; 
	public const int featFarmer = 1403; 

	public const int featFoxLearn = 1208; 
	public const int featHeavyEater = 1234; 

	public const int featFluffyTail = 1209; 
	public const int featCosmicHorror = 1233; 

	public const int featUndead = 1210; 
	public const int featBaby = 1232; 

	public const int featSnail = 1211; 
	public const int featNirvana = 1231; 

	public const int featFairyResist = 1212; 
	public const int featFoxMaid = 1415; 

	public const int featElea = 1213;

@@ -199,46 +181,66 @@ public class FEAT

cs

	public const int featElderCrab = 1219;

	public const int featFate = 1220; 

	public const int featArcher = 1404; 

	public const int featSpike = 1221;

	public const int featGod_trickery1 = 1345; 
	public const int featAcidBody = 1223; 

	public const int featBaby = 1232; 
	public const int featFairyResist = 1212; 

	public const int featGod_moonshadow1 = 1350; 
	public const int featShiva = 1224; 

	public const int featGod_strife1 = 1355; 
	public const int featLoyal = 1225; 

	public const int featWarrior = 1400; 
	public const int featUnderground = 1226; 

	public const int featThief = 1401; 
	public const int featServant = 1227; 

	public const int featFarmer = 1403; 
	public const int featDemigod = 1228; 

	public const int featArcher = 1404; 
	public const int featLittleOne = 1229; 

	public const int featAdam = 1230; 

	public const int featSplit = 1222; 

	public const int featPianist = 1405;

	public const int featGod_wind1 = 1310; 

	public const int featPaladin = 1407; 

	public const int featTourist = 1406;

	public const int featWizard = 1402; 
	public const int featEarthStrength = 1411; 

	public const int featPaladin = 1407; 
	public const int featLuckyCat = 1412; 

	public const int featReboot = 1410; 

	public const int featFairysan = 1413; 

	public const int featBoost = 1409; 

	public const int featPaladin2 = 1408; 

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

FOOD

@@ -1,22 +1,22 @@

cs
public class FOOD
{
	public const int food_cat = 701; 
	public const int justcooked = 757; 

	public const int food_love = 703; 
	public const int loseWeight = 706; 

	public const int gainWeight = 705; 

	public const int food_bug = 704;

	public const int gainWeight = 705; 
	public const int food_love = 703; 

	public const int loseWeight = 706; 
	public const int food_poison = 702; 

	public const int justcooked = 757; 
	public const int food_cat = 701; 

	public const int food_god = 758;

	public const int food_poison = 702; 

	public const int food_CHA = 700;

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

FactionBranch

@@ -1421,6 +1421,7 @@ public void ChangeMemberType(Chara c, FactionMemberType type)

cs
{
	c.ClearBed();
	c.memberType = type;
	c.c_wasInPcParty = false; 
	RefreshEfficiency();
	c.RefreshWorkElements(elements);
	policies.Validate();

GameDate

@@ -256,7 +256,7 @@ public void ShipGoods()

cs
	{
		EClass.player.stats.shipMoney = 2147483647L;
	}
	shippingResult.total = (int)EClass.player.stats.shipMoney; 
	shippingResult.total = EClass.player.stats.shipMoney; 
	shippingResult.hearthLv = zone.branch.lv;
	shippingResult.hearthExp = zone.branch.exp;
	shippingResult.debt = EClass.player.debt;

LayerLoadGame

@@ -241,12 +241,12 @@ public void RefreshInfo(GameIndex i)

cs
		{
			Dialog.YesNo("dialog_restoreWarning", delegate
			{
				GameIO.DeleteGame(idDest, cloud, deleteBackup: false); 
				IO.CopyDir(pathRoot + "/" + i.id, (cloud ? CorePath.RootSaveCloud : CorePath.RootSave) + "/" + idDest); 
				SE.WriteJournal(); 
				Close(); 
				Game.TryLoad(idDest, cloud, delegate
				{
					GameIO.DeleteGame(idDest, cloud, deleteBackup: false); 
					IO.CopyDir(pathRoot + "/" + i.id, (cloud ? CorePath.RootSaveCloud : CorePath.RootSave) + "/" + idDest); 
					SE.WriteJournal(); 
					Close(); 
					Game.Load(idDest, cloud);
				});
			});

LayerSkinDeco

@@ -77,6 +77,11 @@ public override void OnUpdateInput()

cs
				deco.reverse = a;
				selected.Refresh();
			});
			i.AddToggle("placeBeforeWidget", deco.bottom, delegate(bool a) 
			{ 
				deco.bottom = a; 
				selected.Refresh(); 
			}); 
			i.AddButton("removeDeco", delegate
			{
				widget.RemoveDeco(selected.owner);

@@ -151,6 +156,7 @@ public override void OnKill()

cs
			actor.transform.SetParent(widget.transform, worldPositionStays: true);
			deco.x = (int)actor.Rect().anchoredPosition.x;
			deco.y = (int)actor.Rect().anchoredPosition.y;
			actor.Refresh(); 
		}
	}
}

MUTATION

@@ -1,34 +1,42 @@

cs
public class MUTATION
{
	public const int mutationRegen = 1516; 

	public const int mutationDexN = 1515; 
	public const int mutationStr = 1520; 

	public const int mutationDex = 1514; 
	public const int mutationSpeedN = 1519; 

	public const int etherPoisonHand = 1565; 
	public const int mutationSpeed = 1518; 

	public const int mutationEye = 1512; 
	public const int mutationRegenN = 1517; 

	public const int mutationSkinN = 1511;

	public const int mutationDexN = 1515; 

	public const int mutationEyeN = 1513; 

	public const int mutationEye = 1512; 

	public const int mutationSkin = 1510;

	public const int mutationRegenN = 1517; 
	public const int mutationStrN = 1521; 

	public const int mutationEyeN = 1513; 
	public const int mutationRegen = 1516; 

	public const int mutationSpeed = 1518; 
	public const int mutationCha = 1522; 

	public const int etherManaBattery = 1564; 
	public const int mutationDex = 1514; 

	public const int mutationStr = 1520; 
	public const int mutationBrain = 1524; 

	public const int etherPoisonHand = 1565; 

	public const int mutationChaN = 1523; 

	public const int etherProvoke = 1563;

	public const int etherArmor = 1562;

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

	public const int etherWeak = 1560;

@@ -44,44 +52,36 @@ public class MUTATION

cs

	public const int etherWing = 1554;

	public const int etherManaBattery = 1564; 

	public const int etherEye = 1553;

	public const int etherFeet = 1552;

	public const int etherUgly = 1551;

	public const int etherStupid = 1561; 

	public const int etherGravity = 1550;

	public const int mutationStrN = 1521; 

	public const int mutationChaN = 1523; 

	public const int mutationBrain = 1524; 

	public const int mutationBrainN = 1525; 
	public const int mutationBodyN = 1531; 

	public const int mutationCold = 1526; 
	public const int mutationBody = 1530; 

	public const int mutationCha = 1522; 
	public const int mutationLightningN = 1529; 

	public const int mutationLightning = 1528;

	public const int mutationLightningN = 1529; 

	public const int mutationBody = 1530; 
	public const int mutationColdN = 1527; 

	public const int mutationBodyN = 1531; 
	public const int mutationCold = 1526; 

	public const int mutationColdN = 1527; 
	public const int mutationBrainN = 1525; 

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

Map

@@ -2675,9 +2675,9 @@ public void RefreshSunMap()

cs
		return;
	}
	sunMap.Clear();
	foreach (Trait value in EClass._map.props.installed.traits.suns.Values) 
	foreach (Card sun in EClass._map.props.installed.traits.suns) 
	{
		foreach (Point item in value.ListPoints(null, onlyPassable: false)) 
		foreach (Point item in sun.trait.ListPoints(null, onlyPassable: false)) 
		{
			sunMap.Add(item.index);
		}

POLICY

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

cs

public class POLICY
{
	public const int store_ripoff = 2816; 
	public const int platinum_ticket = 2815; 

	public const int livestock_priv = 2715; 
	public const int mass_exhibition = 2814; 

	public const int home_discount = 2800; 
	public const int suite_room = 2813; 

	public const int open_business = 2810; 
	public const int livestock_priv = 2715; 

	public const int tourist_safety = 2811;

	public const int bed_quality = 2812; 
	public const int open_business = 2810; 

	public const int suite_room = 2813; 
	public const int home_discount = 2800; 

	public const int mass_exhibition = 2814; 
	public const int store_ripoff = 2816; 

	public const int platinum_ticket = 2815; 
	public const int bed_quality = 2812; 

	public const int store_premium = 2817;

	public const int legendary_exhibition = 2823; 
	public const int celeb = 2822; 

	public const int license_furniture = 2819;

@@ -31,10 +31,10 @@ public class POLICY

cs

	public const int legendary_heirloom = 2821;

	public const int celeb = 2822; 

	public const int forcePanty = 2712;

	public const int legendary_exhibition = 2823; 

	public const int license_stolen = 2824;

	public const int milk_fan = 2825;

@@ -49,12 +49,14 @@ public class POLICY

cs

	public const int incomeTransfer = 2711;

	public const int nocturnal_life = 2508; 
	public const int self_sufficient = 2511; 

	public const int noAnimal = 2709;

	public const int noMother = 2710;

	public const int wealth_tax = 2500; 

	public const int prohibition = 2503;

	public const int food_for_people = 2502;

@@ -65,30 +67,30 @@ public class POLICY

cs

	public const int legal_drug = 2505;

	public const int human_right = 2506; 
	public const int inquisition = 2507; 

	public const int wealth_tax = 2500; 
	public const int nocturnal_life = 2508; 

	public const int vaccination = 2509;

	public const int ban_radio = 2510;

	public const int self_sufficient = 2511; 

	public const int resident_tax = 2512;

	public const int inquisition = 2507; 
	public const int human_right = 2506; 

	public const int taxfree = 2514;

	public const int resident_wanted = 2513; 

	public const int auto_farm = 2707;

	public const int resident_wanted = 2513; 

	public const int demon_invocation = 2706;

	public const int taxTransfer = 2705;

	public const int noDM = 2708; 

	public const int weed_no = 2703;

	public const int border_watch = 2704;

@@ -103,16 +105,14 @@ public class POLICY

cs

	public const int trash_no = 2702;

	public const int noDM = 2708; 

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

SKILL

@@ -1,16 +1,14 @@

cs
public class SKILL
{
	public const int tactics = 132; 

	public const int shield = 123; 

	public const int twowield = 131;

	public const int twohand = 130;

	public const int fireproof = 50; 
	public const int shield = 123; 

	public const int armorLight = 120; 
	public const int armorHeavy = 122; 

	public const int fireproof = 50; 

	public const int weaponBlunt = 111;

@@ -18,15 +16,17 @@ public class SKILL

cs

	public const int weaponCrossbow = 109;

	public const int marksman = 133; 
	public const int acidproof = 51; 

	public const int armorHeavy = 122; 
	public const int tactics = 132; 

	public const int eyeofmind = 134; 
	public const int armorLight = 120; 

	public const int parasite = 227; 
	public const int marksman = 133; 

	public const int evasion = 150; 
	public const int fishing = 245; 

	public const int strategy = 135; 

	public const int climbing = 242;

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

cs

	public const int digging = 230;

	public const int acidproof = 51; 

	public const int riding = 226;

	public const int lumberjack = 225;

@@ -58,7 +56,9 @@ public class SKILL

cs

	public const int evasionPlus = 151;

	public const int strategy = 135; 
	public const int evasion = 150; 

	public const int eyeofmind = 134; 

	public const int PDR = 55;

@@ -66,7 +66,7 @@ public class SKILL

cs

	public const int evasionPerfect = 57;

	public const int fishing = 245; 
	public const int life = 60; 

	public const int mana = 61;

@@ -124,13 +124,13 @@ public class SKILL

cs

	public const int weaponDagger = 107;

	public const int life = 60; 
	public const int throwing = 108; 

	public const int CHA = 77;

	public const int gathering = 250;

	public const int throwing = 108; 
	public const int parasite = 227; 

	public const int blacksmith = 256;

@@ -184,7 +184,7 @@ public class SKILL

cs

	public const int resCut = 964;

	public const int resDecay = 970; 
	public const int resImpact = 965; 

	public const int resDamage = 971;

@@ -196,7 +196,7 @@ public class SKILL

cs

	public const int eleMind = 914;

	public const int resImpact = 965; 
	public const int resDecay = 970; 

	public const int eleLightning = 912;

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

cs

	public const int cooking = 287;

	public const int eleDarkness = 913; 

	public const int appraising = 289;

	public const int anatomy = 290;

@@ -238,6 +236,8 @@ public class SKILL

cs

	public const int eleFire = 910;

	public const int env = 313; 

	public const int disarmTrap = 293;

	public const int fun = 312;

@@ -246,7 +246,7 @@ public class SKILL

cs

	public const int hygine = 310;

	public const int env = 313; 
	public const int eleDarkness = 913; 

	public const int faith = 306;

@@ -258,26 +258,26 @@ public class SKILL

cs

	public const int controlmana = 302;

	public const int meditation = 301; 

	public const int memorization = 307;

	public const int meditation = 301; 

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

SLOT

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

cs
public class SLOT
{
	public const int waist = 37; 

	public const int neck = 31; 

	public const int token = 43; 

	public const int arm = 34; 
	public const int toolbelt = 44; 

	public const int torso = 32;

	public const int range = 41; 
	public const int foot = 39; 

	public const int toolbelt = 44; 
	public const int lightsource = 45; 

	public const int leg = 38;

	public const int foot = 39; 
	public const int arm = 34; 

	public const int tool = 40; 
	public const int waist = 37; 

	public const int lightsource = 45; 
	public const int tool = 40; 

	public const int back = 33;

	public const int hand = 35; 

	public const int neck = 31; 

	public const int finger = 36;

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

	public const int head = 30;

	public const int hand = 35; 
	public const int ammo = 42; 

	public const int token = 43; 

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

SPELL

@@ -1,73 +1,57 @@

cs
public class SPELL
{
	public const int bolt_Nether = 50306; 

	public const int ball_Nerve = 50108; 

	public const int ball_Nether = 50106; 

	public const int hand_Nether = 50406; 

	public const int arrow_Nether = 50506; 

	public const int funnel_Nether = 50606; 
	public const int ball_Sound = 50107; 

	public const int puddle_Sound = 50907; 
	public const int puddle_Darkness = 50903; 

	public const int miasma_Sound = 50707; 
	public const int bolt_Sound = 50307; 

	public const int hand_Sound = 50407;

	public const int miasma_Nether = 50706; 

	public const int weapon_Nether = 50806; 

	public const int puddle_Nether = 50906; 

	public const int ball_Sound = 50107; 
	public const int arrow_Sound = 50507; 

	public const int funnel_Sound = 50607;

	public const int arrow_Sound = 50507; 
	public const int miasma_Sound = 50707; 

	public const int weapon_Sound = 50807;

	public const int bolt_Sound = 50307; 

	public const int hand_Mind = 50404; 

	public const int weapon_Poison = 50805; 
	public const int ball_Nerve = 50108; 

	public const int bolt_Darkness = 50303; 
	public const int weapon_Darkness = 50803; 

	public const int hand_Darkness = 50403; 
	public const int ball_Holy = 50109; 

	public const int arrow_Darkness = 50503; 
	public const int bolt_Nerve = 50308; 

	public const int funnel_Darkness = 50603; 
	public const int hand_Nerve = 50408; 

	public const int miasma_Darkness = 50703; 
	public const int arrow_Nerve = 50508; 

	public const int weapon_Darkness = 50803; 
	public const int funnel_Nerve = 50608; 

	public const int puddle_Darkness = 50903; 
	public const int miasma_Nerve = 50708; 

	public const int ball_Mind = 50104; 
	public const int weapon_Nerve = 50808; 

	public const int bolt_Mind = 50304; 
	public const int puddle_Nerve = 50908; 

	public const int puddle_Poison = 50905; 
	public const int puddle_Sound = 50907; 

	public const int arrow_Mind = 50504; 
	public const int puddle_Nether = 50906; 

	public const int miasma_Mind = 50704; 
	public const int ball_Mind = 50104; 

	public const int weapon_Mind = 50804; 
	public const int miasma_Nether = 50706; 

	public const int puddle_Mind = 50904;

	public const int miasma_Mind = 50704; 

	public const int ball_Poison = 50105;

	public const int funnel_Mind = 50604; 

	public const int bolt_Poison = 50305;

	public const int hand_Poison = 50405;

@@ -76,40 +60,46 @@ public class SPELL

cs

	public const int funnel_Poison = 50605;

	public const int arrow_Mind = 50504; 

	public const int miasma_Poison = 50705;

	public const int funnel_Mind = 50604; 
	public const int hand_Mind = 50404; 

	public const int bolt_Nerve = 50308; 
	public const int weapon_Poison = 50805; 

	public const int bolt_Ether = 50312; 
	public const int puddle_Poison = 50905; 

	public const int arrow_Nerve = 50508; 
	public const int ball_Nether = 50106; 

	public const int puddle_Magic = 50911; 
	public const int bolt_Mind = 50304; 

	public const int ball_Ether = 50112; 
	public const int bolt_Nether = 50306; 

	public const int hand_Ether = 50412; 
	public const int hand_Nether = 50406; 

	public const int arrow_Ether = 50512; 
	public const int arrow_Nether = 50506; 

	public const int funnel_Ether = 50612; 
	public const int funnel_Nether = 50606; 

	public const int miasma_Ether = 50712; 
	public const int weapon_Nether = 50806; 

	public const int weapon_Ether = 50812; 
	public const int weapon_Mind = 50804; 

	public const int puddle_Ether = 50912;

	public const int hand_Holy = 50409; 

	public const int miasma_Darkness = 50703; 

	public const int ball_Acid = 50113;

	public const int bolt_Acid = 50313;

	public const int weapon_Magic = 50811; 

	public const int hand_Acid = 50413;

	public const int arrow_Acid = 50513; 

	public const int funnel_Acid = 50613;

	public const int miasma_Acid = 50713;

@@ -130,27 +120,29 @@ public class SPELL

cs

	public const int miasma_Cut = 50714;

	public const int arrow_Acid = 50513; 
	public const int weapon_Cut = 50814; 

	public const int miasma_Magic = 50711; 
	public const int puddle_Cut = 50914; 

	public const int funnel_Magic = 50611; 
	public const int ball_Impact = 50115; 

	public const int arrow_Magic = 50511; 
	public const int bolt_Impact = 50315; 

	public const int funnel_Nerve = 50608; 
	public const int hand_Impact = 50415; 

	public const int miasma_Nerve = 50708; 
	public const int arrow_Impact = 50515; 

	public const int weapon_Nerve = 50808; 
	public const int funnel_Impact = 50615; 

	public const int puddle_Nerve = 50908; 
	public const int miasma_Impact = 50715; 

	public const int ball_Holy = 50109; 
	public const int weapon_Ether = 50812; 

	public const int bolt_Holy = 50309; 
	public const int miasma_Ether = 50712; 

	public const int hand_Holy = 50409; 
	public const int funnel_Ether = 50612; 

	public const int arrow_Ether = 50512; 

	public const int arrow_Holy = 50509;

@@ -174,9 +166,9 @@ public class SPELL

cs

	public const int miasma_Chaos = 50710;

	public const int weapon_Chaos = 50810; 
	public const int bolt_Holy = 50309; 

	public const int puddle_Chaos = 50910; 
	public const int weapon_Chaos = 50810; 

	public const int ball_Magic = 50111;

@@ -184,15 +176,29 @@ public class SPELL

cs

	public const int hand_Magic = 50411;

	public const int hand_Nerve = 50408; 
	public const int arrow_Magic = 50511; 

	public const int ball_Darkness = 50103; 
	public const int funnel_Magic = 50611; 

	public const int SpEarthquake = 9151; 
	public const int miasma_Magic = 50711; 

	public const int weapon_Lightning = 50802; 
	public const int weapon_Magic = 50811; 

	public const int SpReconstruction = 8288; 
	public const int puddle_Magic = 50911; 

	public const int ball_Ether = 50112; 

	public const int bolt_Ether = 50312; 

	public const int hand_Ether = 50412; 

	public const int puddle_Chaos = 50910; 

	public const int funnel_Darkness = 50603; 

	public const int SpDrawMetal = 9502; 

	public const int hand_Darkness = 50403; 

	public const int SpLevitate = 8300;

@@ -216,9 +222,9 @@ public class SPELL

cs

	public const int SpRevive = 8430;

	public const int SpHOT = 8450; 
	public const int SpReconstruction = 8288; 

	public const int SpRestoreBody = 8470; 
	public const int SpHOT = 8450; 

	public const int SpRestoreMind = 8471;

@@ -238,15 +244,19 @@ public class SPELL

cs

	public const int SpHero = 8504;

	public const int SpChangeMaterialG = 8286; 

	public const int SpResEle = 8506;

	public const int SpChangeMaterial = 8285; 
	public const int SpSpeedUp = 8510; 

	public const int SpFaith = 8281; 
	public const int SpRestoreBody = 8470; 

	public const int weapon_Cut = 50814; 
	public const int SpSilence = 8700; 

	public const int SpChangeMaterialG = 8286; 

	public const int SpChangeMaterialLesser = 8284; 

	public const int weapon_Impact = 50815; 

	public const int ball_ = 7001;

@@ -268,9 +278,9 @@ public class SPELL

cs

	public const int SpTeleportShort = 8201;

	public const int SpReturn = 8220; 
	public const int SpChangeMaterial = 8285; 

	public const int SpEvac = 8221; 
	public const int SpReturn = 8220; 

	public const int SpIdentify = 8230;

@@ -292,19 +302,15 @@ public class SPELL

cs

	public const int SpLighten = 8280;

	public const int SpChangeMaterialLesser = 8284; 
	public const int SpFaith = 8281; 

	public const int puddle_Lightning = 50902; 
	public const int SpEvac = 8221; 

	public const int SpSpeedUp = 8510; 
	public const int arrow_Darkness = 50503; 

	public const int SpWeakness = 8702;

	public const int SpDrawBacker = 9503; 

	public const int ball_Fire = 50100; 

	public const int bolt_Fire = 50300; 
	public const int SpBane = 8706; 

	public const int hand_Fire = 50400;

@@ -328,9 +334,9 @@ public class SPELL

cs

	public const int funnel_Cold = 50601;

	public const int miasma_Cold = 50701; 
	public const int bolt_Fire = 50300; 

	public const int weapon_Cold = 50801; 
	public const int miasma_Cold = 50701; 

	public const int puddle_Cold = 50901;

@@ -346,17 +352,21 @@ public class SPELL

cs

	public const int miasma_Lightning = 50702;

	public const int SpDrawMetal = 9502; 
	public const int weapon_Lightning = 50802; 

	public const int SpSilence = 8700; 
	public const int puddle_Lightning = 50902; 

	public const int SpDrawMonster = 9501; 
	public const int ball_Darkness = 50103; 

	public const int SpShutterHex = 9200; 
	public const int bolt_Darkness = 50303; 

	public const int weapon_Cold = 50801; 

	public const int SpWeakResEle = 8704;

	public const int SpBane = 8706; 
	public const int ball_Fire = 50100; 

	public const int SpDrawMonster = 9501; 

	public const int SpGravity = 8708;

@@ -380,9 +390,9 @@ public class SPELL

cs

	public const int SpSummon = 9000;

	public const int SpSummonUndeadSister = 9001; 
	public const int SpDrawBacker = 9503; 

	public const int SpSummonFire = 9002; 
	public const int SpSummonUndeadSister = 9001; 

	public const int SpSummonTentacle = 9003;

@@ -398,35 +408,41 @@ public class SPELL

cs

	public const int SpMeteor = 9150;

	public const int SpEarthquake = 9151; 

	public const int SpExterminate = 9160;

	public const int SpShutterHex = 9200; 

	public const int SpWardMonster = 9500;

	public const int puddle_Cut = 50914; 
	public const int SpSummonFire = 9002; 

	public const int puddle_Impact = 50915; 

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

SourceElement

@@ -355,7 +355,7 @@ public override void OnAfterImportData()

cs
	}
	int num = 50000;
	int num2 = 0;
	for (int i = 910; i < 925; i++) 
	for (int i = 910; i < 926; i++) 
	{
		Row ele = EClass.sources.elements.map[i];
		AddRow(ele, num + num2 + 100, "ball_");

SourceManager

@@ -166,7 +166,7 @@ public void Init()

cs
	ACT.Init();
	TimeTable.Init();
	Element.ListAttackElements.Clear();
	for (int j = 910; j < 925; j++) 
	for (int j = 910; j < 926; j++) 
	{
		Element.ListAttackElements.Add(EMono.sources.elements.map[j]);
	}

TraitChara

@@ -16,7 +16,17 @@ public enum Adv_Type

cs

	public virtual AI_Idle.Behaviour IdleBehaviour => AI_Idle.Behaviour.Default;

	public virtual bool CanAutoRevive => owner.isImported; 
	public virtual bool CanAutoRevive 
	{ 
		get 
		{ 
			if (owner.isImported && !owner.isDestroyed) 
			{ 
				return !owner.IsGlobal; 
			} 
			return false; 
		} 
	} 

	public virtual bool IsCitizen => false;

TraitManager

@@ -68,18 +68,18 @@ public List<T> List<T>(Func<T, bool> func = null) where T : Trait

cs
	List<T> list = new List<T>();
	if (func == null)
	{
		foreach (Card value in traitSet.Values) 
		foreach (Card item in traitSet) 
		{
			list.Add(value.trait as T); 
			list.Add(item.trait as T); 
		}
	}
	else
	{
		foreach (Card value2 in traitSet.Values) 
		foreach (Card item2 in traitSet) 
		{
			if (func(value2.trait as T)) 
			if (func(item2.trait as T)) 
			{
				list.Add(value2.trait as T); 
				list.Add(item2.trait as T); 
			}
		}
	}

TraitMannequin

@@ -2,6 +2,8 @@

cs

public class TraitMannequin : TraitItem
{
	public override bool CanStack => false; 

	public override bool UseAltTiles => owner.things.Count > 0;

	public override bool CanUseFromInventory => false;

@@ -58,6 +60,7 @@ public override bool OnUse(Chara c)

cs
			}
		}
	}
	owner.Dye((owner.things.Count > 0) ? owner.things[0].material : null); 
	SE.Equip();
	return true;
}

TraitMap

@@ -1,44 +1,14 @@

cs
using System; 
using System.Collections.Generic;
using System.Linq;

public class TraitMap : Dictionary<int, Trait> 
public class TraitMap : HashSet<Card> 
{
	public void Add(Card c) 
	{ 
		Add(c.uid, c.trait); 
	} 

	public void Remove(Card c) 
	{ 
		Remove(c.uid); 
	} 

	public Card GetRandom() 
	{ 
		return this.RandomItem()?.owner; 
	} 

	public Card GetRandom(Func<Trait, bool> func) 
	{ 
		if (func == null) 
		{ 
			return GetRandom(); 
		} 
		return base.Values.Where(func).RandomItem()?.owner; 
	} 

	public Card GetRandomInstalled()
	{
		if (base.Count == 0)
		{
			return null;
		}
		return base.Values.Where((Trait a) => a.owner.placeState == PlaceState.installed).RandomItem()?.owner; 
	} 

	public bool Contains(Card c) 
	{ 
		return ContainsKey(c.uid); 
		return this.Where((Card a) => a.placeState == PlaceState.installed).RandomItem(); 
	}
}

TraitNote

@@ -1,5 +1,10 @@

cs
public class TraitNote : Trait
{
	public override bool CanStackTo(Thing to) 
	{ 
		return owner.c_note == to.c_note; 
	} 

	public override void OnCreate(int lv)
	{
		if (GetParam(1) != null)

TraitSet

@@ -2,18 +2,8 @@

cs
using System.Collections.Generic;
using System.Linq;

public class TraitSet : Dictionary<int, Card> 
public class TraitSet : HashSet<Card> 
{
	public void Add(Card c) 
	{ 
		Add(c.uid, c); 
	} 

	public void Remove(Card c) 
	{ 
		Remove(c.uid); 
	} 

	public Trait GetRandom()
	{
		return this.RandomItem()?.trait;

@@ -30,11 +20,6 @@ public Trait GetRandom(Func<Card, bool> func)

cs
		{
			return GetRandom();
		}
		return base.Values.Where(func).RandomItem()?.trait; 
	} 

	public bool Contains(Card c) 
	{ 
		return ContainsKey(c.uid); 
		return this.Where(func).RandomItem()?.trait; 
	}
}

TraitToolButcher

@@ -6,7 +6,7 @@ public override void TrySetHeldAct(ActPlan p)

cs
{
	foreach (Chara chara in p.pos.Charas)
	{
		if (chara.IsPCParty || !chara.IsPCFaction) 
		if (!chara.IsPCFaction || chara.IsPC) 
		{
			continue;
		}

VirtualDate

@@ -54,9 +54,9 @@ public BranchMap GetBranchMap()

cs
public void BuildSunMap()
{
	sunMap = new HashSet<int>();
	foreach (Trait value in EClass._map.props.installed.traits.suns.Values) 
	foreach (Card sun in EClass._map.props.installed.traits.suns) 
	{
		foreach (Point item in value.ListPoints(null, onlyPassable: false)) 
		foreach (Point item in sun.trait.ListPoints(null, onlyPassable: false)) 
		{
			sunMap.Add(item.index);
		}