Skip to content

EA 23.233 Nightly Patch 1

November 11, 2025

25 files modified. 2 new files created.

Important Changes

None.

AI_Fish

public static Thing Makefish(Chara c)

cs
			c.Say("bigCatch", c);
		}
		num2 = (num7 ? num5 : EClass.rnd(num5)) / (num4 + 1) + 1;
		if (thing.id == "65" && EClass.rnd(EClass.debug.enable ? 2 : (c.IsPC ? 8192 : 819200)) == 0) 
		if (thing.id == "65" && EClass.rnd(EClass.debug.enable ? 2 : (c.IsPCParty ? 8192 : 819200)) == 0) 
		{
			thing = ThingGen.Create("65_gold", -1, lv);
			num2 = 1;

AI_Idle

public override IEnumerable<Status> Run()

cs
			}
		}
	}
	if (owner.IsMinion && owner.master != null && owner.master.id == "keeper_garden" && !(owner.master.ai is GoalCombat)) 
	{ 
		owner.Banish(owner.master); 
		yield return Success(); 
	} 
	if (EClass._zone.IsPCFaction)
	{
		Room room = owner.pos.cell.room;

public override IEnumerable<Status> Run()

cs
		Thing thing6 = owner.things.Find<TraitBall>();
		if (thing6 == null)
		{
			owner.pos.ForeachNeighbor(delegate(Point p) 
			if (!LayerCraft.Instance && !LayerDragGrid.Instance) 
			{
				Card card2 = p.FindThing<TraitBall>()?.owner; 
				if (card2 != null) 
				owner.pos.ForeachNeighbor(delegate(Point p) 
				{
					owner.Pick(card2.Thing); 
				} 
			}); 
					Card card2 = p.FindThing<TraitBall>()?.owner; 
					if (card2 != null) 
					{ 
						owner.Pick(card2.Thing); 
					} 
				}); 
			} 
		}
		else
		{

ActEffect

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

cs
			bool flag5 = EClass._zone.HasLaw && !EClass._zone.IsPCFaction && (CC.IsPC || (id == EffectId.Explosive && actref.refThing == null)) && !(EClass._zone is Zone_Vernis);
			if (p.HasObj && p.cell.matObj.hardness <= num7)
			{
				EClass._map.MineObj(p, null, CC.Chara); 
				EClass._map.MineObj(p); 
				if (flag5)
				{
					EClass.player.ModKarma(-1);

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

cs
			}
			if (!p.HasObj && p.HasBlock && p.matBlock.hardness <= num7)
			{
				EClass._map.MineBlock(p, recoverBlock: false, CC.Chara); 
				EClass._map.MineBlock(p); 
				if (flag5)
				{
					EClass.player.ModKarma(-1);

ActPlan

public void _Update(PointTarget target)

cs
					{
						TrySetAct("ActBanishSummon", delegate
						{
							Banish(c2); 
							c2.Banish(EClass.pc); 
							return true;
						}, c2, null, 99);
						List<Chara> list2 = new List<Chara>();

public void _Update(PointTarget target)

cs
							{
								foreach (Chara item in list2)
								{
									Banish(item); 
									item.Banish(EClass.pc); 
								}
								return true;
							}, c2, null, 99);

void func()

cs
				WidgetCurrentTool.Instance.placer.Refresh();
			}
		}
		static void Banish(Chara m) 
		{ 
			EClass.pc.Say("summon_vanish", m); 
			m.pos.PlayEffect("vanish"); 
			m.pos.PlaySound("vanish"); 
			m.pos.PlayEffect("teleport"); 
			m.Destroy(); 
		} 
	}
}

ActPray

public static bool TryPray(Chara c, bool passive = false)

cs
			return true;
		}
	}
	if (c.faith.IsEyth) 
	if (c.faith.IsEyth && !c.HasElement(1228)) 
	{
		c.Say("pray", c);
		if (passive && c.Evalue(1655) >= 2 && EClass.pc.party.members.Count > 1)

ActThrow

public static EffectIRenderer Throw(Card c, Point p, Card target, Thing t, Throw

cs
		TraitMonsterBall traitMonsterBall = t.trait as TraitMonsterBall;
		if (traitMonsterBall.chara != null)
		{
			if ((traitMonsterBall.IsLittleBall && !(EClass._zone is Zone_LittleGarden) && !EClass.game.IsSurvival) || (traitMonsterBall.IsDuponneBall && !(EClass._zone is Zone_Exile) && !EClass.game.IsSurvival)) 
			if ((traitMonsterBall.IsLittleBall && !(EClass._zone is Zone_LittleGarden) && !EClass.game.IsSurvival) || (traitMonsterBall.IsDuponneBall && !(EClass._zone is Zone_Exile) && !EClass.game.IsSurvival) || (traitMonsterBall.IsSilvercatBall && !(EClass._zone.id == "startVillage2") && !EClass.game.IsSurvival)) 
			{
				break;
			}

Card

public void PurgeDuplicateArtifact(Thing af)

cs
	{
		list.Add(chara);
	}
	foreach (Chara item in list) 
	if (EClass.pc.IsEyth && EClass.pc.HasElement(1228)) 
	{
		if (!item.IsPCFactionOrMinion) 
		foreach (Chara item in list) 
		{ 
			if (item.IsPCFactionOrMinion) 
			{ 
				List<Thing> list2 = item.things.List((Thing t) => t.HasTag(CTAG.godArtifact) && t != af && !t.isReplica && t.c_idDeity == EClass.pc.faith.id); 
				if (list2.Count != 0) 
				{ 
					foreach (Thing item2 in list2) 
					{ 
						Msg.Say("destroyed_inv_", item2, item); 
						item2.Destroy(); 
					} 
				} 
			} 
		} 
		return; 
	} 
	foreach (Chara item3 in list) 
	{ 
		if (!item3.IsPCFactionOrMinion) 
		{
			continue;
		}
		List<Thing> list2 = item.things.List((Thing t) => t.id == af.id && t != af && !t.isReplica); 
		if (list2.Count == 0) 
		List<Thing> list3 = item3.things.List((Thing t) => t.id == af.id && t != af && !t.isReplica); 
		if (list3.Count == 0) 
		{
			continue;
		}
		foreach (Thing item2 in list2) 
		foreach (Thing item4 in list3) 
		{
			Msg.Say("destroyed_inv_", item2, item); 
			item2.Destroy(); 
			Msg.Say("destroyed_inv_", item4, item3); 
			item4.Destroy(); 
		}
	}
}

CardBlueprint

public class CardBlueprint : EClass

cs
		tryLevelMatTier = true
	};

	public static CardBlueprint Original = new CardBlueprint
	{ 
		blesstedState = BlessedState.Normal 
	}; 
	public static CardBlueprint DebugEQ = new CardBlueprint
	{
		rarity = Rarity.Mythical,

CardRenderer

public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)

cs
		}
		if (owner.trait is TraitFigure)
		{
			if (!owner.c_idRefCard.IsEmpty() && (owner.IsInstalled || EClass.pc.held == owner || !owner.ExistsOnMap || owner.isRoofItem)) 
			if (!owner.c_idRefCard.IsEmpty() && (owner.IsInstalled || (EClass.pc.held != owner && !owner.ExistsOnMap) || owner.isRoofItem)) 
			{
				TraitFigure traitFigure = owner.trait as TraitFigure;
				SourceChara.Row row = EClass.sources.charas.map.TryGetValue(owner.c_idRefCard) ?? EClass.sources.charas.map["putty"];

Chara

public bool CanBeTempAlly(Chara c)

cs
		return true;
	}

	public void Banish(Chara owner) 
	{ 
		owner?.Say("summon_vanish", this); 
		pos.PlayEffect("vanish"); 
		pos.PlaySound("vanish"); 
		pos.PlayEffect("teleport"); 
		Destroy(); 
	} 
	public void MakeMinion(Chara _master, MinionType type = MinionType.Default)
	{
		ReleaseMinion();

public void ModHeight(int a)

cs
{
	if (!HasElement(450))
	{
		int height = bio.height; 
		height = height * (100 + a) / 100 + ((a > 0) ? 1 : (-1)); 
		if (height < 1) 
		long num = bio.height; 
		num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1)); 
		if (num < 1) 
		{
			height = 1; 
			num = 1L; 
		}
		if (height != bio.height) 
		if (num > 999999999) 
		{
			bio.height = height; 
			num = 999999999L; 
		} 
		if (num != bio.height) 
		{ 
			bio.height = (int)num; 
			Say((a > 0) ? "height_gain" : "height_lose", this);
		}
	}

public void ModWeight(int a, bool ignoreLimit = false)

cs
	{
		return;
	}
	int weight = bio.weight; 
	int height = bio.height; 
	int num = height * height * 18 / 25000; 
	int num2 = height * height * 24 / 10000; 
	if (ignoreLimit || (weight > num && weight < num2)) 
	long num = bio.weight; 
	long num2 = bio.height; 
	long num3 = num2 * num2 * 18 / 25000; 
	long num4 = num2 * num2 * 24 / 10000; 
	if (ignoreLimit || (num > num3 && num < num4)) 
	{
		weight = weight * (100 + a) / 100 + ((a > 0) ? 1 : (-1)); 
		if (weight < 1) 
		num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1)); 
		if (num < 1) 
		{ 
			num = 1L; 
		} 
		if (num > 999999999) 
		{
			weight = 1; 
			num = 999999999L; 
		}
		if (weight != bio.weight) 
		if (num != bio.weight) 
		{
			bio.weight = weight; 
			bio.weight = (int)num; 
			Say((a > 0) ? "weight_gain" : "weight_lose", this);
		}
	}

+ConTransmuteBat

File Created
cs
public class ConTransmuteBat : ConTransmute
{
	public override RendererReplacer GetRendererReplacer()
	{
		return RendererReplacer.CreateFrom("bat_vampire");
	}
}

DramaCustomSequence

public void Build(Chara c)

cs
	{
		if (!c.trait.CanInvite)
		{
			TempTalkTopic("invite2", StepDefault); 
			string[] recruitItems = c.source.recruitItems; 
			if (!recruitItems.IsEmpty()) 
			{ 
				string[] array3 = recruitItems[0].Split('/'); 
				string reqId = array3[0]; 
				int reqNum = array3[1].ToInt(); 
				CardBlueprint.Set(CardBlueprint.Original); 
				GameLang.refDrama1 = ThingGen.Create(reqId).SetNum(reqNum).Name; 
				TempTalkTopic("inviteReq1", null); 
				foreach (Thing t2 in EClass.pc.things.List((Thing t) => t.id == reqId && t.Num >= reqNum, onlyAccessible: true)) 
				{ 
					Thing _t5 = t2; 
					Choice("daDeliver".lang("", _t5.GetName(NameStyle.Full, _t5.Num)), delegate
					{ 
						t2.ModNum(-reqNum); 
						TempTalk("hired", StepEnd); 
						EClass.Sound.Play("good"); 
						c.MakeAlly(); 
					}).SetOnTooltip(delegate(UITooltip a) 
					{ 
						_t5.WriteNote(a.note); 
					}); 
				} 
				Choice("no2", StepDefault, cancel: true).SetOnClick(RumorChill); 
			} 
			else
			{ 
				TempTalkTopic("invite2", StepDefault); 
			} 
		}
		else if (c.GetBestAttribute() > EClass.pc.CHA && !EClass.debug.godMode)
		{

FoodEffect

public static void Proc(Chara c, Thing food, bool consume = true)

cs
	}
	if (c.HasElement(1200))
	{
		num2 *= 1.25f; 
		num2 *= 1f + (float)c.Evalue(1200) + 0.25f; 
	}
	if (!c.IsPC)
	{

public static void Proc(Chara c, Thing food, bool consume = true)

cs
				{
					break;
				}
				goto IL_0f01; 
				goto IL_0f19; 
			case "love":
				ActEffect.LoveMiracle(c, EClass.pc, value.Value * 10);
				break;

public static void Proc(Chara c, Thing food, bool consume = true)

cs
	{
		food.trait.OnDrink(c);
	}
	goto IL_0f01; 
	IL_0f01: 
	goto IL_0f19; 
	IL_0f19: 
	if (!consume)
	{
		return;

GoalCombat

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

cs
			}
			break;
		case 6627:
			if (Act.CC.GetNearbyCatToSniff() == null || Act.CC.HasCondition<ConHOT>()) 
			if (owner.GetNearbyCatToSniff() == null || owner.HasCondition<ConHOT>()) 
			{
				continue;
			}

GrowSystem

public void PopHarvest(Chara c, Thing t = null, int num = -1)

cs
		{
			t.SetNum(num);
		}
		if (c == null || EClass.player.isAutoFarming) 
		{ 
			TryPick(cell, t, c); 
		} 
		else
		{ 
			c.Pick(t); 
		} 
		TryPick(cell, t, c); 
	}

	public void ApplySeed(Thing t)

HotItemNoItem

public static bool _TrySetAct(ActPlan p)

cs
					EClass.player.RefreshCurrentHotItem();
					ActionMode.Adv.planRight.Update(ActionMode.Adv.mouseTarget);
					EClass.pc.renderer.Refresh();
					HotItemHeld.disableTool = true; 
				}
			}
			return true;

Map

public void TrySmoothPick(Point p, Thing t, Chara c)

cs
	{
		EClass.pc.PickOrDrop(p, t);
	}
	else if (c != null && c.IsPC && (c.pos.Equals(p) || EClass.core.config.game.smoothPick || EClass._zone.IsRegion)) 
	else if (c != null && c.IsPC && (c.pos.Equals(p) || (EClass.core.config.game.smoothPick && c.Dist(p) <= 1) || EClass._zone.IsRegion)) 
	{
		c.PickOrDrop(p, t);
	}

POLICY

public class POLICY

cs

	public const int mass_exhibition = 2814;

	public const int faith_tax = 2501; 
	public const int food_for_people = 2502; 

	public const int bed_quality = 2812;

public class POLICY

cs

	public const int self_sufficient = 2511;

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

	public const int nocturnal_life = 2508; 
	public const int vaccination = 2509; 

	public const int stop_growth = 2515;

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

	public const int legal_drug = 2505;

public class POLICY

cs

	public const int prohibition = 2503;

	public const int food_for_people = 2502; 
	public const int wealth_tax = 2500;

	public const int suite_room = 2813;

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

	public const int speed_growth = 2516;

	public const int ban_radio = 2510; 
	public const int faith_tax = 2501; 

	public const int trash_sort = 2701;

public class POLICY

cs

	public const int open_business = 2810;

	public const int energy_conservation = 2700; 
	public const int home_discount = 2800;

	public const int livestock_priv = 2715;

	public const int forcePanty = 2712; 
	public const int energy_conservation = 2700; 
	public const int incomeTransfer = 2711; 

	public const int noMother = 2710;

	public const int noAnimal = 2709; 
	public const int forcePanty = 2712; 

	public const int incomeTransfer = 2711; 
	public const int noDM = 2708; 

	public const int auto_farm = 2707;

public class POLICY

cs

	public const int trash_no = 2702;

	public const int noDM = 2708; 
	public const int noAnimal = 2709; 

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

Religion

public static Thing Reforge(string id, Point pos = null, bool first = true)

cs
			break;
		}
	}
	if (EClass.pc.IsEyth && EClass.pc.HasElement(1228)) 
	{ 
		thing.c_idDeity = EClass.game.religions.Eyth.id; 
	} 
	EClass._zone.AddCard(thing, pos);
	pos.PlayEffect("aura_heaven");
	if (first)

SKILL

public class SKILL

cs
public class SKILL
{
	public const int twohand = 130; 
	public const int eyeofmind = 134;

	public const int marksman = 133;

public class SKILL

cs

	public const int twowield = 131;

	public const int twohand = 130; 
	public const int shield = 123;

	public const int weaponDagger = 107; 
	public const int throwing = 108; 

	public const int armorLight = 120;

public class SKILL

cs

	public const int weaponCrossbow = 109;

	public const int throwing = 108; 
	public const int strategy = 135;

	public const int weaponDagger = 107; 
	public const int armorHeavy = 122;

	public const int evasion = 150;

	public const int climbing = 242; 
	public const int riding = 226; 

	public const int stealth = 152;

public class SKILL

cs

	public const int lumberjack = 225;

	public const int riding = 226; 
	public const int parasite = 227;

	public const int digging = 230;

public class SKILL

cs

	public const int weaponPolearm = 106;

	public const int climbing = 242; 
	public const int evasionPlus = 151;

	public const int weaponGun = 105;

public class SKILL

cs

	public static readonly int[] IDS = new int[133]
	{
		130, 134, 133, 132, 131, 123, 107, 120, 111, 110, 
		109, 108, 135, 122, 150, 242, 152, 200, 207, 210, 
		220, 225, 226, 227, 230, 235, 237, 240, 241, 106, 
		134, 133, 132, 131, 130, 123, 108, 120, 111, 110, 
		109, 135, 107, 122, 150, 226, 152, 200, 207, 210, 
		220, 225, 227, 230, 235, 237, 240, 241, 106, 242, 
		151, 105, 73, 103, 50, 51, 55, 56, 57, 60,
		61, 64, 65, 66, 67, 68, 70, 71, 104, 72,
		74, 75, 76, 77, 78, 79, 80, 90, 91, 92,

SLOT

public class SLOT

cs

	public const int neck = 31;

	public const int range = 41; 
	public const int head = 30; 

	public const int finger = 36;

	public const int head = 30; 
	public const int range = 41; 

	public const int ammo = 42;

public class SLOT

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

SPELL

public class SPELL

cs
{
	public const int puddle_Holy = 50909;

	public const int bit_Sound = 51107; 
	public const int flare_Sound = 51207;

	public const int ball_Nerve = 50108;

	public const int bit_Mind = 51104; 
	public const int bolt_Nerve = 50308; 
	public const int sword_Mind = 51004; 

	public const int sword_Void = 51016;

	public const int hand_Nerve = 50408; 
	public const int bolt_Nerve = 50308; 

	public const int arrow_Nerve = 50508; 
	public const int hand_Nerve = 50408; 

	public const int sword_Mind = 51004; 
	public const int puddle_Mind = 50904; 

	public const int flare_Holy = 51209; 
	public const int arrow_Nerve = 50508; 

	public const int funnel_Nerve = 50608;

public class SPELL

cs

	public const int weapon_Nerve = 50808;

	public const int sword_Holy = 51009; 
	public const int puddle_Nerve = 50908;

	public const int bit_Sound = 51107; 
	public const int flare_Holy = 51209; 
	public const int sword_Nerve = 51008; 
	public const int sword_Sound = 51007; 

	public const int flare_Nerve = 51208;

	public const int ball_Holy = 50109;

	public const int puddle_Mind = 50904; 
	public const int weapon_Mind = 50804; 

	public const int bolt_Holy = 50309;

	public const int miasma_Mind = 50704; 
	public const int hand_Holy = 50409;

	public const int weapon_Mind = 50804; 
	public const int bit_Holy = 51109; 

	public const int arrow_Holy = 50509;

	public const int bit_Holy = 51109; 
	public const int funnel_Holy = 50609;

	public const int miasma_Holy = 50709;

	public const int weapon_Holy = 50809;

	public const int sword_Nerve = 51008; 
	public const int sword_Holy = 51009; 

	public const int bit_Nerve = 51108;

	public const int puddle_Sound = 50907;

	public const int flare_Mind = 51204; 
	public const int bit_Mind = 51104; 
	public const int miasma_Poison = 50705; 

	public const int weapon_Poison = 50805;

public class SPELL

cs

	public const int bit_Poison = 51105;

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

	public const int funnel_Poison = 50605; 
	public const int flare_Poison = 51205; 

	public const int ball_Nether = 50106;

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

	public const int bolt_Nether = 50306;

	public const int hand_Nether = 50406;

	public const int arrow_Nether = 50506; 
	public const int bolt_Poison = 50305; 

	public const int hand_Poison = 50405; 
	public const int arrow_Nether = 50506; 

	public const int funnel_Nether = 50606;

public class SPELL

cs

	public const int sword_Nether = 51006;

	public const int bolt_Poison = 50305; 
	public const int bit_Nether = 51106;

	public const int flare_Nether = 51206;

	public const int ball_Sound = 50107;

	public const int ball_Chaos = 50110; 
	public const int bolt_Sound = 50307;

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

	public const int ball_Chaos = 50110; 
	public const int hand_Sound = 50407; 

	public const int arrow_Sound = 50507;

public class SPELL

cs

	public const int miasma_Sound = 50707;

	public const int weapon_Sound = 50807; 
	public const int ball_Poison = 50105; 
	public const int flare_Mind = 51204; 

	public const int sword_Sound = 51007; 
	public const int weapon_Sound = 50807; 

	public const int miasma_Poison = 50705; 
	public const int funnel_Poison = 50605; 

	public const int ball_Acid = 50113;

public class SPELL

cs

	public const int funnel_Impact = 50615;

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

	public const int puddle_Void = 50916;

public class SPELL

cs

	public const int bit_Magic = 51111;

	public const int funnel_Mind = 50604; 
	public const int arrow_Mind = 50504; 

	public const int SpIncognito = 8780;

	public const int hand_Mind = 50404; 
	public const int bolt_Mind = 50304; 

	public const int SpWisdom = 8503;

public class SPELL

cs

	public const int SpIdentify = 8230;

	public const int arrow_Mind = 50504; 
	public const int SpDarkness = 8800; 
	public const int hand_Mind = 50404; 

	public const int SpSummon = 9000; 
	public const int SpTransmuteBat = 8793; 

	public const int funnel_Lightning = 50602; 
	public const int SpWeb = 8801; 

	public const int arrow_Lightning = 50502;

public class SPELL

cs

	public const int bolt_Cold = 50301;

	public const int miasma_Lightning = 50702; 
	public const int ball_Cold = 50101;

	public const int weapon_Lightning = 50802; 
	public const int funnel_Lightning = 50602; 

	public const int sword_Lightning = 51002; 
	public const int flare_Fire = 51200; 

	public const int bolt_Mind = 50304; 
	public const int miasma_Lightning = 50702; 
	public const int puddle_Lightning = 50902; 

	public const int ball_Mind = 50104;

public class SPELL

cs

	public const int bit_Lightning = 51102;

	public const int puddle_Lightning = 50902; 
	public const int sword_Lightning = 51002; 

	public const int SpWeb = 8801; 
	public const int weapon_Lightning = 50802; 

	public const int flare_Fire = 51200; 
	public const int SpDarkness = 8800; 

	public const int sword_Fire = 51000; 
	public const int bit_Fire = 51100; 

	public const int SpSummonDragon = 9054; 
	public const int puddle_Fire = 50900; 

	public const int SpSummonMachine = 9053;

public class SPELL

cs

	public const int SpSummonUndeadSister = 9001;

	public const int SpMeteor = 9150; 
	public const int SpSummon = 9000; 

	public const int bit_Fire = 51100; 
	public const int SpSummonDragon = 9054; 

	public const int SpEarthquake = 9151; 
	public const int sword_Fire = 51000; 

	public const int SpMoonArrow = 9156; 
	public const int SpMeteor = 9150; 

	public const int puddle_Fire = 50900; 
	public const int SpMoonSpear = 9155; 

	public const int weapon_Fire = 50800;

public class SPELL

cs

	public const int SpExterminate = 9160;

	public const int SpMoonSpear = 9155; 
	public const int SpMoonArrow = 9156; 
	public const int SpEarthquake = 9151; 

	public const int flare_Void = 51216;

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

SourceChara

public class Row : CardRow

cs

		public string moveAnime;

		public string[] recruitItems; 
		public bool staticSkin;

		public int[] _tiles_snow;

public override Row CreateRow()

cs
		obj.moveAnime = SourceData.GetString(44);
		obj.factory = SourceData.GetStringArray(45);
		obj.components = SourceData.GetStringArray(46);
		obj.detail_JP = SourceData.GetString(47); 
		obj.detail = SourceData.GetString(48); 
		obj.recruitItems = SourceData.GetStringArray(47); 
		obj.detail_JP = SourceData.GetString(48); 
		obj.detail = SourceData.GetString(49); 
		return obj;
	}

TraitAltar

public override void TrySetAct(ActPlan p)

cs

	public override bool CanOffer(Card c)
	{
		if (c != null && c.HasTag(CTAG.godArtifact) && c.c_idDeity == Deity.id) 
		if (c != null && c.HasTag(CTAG.godArtifact) && (c.c_idDeity == Deity.id || (EClass.pc.IsEyth && EClass.pc.HasElement(1228) && Deity == EClass.game.religions.Eyth))) 
		{
			return true;
		}

public void OnOffer(Chara c, Thing t)

cs
		}
		return;
	}
	if (!IsBranchAltar && EClass.pc.IsEyth) 
	if (!IsBranchAltar && EClass.pc.IsEyth && !EClass.pc.HasElement(1228)) 
	{
		EClass.pc.Say("god_offerEyth", owner, t);
		return;

public void OnOffer(Chara c, Thing t)

cs
	}
	else
	{
		if (t.HasTag(CTAG.godArtifact) && t.c_idDeity == Deity.id) 
		if (t.HasTag(CTAG.godArtifact) && (t.c_idDeity == Deity.id || (EClass.pc.IsEyth && EClass.pc.HasElement(1228)))) 
		{
			_ = t.encLV;
			t.Destroy();

public void OnOffer(Chara c, Thing t)

cs
			}
			return;
		}
		if (EClass.pc.IsEyth) 
		if (EClass.pc.IsEyth && !EClass.pc.HasElement(1228)) 
		{
			Msg.Say("nothingHappens");
			return;

public void OnOffer(Chara c, Thing t)

cs
		if (Deity != EClass.pc.faith)
		{
			bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200);
			if (GetParam(1) != null) 
			if (GetParam(1) != null || EClass.pc.IsEyth) 
			{
				Msg.Say("nothingHappens");
				return;

+TraitSilvercat

File Created
cs
public class TraitSilvercat : TraitChara
{
	public override bool CanBeTamed => false;

	public override bool CanInvite => false;

	public override bool IsCountAsResident => true;

	public override bool RemoveGlobalOnBanish => true;
}

TraitUniqueCharaNoJoin

public class TraitUniqueCharaNoJoin : TraitUniqueChara

cs
{
	public override bool CanInvite => false;

	public override bool CanChangeAffinity => false; 
	public override bool CanChangeAffinity => !base.owner.Chara.source.recruitItems.IsEmpty(); 
}

Zone

public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)

cs
		EClass.player.flags.santa++;
	}
	long num3 = ((setting.fixedLv == -1) ? cardRow.LV : setting.fixedLv);
	bool flag = setting.fixedLv != -1 || DangerLvBoost > 0; 
	if (ScaleType == ZoneScaleType.Void)
	{
		num3 = (50L + (long)cardRow.LV) * Mathf.Max(1, (num - 1) / 50);
		flag = true; 
	}
	num3 += DangerLvBoost;
	if (setting.rarity == Rarity.Random && cardRow.quality == 0)

public Chara SpawnMob(Point pos = null, SpawnSetting setting = null)

cs
	}
	CardBlueprint.Set(cardBlueprint);
	Chara chara = CharaGen.Create(cardRow.id, num2);
	if (!flag) 
	{ 
		chara.isScaled = false; 
	} 
	AddCard(chara, pos);
	if (setting.forcedHostility.HasValue)
	{