Skip to content

EA 23.304 Nightly โ€‹

May 9, 2026

18 files modified.

Important Changes โ€‹

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

Card (1) โ€‹

cs
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null) 
public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null, int resistPenetrationLevel = 0) 

CharaBody (1) โ€‹

cs
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool secondSlot = false) 
public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool getSecondSlot = false) 

AI_Fuck โ€‹

public void Finish()

cs
			Thing thing = null;
			for (int j = 0; j < 10; j++)
			{
				thing = target.MakeGene((j < 3) ? DNA.Type.Superior : DNA.Type.Default); 
				for (int k = 0; k < 20; k++) 
				{ 
					thing = target.MakeGene((j < 3) ? DNA.Type.Superior : DNA.Type.Default); 
					if (EClass.rnd(10) < chara.body.slots.Count - 2) 
					{ 
						break; 
					} 
					if (thing.c_DNA.GetBodySlot() != -1) 
					{ 
						if (chara.body.GetSlot(35, onlyEmpty: false) == null && EClass.rnd(2) == 0) 
						{ 
							thing.c_DNA.ReplaceBodySlot(35); 
						} 
						else if (chara.body.GetSlot(32, onlyEmpty: false) == null && EClass.rnd(2) == 0) 
						{ 
							thing.c_DNA.ReplaceBodySlot(32); 
						} 
						break; 
					} 
				} 
				thing.c_DNA.MakeSlimeFood(chara);
				if (thing.c_DNA.GetInvalidAction(chara) != null || thing.c_DNA.GetInvalidFeat(chara) != null)
				{

ActEffect โ€‹

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

cs
		}
		EClass.ui.AddLayer<LayerList>().SetStringList(delegate
		{
			List<string> list11 = new List<string>(); 
			List<string> list12 = new List<string>(); 
			for (int num17 = 0; num17 < 10; num17++)
			{
				list11.Add(AliasGen.GetRandomAlias()); 
				list12.Add(AliasGen.GetRandomAlias()); 
			}
			return list11; 
			return list12; 
		}, delegate(int a, string b)
		{
			c2._alias = b;

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

cs
		{
			break;
		}
		int num9 = 0; 
		int num10 = 0; 
		foreach (Condition condition5 in TC.conditions)
		{
			if (condition5.Type == ConditionType.Debuff)
			{
				num9++; 
				num10++; 
			}
		}
		if (num9 == 0) 
		if (num10 == 0) 
		{
			CC.SayNothingHappans();
			break;

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

cs
		TC.Say("abShutterHex", TC);
		Point center = CC.pos.Copy();
		List<Chara> list4 = TC.pos.ListCharasInRadius(TC, 4, (Chara c) => c == TC || c.IsHostile(CC));
		for (int k = 0; k < num9; k++) 
		for (int k = 0; k < num10; k++) 
		{
			TweenUtil.Delay((float)k * 0.1f, delegate
			{

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

cs
					{
						effect.Play(center, 0f, pos);
					});
					int num10 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item6.DamageHP(num10, 919, power, AttackSource.None, CC, showEffect: false); 
					int num11 = Dice.Create("SpShutterHex", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
					item6.DamageHP(num11, 919, power, AttackSource.None, CC, showEffect: false); 
				}
			}
		}

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

cs
			break;
		}
		Thing thing7 = null;
		bool flag11 = actRef.n1 == "food"; 
		bool flag12 = actRef.n1 == "food"; 
		if (actRef.n1 == "money")
		{
			int currency = TC.GetCurrency();

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

cs
		else
		{
			Func<Thing, bool> func = (Thing t) => true;
			if (flag11) 
			if (flag12) 
			{
				func = (Thing t) => t.IsFood;
			}
			List<Thing> list10 = TC.things.List(delegate(Thing t) 
			List<Thing> list11 = TC.things.List(delegate(Thing t) 
			{
				if (t.parentCard?.trait is TraitChestMerchant || t.trait is TraitTool || t.IsThrownWeapon)
				{

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

cs
				}
				return t.trait.CanBeDestroyed && t.things.Count == 0 && t.invY != 1 && t.trait.CanBeStolen && !t.trait.CanOnlyCarry && !t.IsUnique && !t.isEquipped && t.blessedState == BlessedState.Normal && func(t);
			}, onlyAccessible: true);
			if (list10.Count > 0) 
			if (list11.Count > 0) 
			{
				thing7 = list10.RandomItem(); 
				thing7 = list11.RandomItem(); 
				if (thing7.Num > 1)
				{
					thing7 = thing7.Split(1);

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

cs
			power = power * 2 / 3;
		}
		int a2 = power;
		int num11 = TC.WIL * (isPowerful ? 20 : 5); 
		int num12 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition = TC.GetCondition<ConHolyVeil>();
		if (condition != null)
		{
			num11 += condition.power * 5; 
			num12 += condition.power * 5; 
		}
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num11 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		if (id != EffectId.DebuffKizuami && EClass.rnd(a2) < num12 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		{
			TC.Say("debuff_resist", TC);
			CC.DoHostileAction(TC);

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

cs
			{
				con.SetElement(EClass.sources.elements.alias[actRef.aliasEle].id);
			}
			(con as ConMiasma)?.SetResistPenetrationLevel(TC, CC); 
		}));
		if (n == "ConBane" && CC.HasElement(1416))
		{

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

cs
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int num12 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num12 == 0) 
		int num13 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num13 == 0) 
		{
			num12 = tc.GetInt(118); 
			if (num12 == 0) 
			num13 = tc.GetInt(118); 
			if (num13 == 0) 
			{
				num12 = EClass.game.seed + tc.uid; 
				num13 = EClass.game.seed + tc.uid; 
			}
			num12++; 
			num13++; 
		}
		tc.Say("transBlood", tc);
		tc.Talk("tail");
		tc.c_bloodData = null;
		tc.SetInt(118, num12); 
		tc.SetInt(118, num13); 
		break;
	}
	case EffectId.Youth:
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int age = tc.bio.GetAge(tc.Chara); 
		if (!flag && age <= 0) 
		int age2 = tc.bio.GetAge(tc.Chara); 
		if (!flag && age2 <= 0) 
		{
			tc.SayNothingHappans();
			break;
		}
		age = Mathf.Max(0, age * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0); 
		age2 = Mathf.Max(0, age2 * 100 / (flag ? 75 : (blessed ? 400 : 200))) + (flag ? 1 : 0); 
		tc.Say(flag ? "ageUp" : "ageDown", tc);
		tc.bio.SetAge(tc.Chara, age); 
		tc.bio.SetAge(tc.Chara, age2); 
		break;
	}
	case EffectId.EternalYouth:

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

cs
			tc.SayNothingHappans();
			break;
		}
		int age2 = tc.bio.GetAge(tc.Chara); 
		int age = tc.bio.GetAge(tc.Chara); 
		if (flag)
		{
			if (tc.c_lockedAge != 0)

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

cs
				tc.Say("eternalYouth2", tc);
				tc.c_lockedAge = 0;
				tc.elements.Remove(1243);
				tc.bio.SetAge(tc.Chara, age2); 
				tc.bio.SetAge(tc.Chara, age); 
			}
			Redirect(EffectId.Youth, BlessedState.Cursed, default(ActRef));
		}

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

cs
		{
			tc.PlaySound("dropRewardXmas");
			tc.Say("eternalYouth1", tc);
			tc.c_lockedAge = age2 + 1; 
			tc.c_lockedAge = age + 1; 
			tc.elements.SetBase(1243, 1);
			if (blessed)
			{

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

cs
		break;
	case EffectId.Revive:
	{
		List<KeyValuePair<int, Chara>> list9 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList(); 
		List<KeyValuePair<int, Chara>> list10 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList(); 
		if (TC.IsPCFaction || TC.IsPCFactionMinion)
		{
			if (TC.IsPC && list9.Count == 0) 
			if (TC.IsPC && list10.Count == 0) 
			{
				list9 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList(); 
				list10 = EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.CanRevive() && a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon).ToList(); 
			}
			if (list9.Count > 0) 
			if (list10.Count > 0) 
			{
				list9.RandomItem().Value.Chara.GetRevived(); 
				list10.RandomItem().Value.Chara.GetRevived(); 
				break;
			}
		}

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

cs
	case EffectId.DamageMindGreat:
	case EffectId.Weaken:
	{
		bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat; 
		bool flag11 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat; 
		bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
		int num14 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		int num15 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		if (id == EffectId.Weaken)
		{
			flag12 = EClass.rnd(2) == 0; 
			mind2 = !flag12; 
			num14 = 1; 
			flag11 = EClass.rnd(2) == 0; 
			mind2 = !flag11; 
			num15 = 1; 
		}
		else
		{
			TC.PlayEffect("debuff");
			TC.PlaySound("debuff");
		}
		TC.Say(flag12 ? "damageBody" : "damageMind", TC); 
		for (int m = 0; m < num14; m++) 
		TC.Say(flag11 ? "damageBody" : "damageMind", TC); 
		for (int m = 0; m < num15; m++) 
		{
			TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken); 
			TC.DamageTempElements(power, flag11, mind2, id != EffectId.Weaken); 
		}
		if (TC.IsPC)
		{

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

cs
		{
			EClass.game.religions.Healing.Talk("ability");
		}
		int num15 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		int num9 = Dice.Create((actRef.act != null && EClass.sources.calc.map.ContainsKey(actRef.act.ID)) ? actRef.act.ID : "SpHealLight", power, CC, (actRef.refThing != null) ? null : actRef.act).Roll(); 
		if (actRef.refThing != null)
		{
			num15 = num15 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
			num9 = num9 * (100 + actRef.refThing.Evalue(750) * 10) / 100; 
		}
		if (flag)
		{
			TC.DamageHP(num15 / 2, 919, power); 
			TC.DamageHP(num9 / 2, 919, power); 
			break;
		}
		TC.HealHPHost(num15, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.HealHPHost(num9, (actRef.refThing == null && id != EffectId.JureHeal) ? HealSource.Magic : HealSource.Item); 
		TC.CureHost(CureType.Heal, power, state);
		TC.Say((power >= 300) ? "heal_heavy" : "heal_light", TC);
		break;

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

cs
		break;
	case EffectId.RemoveHex:
	case EffectId.RemoveHexAll:
	{ 
		if (flag)
		{
			Redirect(EffectId.CurseEQ, BlessedState.Normal, default(ActRef));
			break;
		}
		foreach (Condition item8 in TC.conditions.Copy()) 
		IList<Condition> list9 = TC.conditions.Copy(); 
		list9.Shuffle(); 
		CC.PlaySound("remove_hex"); 
		CC.PlayEffect("remove_hex"); 
		foreach (Condition item8 in list9) 
		{
			if (item8.Type == ConditionType.Debuff && !item8.IsKilled && EClass.rnd(power * (CC.IsPowerful ? 5 : 2)) > EClass.rnd(item8.power)) 
			if (item8.Type != ConditionType.Debuff || item8.IsKilled) 
			{ 
				continue; 
			} 
			if (EClass.rnd(power * (CC.IsPowerful ? 5 : 2)) > EClass.rnd(item8.power) || (id == EffectId.RemoveHex && EClass.rnd(2) == 0)) 
			{
				CC.Say("removeHex", TC, item8.Name.ToLower());
				item8.Kill();
				if (id == EffectId.RemoveHex) 
			} 
			else
			{ 
				if (id == EffectId.RemoveHexAll) 
				{
					break; 
					item8.power /= 2; 
				}
				CC.Say("removeHex_fail", TC, item8.Name.ToLower()); 
			} 
			if (id == EffectId.RemoveHex) 
			{ 
				break; 
			}
		}
		TC.AddCondition<ConHolyVeil>(power / 2); 
		if (blessed) 
		{ 
			TC.AddCondition<ConHolyVeil>(power / 2); 
		} 
		break;
	} 
	case EffectId.CureCorruption:
		TC.PlaySound("heal");
		TC.PlayEffect("heal");

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

cs
		if (TC.HasElement(1211))
		{
			TC.Say("drinkSaltWater_snail", TC);
			int num13 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num13, AttackSource.None, CC); 
			int num14 = ((TC.hp > 10) ? (TC.hp - EClass.rnd(10)) : 10000); 
			TC.DamageHP(num14, AttackSource.None, CC); 
		}
		else if (TC.IsPC)
		{

ActRanged โ€‹

public override bool Perform()

cs
		if (EClass.rnd(2) == 0)
		{
			Act.CC.RemoveCondition<ConInvisibility>();
			Act.CC.RemoveCondition<ConDark>(); 
		}
		if (weapon.trait is TraitToolRangeCane)
		{

BaseCondition โ€‹

public bool isPerfume

cs

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

	public virtual int MaxDuration => base.source.durationMax; 
	public virtual bool PreventRegen => false;

	public virtual bool ShouldRefresh => false;

public virtual int EvaluatePower(int p)

cs

	public virtual int EvaluateTurn(int p)
	{
		return Mathf.Max(1, base.source.duration.Calc(p, 0, P2)); 
		return Mathf.Min(Mathf.Max(1, base.source.duration.Calc(p, 0, P2)), (MaxDuration == 0) ? int.MaxValue : MaxDuration); 
	}

	public virtual BaseNotification CreateNotification()

Card โ€‹

public virtual long ApplyProtection(long dmg, int mod = 100)

cs
		return dmg;
	}

	public int GetResistPenetrationLevel(int idEle, AttackSource attackSource, Card origin = null) 
	{ 
		if (origin == null) 
		{ 
			return 0; 
		} 
		int num = origin.Evalue(1238); 
		if (attackSource == AttackSource.MagicSword) 
		{ 
			num += 2; 
			if (origin.HasElement(1247)) 
			{ 
				num++; 
			} 
		} 
		if (attackSource == AttackSource.MagicArrow && origin.HasElement(1244)) 
		{ 
			num++; 
		} 
		if (attackSource == AttackSource.MagicHand && origin.HasElement(1246)) 
		{ 
			num++; 
		} 
		if (idEle == 916 && (HasElement(1253) || origin.HasElement(1253))) 
		{ 
			num++; 
		} 
		return num; 
	} 
	public void DamageHP(long dmg, AttackSource attackSource = AttackSource.None, Card origin = null)
	{
		DamageHP(dmg, 0, 0, attackSource, origin);
	}

	public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null) 
	public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, Chara originalTarget = null, int resistPenetrationLevel = 0) 
	{
		if (hp < 0)
		{

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

cs
		}
		if (!e.source.aliasRef.IsEmpty() && attackSource != AttackSource.ManaBackfire)
		{
			int num3 = ((origin != null) ? origin.Evalue(1238) : 0); 
			if (origin != null) 
			{ 
				if (attackSource == AttackSource.MagicSword) 
				{ 
					num3 += 2; 
					if (origin.HasElement(1247)) 
					{ 
						num3++; 
					} 
				} 
				if (attackSource == AttackSource.MagicArrow && origin.HasElement(1244)) 
				{ 
					num3++; 
				} 
				if (attackSource == AttackSource.MagicHand && origin.HasElement(1246)) 
				{ 
					num3++; 
				} 
				if (e.id == 916 && (HasElement(1253) || origin.HasElement(1253))) 
				{ 
					num3++; 
				} 
			} 
			dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), num3); 
			dmg = Element.GetResistDamage(dmg, Evalue(e.source.aliasRef), (resistPenetrationLevel != 0) ? resistPenetrationLevel : GetResistPenetrationLevel(e.id, attackSource, origin)); 
			dmg = dmg * 100 / (100 + Mathf.Clamp(Evalue(961) * 5, -50, 200));
			dmg = dmg * Mathf.Max(100 - Evalue(93), 10) / 100;
		}

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

cs
		}
		if (EClass.game.principal.enableDamageReduction && IsPCFaction)
		{
			int num4 = ((origin != null) ? origin.LV : EClass._zone.DangerLv); 
			if (num4 > 50) 
			int num3 = ((origin != null) ? origin.LV : EClass._zone.DangerLv); 
			if (num3 > 50) 
			{
				dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100; 
				dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100; 
			}
		}
		if (attackSource == AttackSource.Throw || attackSource == AttackSource.Range)

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

cs
		}
		if (EClass.pc.HasElement(1207) && isChara)
		{
			int num4 = 0; 
			int num5 = 0;
			int num6 = 0; 
			foreach (Condition condition3 in Chara.conditions)
			{
				if (condition3.Type == ConditionType.Buff)
				{
					num5++; 
					num4++; 
				}
				else if (condition3.Type == ConditionType.Debuff)
				{
					num6++; 
					num5++; 
				}
			}
			if (IsPCFactionOrMinion)
			{
				dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120); 
				dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120); 
			}
			else
			{
				dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100; 
				dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100; 
			}
		}
		if (IsPCParty && EClass.pc.ai is GoalAutoCombat)

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

cs
		}
		if (dmg >= MaxHP / 10 && Evalue(68) > 0)
		{
			int num7 = MaxHP / 10; 
			long num8 = dmg - num7; 
			num8 = num8 * 100 / (200 + Evalue(68) * 10); 
			dmg = num7 + num8; 
			int num6 = MaxHP / 10; 
			long num7 = dmg - num6; 
			num7 = num7 * 100 / (200 + Evalue(68) * 10); 
			dmg = num6 + num7; 
		}
	}
	if (origin != null && origin.IsPC && EClass.pc.Evalue(654) > 0)

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

cs
	{
		dmg = 0L;
	}
	long num9 = 99999999L; 
	long num8 = 99999999L; 
	if (origin != null && (attackSource == AttackSource.Melee || attackSource == AttackSource.Range))
	{
		ConStrife condition = origin.GetCondition<ConStrife>();
		if (condition != null)
		{
			num9 = num9 * (100 + condition.lv * 5) / 100; 
			num8 = num8 * (100 + condition.lv * 5) / 100; 
		}
	}
	if (dmg > num9) 
	if (dmg > num8) 
	{
		dmg = num9; 
		dmg = num8; 
	}
	float num10 = Mathf.Clamp(dmg * 6 / MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0); 
	int num11 = hp; 
	float num9 = Mathf.Clamp(dmg * 6 / MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0); 
	int num10 = hp; 
	if (Evalue(1421) > 0)
	{
		long num12 = 0L; 
		long num13 = dmg; 
		long num11 = 0L; 
		long num12 = dmg; 
		if (hp > 0)
		{
			num13 = dmg - hp; 
			num12 = dmg - hp; 
			hp -= (int)dmg;
			num12 += dmg; 
			num11 += dmg; 
			if (hp < 0 && Chara.mana.value >= 0)
			{
				num12 += hp; 
				num11 += hp; 
				hp = 0;
			}
		}

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

cs
		{
			if (Evalue(1421) >= 2)
			{
				num13 /= 2; 
				num12 /= 2; 
			}
			dmg = num13; 
			dmg = num12; 
			if (Chara.mana.value > 0)
			{
				num13 -= Chara.mana.value; 
				num12 -= Chara.mana.value; 
				Chara.mana.value -= (int)dmg;
				num12 += dmg; 
				num11 += dmg; 
			}
			if (Chara.mana.value <= 0)
			{
				hp -= (int)num13; 
				num12 += num13; 
				hp -= (int)num12; 
				num11 += num12; 
			}
		}
		dmg = num12; 
		dmg = num11; 
	}
	else
	{

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

cs
				if (origin != null && origin != this && Evalue(436) > 0 && !HasCondition<ConFractured>())
				{
					int half = (HasElement(1218) ? MaxHP : (MaxHP / 2));
					if (num11 > half) 
					if (num10 > half) 
					{
						EvadeDeath(delegate
						{

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

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

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

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

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

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

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

cs
	}
	else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null && originalTarget == null)
	{
		(IsPC ? EClass.pc : origin).Say("dmgMelee" + num10 + (IsPC ? "pc" : ""), origin, this); 
		(IsPC ? EClass.pc : origin).Say("dmgMelee" + num9 + (IsPC ? "pc" : ""), origin, this); 
	}
	else if (isChara)
	{
		int num14 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2); 
		if (num10 >= (float)num14) 
		int num13 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2); 
		if (num9 >= (float)num13) 
		{
			if (e != Element.Void)
			{
				Say("dmg_" + e.source.alias, this);
			}
			if (e == Element.Void || num10 >= 2f) 
			if (e == Element.Void || num9 >= 2f) 
			{
				Say("dmg" + num10, this); 
				Say("dmg" + num9, this); 
			}
		}
	}
	onEvade?.Invoke();
	if (isChara)
	{
		for (int num15 = Chara.conditions.Count - 1; num15 >= 0; num15--) 
		for (int num14 = Chara.conditions.Count - 1; num14 >= 0; num14--) 
		{
			Chara.conditions[num15].OnHit(origin, attackSource); 
			Chara.conditions[num14].OnHit(origin, attackSource); 
		}
		if (Chara.mimicry == null && HasElement(1429))
		{

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

cs
			}
			if (attackSource == AttackSource.Melee || attackSource == AttackSource.Range)
			{
				int num16 = origin.Dist(this); 
				if (attackSource == AttackSource.Melee && HasElement(1221) && num16 <= Evalue(1221)) 
				int num15 = origin.Dist(this); 
				if (attackSource == AttackSource.Melee && HasElement(1221) && num15 <= Evalue(1221)) 
				{
					int ele2 = ((Chara.MainElement == Element.Void) ? 924 : Chara.MainElement.id);
					if (id == "hedgehog_ether")

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

cs
					Say("reflect_thorne", origin, this);
					origin.DamageHP((int)Mathf.Clamp(dmg / 10, 1f, MaxHP / (origin.IsPowerful ? 200 : 20)), ele2, Power, AttackSource.Condition, this);
				}
				if (HasElement(1223) && num16 <= Evalue(1223)) 
				if (HasElement(1223) && num15 <= Evalue(1223)) 
				{
					int ele3 = ((Chara.MainElement == Element.Void) ? 923 : Chara.MainElement.id);
					Say("reflect_acid", this, origin);

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

cs
			}
		}
	}
	int num17 = ((EClass.rnd(2) == 0) ? 1 : 0); 
	int num16 = ((EClass.rnd(2) == 0) ? 1 : 0); 
	if (attackSource == AttackSource.Condition)
	{
		num17 = 1 + EClass.rnd(2); 
		num16 = 1 + EClass.rnd(2); 
	}
	if (num17 > 0) 
	if (num16 > 0) 
	{
		bool flag3 = Chara.HasCondition<ConPoison>() || ((e.id == 915 || e.id == 923) && ResistLv(Evalue(955)) < 4);
		AddBlood(num17, flag3 ? 6 : (-1)); 
		AddBlood(num16, flag3 ? 6 : (-1)); 
	}
	if (dmg > 0 || (origin != null && origin.HasElement(1345)))
	{

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

cs
	}
	if (IsPC)
	{
		float num18 = (float)hp / (float)MaxHP; 
		float num17 = (float)hp / (float)MaxHP; 
		if (Evalue(1421) > 0)
		{
			num18 = (float)Chara.mana.value / (float)Chara.mana.max; 
			num17 = (float)Chara.mana.value / (float)Chara.mana.max; 
		}
		if (num18 < 0.3f) 
		if (num17 < 0.3f) 
		{
			PlaySound("heartbeat", 1f - num18 * 2f); 
			PlaySound("heartbeat", 1f - num17 * 2f); 
		}
	}
	if (!IsPC && hp < MaxHP / 5 && Evalue(423) <= 0 && dmg * 100 / MaxHP + 10 > EClass.rnd(IsPowerful ? 400 : 150) && !HasCondition<ConFear>())

void ProcAbsorb()

cs
	{
		if (origin != null && origin.isChara && isChara && (weapon == null || !weapon.HasElement(486)))
		{
			int num19 = origin.Evalue(662) + (weapon?.Evalue(662, ignoreGlobalElement: true) ?? 0); 
			int num20 = origin.Evalue(661) + (weapon?.Evalue(661, ignoreGlobalElement: true) ?? 0); 
			if (num19 != 0) 
			int num18 = origin.Evalue(662) + (weapon?.Evalue(662, ignoreGlobalElement: true) ?? 0); 
			int num19 = origin.Evalue(661) + (weapon?.Evalue(661, ignoreGlobalElement: true) ?? 0); 
			if (num18 != 0) 
			{
				Debug.Log(num19); 
				Debug.Log(num18); 
			}
			if (num19 > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara)) 
			if (num18 > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara)) 
			{
				int num21 = EClass.rnd(3 + (int)Mathf.Clamp(dmg / 100, 0f, num19 / 10)); 
				origin.Chara.stamina.Mod(num21); 
				int num20 = EClass.rnd(3 + (int)Mathf.Clamp(dmg / 100, 0f, num18 / 10)); 
				origin.Chara.stamina.Mod(num20); 
				if (IsAliveInCurrentZone)
				{
					Chara.stamina.Mod(-num21); 
					Chara.stamina.Mod(-num20); 
				}
			}
			if (origin.HasElement(1350) && attackSource == AttackSource.Melee)
			{
				int num22 = EClass.rndHalf(2 + (int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10)); 
				origin.Chara.mana.Mod(num22); 
				int num21 = EClass.rndHalf(2 + (int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10)); 
				origin.Chara.mana.Mod(num21); 
				if (IsAliveInCurrentZone)
				{
					Chara.mana.Mod(-num22); 
					Chara.mana.Mod(-num21); 
				}
			}
			if (num20 > 0 && attackSource == AttackSource.Melee) 
			if (num19 > 0 && attackSource == AttackSource.Melee) 
			{
				int num23 = EClass.rnd(2 + (int)Mathf.Clamp(dmg / 10, 0f, num20 + 10)); 
				origin.Chara.mana.Mod(num23); 
				int num22 = EClass.rnd(2 + (int)Mathf.Clamp(dmg / 10, 0f, num19 + 10)); 
				origin.Chara.mana.Mod(num22); 
				if (IsAliveInCurrentZone)
				{
					Chara.mana.Mod(-num23); 
					Chara.mana.Mod(-num22); 
				}
			}
		}

public virtual void Die(Element e = null, Card origin = null, AttackSource attac

cs
		{
			if (!(t.trait is TraitChestMerchant))
			{
				t.isHidden = false; 
				EClass._zone.AddCard(t, _pos);
			}
		});

public int RefreshColor()

cs
{
	if (isChara)
	{
		if (Chara.mimicry != null) 
		if (Chara.mimicry != null && Chara.mimicry.Card != this) 
		{
			_colorInt = Chara.mimicry.Card.RefreshColor();
		}

Chara โ€‹

protected override void OnDeserialized()

cs

	public override string GetName(NameStyle style, int num = -1)
	{
		if (mimicry != null) 
		if (mimicry != null && mimicry.Card != this) 
		{
			return mimicry.GetName(style, num);
		}

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
	}
	if (IsPC)
	{
		if (renderer.anime == null && renderer.replacer != null) 
		if (renderer.anime == null && renderer.replacer != null && renderer.replacer.pccData == null) 
		{
			renderer.PlayAnime(AnimeID.Hop);
		}

public override CardRenderer _CreateRenderer()

cs
			{
				charaRenderer.replacer = rendererReplacer;
				charaRenderer.data = rendererReplacer.data;
				charaRenderer.pccData = rendererReplacer.pccData; 
				break;
			}
		}

public override string GetHoverText()

cs
	{
		return mimicry.GetHoverText();
	}
	string text = ((mimicry != null) ? mimicry.GetName(NameStyle.Full) : base.Name); 
	string text = ((mimicry != null && mimicry.Card != this) ? mimicry.GetName(NameStyle.Full) : base.Name); 
	if (IsFriendOrAbove())
	{
		text = text.TagColor(EClass.Colors.colorFriend);

public bool ShouldThrowAway(Thing t, ClearInventoryType type)

cs
	switch (type)
	{
	case ClearInventoryType.SellAtTown:
		switch (t.category.id) 
		if (!t.isGifted && !t.isNPCProperty) 
		{
		default: 
			if (!t.isGifted && !t.isNPCProperty) 
			{ 
				return false; 
			} 
			break; 
		case "fish": 
		case "junk": 
		case "garbage": 
			break; 
			return false; 
		}
		break;
	case ClearInventoryType.Purge:

CharaBody โ€‹

public void RefreshBodyParts()

cs
		int elementId = bodySlot.elementId;
		if (elementId == 35)
		{
			if (slotMainHand == null) 
			if (slotMainHand == null || slotMainHand == bodySlot) 
			{
				slotMainHand = bodySlot;
			}

public BodySlot GetSlot(Thing t, bool onlyEmpty = false, bool secondSlot = false

cs
		return null;
	}

	public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool secondSlot = false) 
	public BodySlot GetSlot(int elementId, bool onlyEmpty = true, bool getSecondSlot = false) 
	{
		bool flag = true;
		foreach (BodySlot slot in slots)
		{
			if (elementId == slot.elementId && (!onlyEmpty || slot.thing == null))
			{
				if (!(secondSlot && flag)) 
				if (!(getSecondSlot && flag)) 
				{
					return slot;
				}

ConBuffStats โ€‹

``

cs

public class ConBuffStats : Condition
{
	public override string Name => (isDebuff ? "debuff" : "buff").lang(); 
	public override string Name => (IsDebuff ? "debuff" : "buff").lang(); 

	public override ConditionType Type
	{
		get
		{
			if (!isDebuff) 
			if (!IsDebuff) 
			{
				return ConditionType.Buff;
			}

public override ConditionType Type

cs
		}
	}

	public bool isDebuff => base.refVal2 == 222; 
	public bool IsDebuff => base.refVal2 == 222; 
	public override int MaxDuration 
	{ 
		get 
		{ 
			if (!IsDebuff) 
			{ 
				return 0; 
			} 
			return base.MaxDuration; 
		} 
	} 

	public override bool AllowMultipleInstance => true;

public override ConditionType Type

cs

	public override bool IsOverrideConditionMet(Condition c, int turn)
	{
		if ((c as ConBuffStats).isDebuff == isDebuff) 
		if ((c as ConBuffStats).IsDebuff == IsDebuff) 
		{
			return base.IsOverrideConditionMet(c, turn);
		}

public override int GetPhase()

cs

	public override Color GetColor(SkinColorProfile c)
	{
		if (!isDebuff) 
		if (!IsDebuff) 
		{
			return c.textGood;
		}

public override string GetText()

cs
	string[] list = Lang.GetList("buff_" + EClass.sources.elements.map[base.refVal].alias);
	if (list != null)
	{
		if (!isDebuff) 
		if (!IsDebuff) 
		{
			return list[0];
		}

public override void PlayEffect()

cs
	{
		if (!Condition.ignoreEffect)
		{
			owner.PlaySound(isDebuff ? "debuff" : "buff"); 
			owner.PlayEffect(isDebuff ? "debuff" : "buff"); 
			owner.Say(isDebuff ? "buffStats_curse" : "buffStats", owner, EClass.sources.elements.map[base.refVal].GetName().ToLower()); 
			owner.PlaySound(IsDebuff ? "debuff" : "buff"); 
			owner.PlayEffect(IsDebuff ? "debuff" : "buff"); 
			owner.Say(IsDebuff ? "buffStats_curse" : "buffStats", owner, EClass.sources.elements.map[base.refVal].GetName().ToLower()); 
		}
	}

public override bool CanStack(Condition c)

cs
	public override void SetOwner(Chara _owner, bool onDeserialize = false)
	{
		base.SetOwner(_owner);
		elements.SetBase(base.refVal, CalcValue() * ((!isDebuff) ? 1 : (-1))); 
		elements.SetBase(base.refVal, CalcValue() * ((!IsDebuff) ? 1 : (-1))); 
		elements.SetParent(owner);
	}

public int CalcValue()

cs

	public override void OnWriteNote(List<string> list)
	{
		list.Add((isDebuff ? "hintDebuffStats" : "hintBuffStats").lang(base.sourceElement.GetName(), CalcValue().ToString() ?? "")); 
		list.Add((IsDebuff ? "hintDebuffStats" : "hintBuffStats").lang(base.sourceElement.GetName(), CalcValue().ToString() ?? "")); 
	}
}

ConMiasma โ€‹

public class ConMiasma : TimeDebuff

cs
{
	public override bool IsElemental => true;

	public void SetResistPenetrationLevel(Chara tc, Chara cc) 
	{ 
		base.refVal2 = tc.GetResistPenetrationLevel(base.refVal, AttackSource.Condition, cc); 
	} 
	public override void Tick()
	{
		Dice dice = Dice.Create("miasma_", base.power);
		try
		{
			owner.DamageHP(dice.Roll(), base.refVal, EClass.rnd(base.power / 2) + base.power / 4, AttackSource.Condition); 
			owner.DamageHP(dice.Roll(), base.refVal, EClass.rnd(base.power / 2) + base.power / 4, AttackSource.Condition, null, showEffect: true, null, null, base.refVal2); 
			if (owner.IsAliveInCurrentZone && base.value > 1)
			{
				for (int i = 0; i < 6; i++)

public override void Tick()

cs
						{
							con.givenByPcParty = base.givenByPcParty;
							con.SetElement(base.refVal);
							con.refVal2 = base.refVal2; 
						}));
						if (condition != null)
						{

ConTransmuteHuman โ€‹

public override bool ShouldEndMimicry(Act act)

cs

	public override RendererReplacer GetRendererReplacer()
	{
		if (chara.IsPCC) 
		{ 
			return RendererReplacer.CreateFromPCC(chara.id, chara.pccData); 
		} 
		return RendererReplacer.CreateFrom(chara.id);
	}

public override void OnBeforeStart()

cs
			}
			else
			{
				List<Chara> list2 = owner.pos.ListCharasInRadius(owner, 5, delegate(Chara c) 
				List<Chara> list2 = owner.pos.ListCharasInRadius(owner, 6, delegate(Chara c) 
				{
					if (!c.IsMultisize && c.IsHumanSpeak)
					{

public void NyaruSpecial()

cs
{
	if (chara != null && chara.id != owner.id)
	{
		chara = CharaGen.Create(owner.id); 
		chara = owner; 
	}
	else
	{

Condition โ€‹

public static Condition Create(string alias, int power = 100, Action<Condition>

cs
	public virtual void OnStacked(int p)
	{
		base.value += EvaluateTurn(p);
		if (MaxDuration != 0 && base.value > MaxDuration) 
		{ 
			base.value = MaxDuration; 
		} 
		SetPhase();
	}

DNA โ€‹

public Element GetInvalidAction(Chara c)

cs
		return null;
	}

	public int GetBodySlot() 
	{ 
		for (int i = 0; i < vals.Count; i += 2) 
		{ 
			Element element = Element.Create(vals[i], vals[i + 1]); 
			if (element.source.category == "slot") 
			{ 
				return element.id; 
			} 
		} 
		return -1; 
	} 
	public void ReplaceBodySlot(int slot) 
	{ 
		for (int i = 0; i < vals.Count; i += 2) 
		{ 
			if (Element.Create(vals[i], vals[i + 1]).source.category == "slot") 
			{ 
				vals[i] = slot; 
			} 
		} 
	} 
	public void MakeSlimeFood(Chara c)
	{
		int num = c.Evalue(6608) + 10;

ElementContainerCard โ€‹

public override void OnTrain(int ele)

cs

	public override void OnModTempPotential(Element e, int v, int threshMsg)
	{
		if (threshMsg == 0 || Mathf.Abs(v) >= threshMsg) 
		if ((threshMsg == 0 || Mathf.Abs(v) >= threshMsg) && v != 0) 
		{
			string lang = ((v > 0) ? "potentialInc" : "potentialDec");
			if (owner.IsPCFaction && v > 0)

GoalCombat โ€‹

public override IEnumerable<Status> Run()

cs
		{
			CursorSystem.ignoreCount = 1;
		}
		if (tc.host != null && (tc.hp == 0 || EClass.rnd(5) == 0)) 
		if (tc.host != null && (tc.hp == 0 || EClass.rnd(5) == 0 || tc.host.isRestrained)) 
		{
			tc = owner.SetEnemy(tc.host);
		}

RendererReplacer โ€‹

public class RendererReplacer : EClass

cs

	public SourcePref pref;

	public PCCData pccData; 
	public static RendererReplacer CreateFrom(string id, int shift = 0, int mat = -1)
	{
		CardRow cardRow = EClass.sources.cards.map.TryGetValue(id);

public static RendererReplacer CreateFrom(string id, int shift = 0, int mat = -1

cs
			mat = mat
		};
	}
	public static RendererReplacer CreateFromPCC(string id, PCCData pccData) 
	{ 
		CardRow cardRow = EClass.sources.cards.map.TryGetValue(id); 
		if (cardRow == null) 
		{ 
			cardRow = EClass.sources.cards.map["money2"]; 
		} 
		return new RendererReplacer
		{ 
			data = cardRow.renderData, 
			pref = cardRow.pref, 
			pccData = pccData 
		}; 
	} 
}

SourceStat โ€‹

public class Row : BaseRow

cs

		public string duration;

		public int durationMax; 
		public int hexPower;

		public string[] negate;

public override Row CreateRow()

cs
			group = SourceData.GetString(5),
			curse = SourceData.GetString(6),
			duration = SourceData.GetString(7),
			hexPower = SourceData.GetInt(8), 
			negate = SourceData.GetStringArray(9), 
			defenseAttb = SourceData.GetStringArray(10), 
			resistance = SourceData.GetStringArray(11), 
			gainRes = SourceData.GetInt(12), 
			elements = SourceData.GetStringArray(13), 
			nullify = SourceData.GetStringArray(14), 
			tag = SourceData.GetStringArray(15), 
			phase = SourceData.GetIntArray(16), 
			colors = SourceData.GetString(17), 
			element = SourceData.GetString(18), 
			effect = SourceData.GetStringArray(19), 
			strPhase_JP = SourceData.GetStringArray(20), 
			strPhase = SourceData.GetStringArray(21), 
			textPhase_JP = SourceData.GetString(22), 
			textPhase = SourceData.GetString(23), 
			textEnd_JP = SourceData.GetString(24), 
			textEnd = SourceData.GetString(25), 
			textPhase2_JP = SourceData.GetString(26), 
			textPhase2 = SourceData.GetString(27), 
			gradient = SourceData.GetString(28), 
			invert = SourceData.GetBool(29), 
			detail_JP = SourceData.GetString(30), 
			detail = SourceData.GetString(31) 
			durationMax = SourceData.GetInt(8), 
			hexPower = SourceData.GetInt(9), 
			negate = SourceData.GetStringArray(10), 
			defenseAttb = SourceData.GetStringArray(11), 
			resistance = SourceData.GetStringArray(12), 
			gainRes = SourceData.GetInt(13), 
			elements = SourceData.GetStringArray(14), 
			nullify = SourceData.GetStringArray(15), 
			tag = SourceData.GetStringArray(16), 
			phase = SourceData.GetIntArray(17), 
			colors = SourceData.GetString(18), 
			element = SourceData.GetString(19), 
			effect = SourceData.GetStringArray(20), 
			strPhase_JP = SourceData.GetStringArray(21), 
			strPhase = SourceData.GetStringArray(22), 
			textPhase_JP = SourceData.GetString(23), 
			textPhase = SourceData.GetString(24), 
			textEnd_JP = SourceData.GetString(25), 
			textEnd = SourceData.GetString(26), 
			textPhase2_JP = SourceData.GetString(27), 
			textPhase2 = SourceData.GetString(28), 
			gradient = SourceData.GetString(29), 
			invert = SourceData.GetBool(30), 
			detail_JP = SourceData.GetString(31), 
			detail = SourceData.GetString(32) 
		};
	}

WidgetSearch โ€‹

public override void Search(string s)

cs
		{
			foreach (Chara chara in EMono._map.charas)
			{
				if (chara.IsNeutralOrAbove() && (chara.Name.ToLower().Contains(s) || chara.sourceCard.GetSearchName(jp: false).Contains(s))) 
				if (!chara.IsNeutralOrAbove()) 
				{ 
					continue; 
				} 
				if (chara.mimicry != null && !chara.IsPCFactionOrMinion && !EMono.debug.showExtra) 
				{ 
					if (chara.mimicry.Card.Name.ToLower().Contains(s) || chara.mimicry.Card.sourceCard.GetSearchName(jp: false).Contains(s)) 
					{ 
						newCards.Add(chara); 
					} 
				} 
				else if (chara.Name.ToLower().Contains(s) || chara.sourceCard.GetSearchName(jp: false).Contains(s)) 
				{
					newCards.Add(chara);
				}

Zone_Town โ€‹

public override void OnRegenerate()

cs
		{
			Add("mad_rich");
		}
		if (EClass.rnd(EClass.debug.enable ? 1 : 8) == 0) 
		bool flag = this is Zone_Kapul && IsFestival; 
		if (EClass.rnd((EClass.debug.enable || flag) ? 1 : 8) == 0) 
		{
			Add((EClass.rnd(EClass.debug.enable ? 1 : 4) == 0) ? "unseenhand" : "murderer"); 
			Add((EClass.rnd((EClass.debug.enable || flag) ? 1 : 4) == 0) ? "unseenhand" : "murderer").AddCondition<ConTransmuteHuman>(); 
		}
		void Add(string id) 
		Chara Add(string id) 
		{
			Chara chara = CharaGen.Create(id);
			chara.isSubsetCard = true;
			EClass._zone.AddCard(chara, GetSpawnPos(chara));
			return chara; 
		}
	}
}