Skip to content

EA 23.173 Stable

July 27, 2025

14 files modified. 1 new file created.

Important Changes

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

Card (1)

cs
public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null) 
public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, AttackSourceSub attackSourceSub = AttackSourceSub.None) 

AI_Fuck

@@ -23,6 +23,8 @@ public enum FuckType

cs

	public int progress;

	public int fails; 
	public int totalAffinity;

	public virtual FuckType Type => FuckType.fuck;

@@ -140,7 +142,16 @@ public override IEnumerable<Status> Run()

cs
			{
				tc.PlaySound("brushing");
				int num2 = cc.CHA / 2 + cc.Evalue(237) - tc.CHA * 2;
				int num3 = ((EClass.rnd(cc.CHA / 2 + cc.Evalue(237)) <= EClass.rnd(tc.CHA * num / 100)) ? (-5 + ((!tc.IsPCFaction) ? Mathf.Clamp(num2 / 10, -30, 0) : 0)) : (5 + Mathf.Clamp(num2 / 20, 0, 20))); 
				int num3; 
				if (EClass.rnd(cc.CHA / 2 + cc.Evalue(237)) > EClass.rnd(tc.CHA * num / 100)) 
				{ 
					num3 = 5 + Mathf.Clamp(num2 / 20, 0, 20); 
				} 
				else
				{ 
					num3 = -5 + ((!tc.IsPCFaction) ? Mathf.Clamp(num2 / 10, -30, 0) : 0); 
					fails++; 
				} 
				int a = 20;
				if (tc.IsPCFactionOrMinion && tc.affinity.CurrentStage >= Affinity.Stage.Love)
				{

@@ -338,7 +349,7 @@ public void Finish()

cs
				chara.Say("tame_fail", chara, chara2);
			}
		}
		if (num > EClass.rnd(100)) 
		if (fails > 0 && num > EClass.rnd(100)) 
		{
			chara2.DoHostileAction(chara);
			chara2.calmCheckTurn *= 3;

ActPlan

@@ -315,11 +315,32 @@ public Func<bool> GetAction()

cs
		};
	}

	public void Order(string id) 
	{ 
		EClass.player.forceTalk = true; 
		EClass.pc.SayRaw(id.lang()); 
	} 
	public void ShowContextMenu()
	{
		UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
		int num = 1;
		_ = showOrder; 
		if (showOrder) 
		{ 
			UIContextMenu uIContextMenu2 = uIContextMenu.AddChild("order_ally"); 
			uIContextMenu2.AddButton("order_fight", delegate
			{ 
				Order("order_fight"); 
			}); 
			uIContextMenu2.AddButton("order_heal", delegate
			{ 
				Order("order_heal"); 
			}); 
			uIContextMenu2.AddButton("order_wait", delegate
			{ 
				Order("order_wait"); 
			}); 
		} 
		foreach (Item i in list)
		{
			string textContext = i.GetTextContext(HasMultipleTargets);

@@ -862,7 +883,7 @@ void func()

cs
				{
					TrySetAct(ACT.Wait);
				}
				if (EClass.pc.party.members.Count > 1) 
				if (EClass.debug.enable) 
				{
					showOrder = true;
				}

AttackProcess

@@ -473,9 +473,13 @@ public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
		num2 += weapon.Evalue(91, ignoreGlobalElement: true);
		num3 += weapon.Evalue(603, ignoreGlobalElement: true);
	}
	else if (CC.id == "rabbit_vopal") 
	else
	{
		list2.Add(Element.Create(6650, 100)); 
		string id = CC.id; 
		if (id == "rabbit_vopal" || id == "mantis_killer") 
		{ 
			list2.Add(Element.Create(6650, 100)); 
		} 
	}
	int bane;
	if (TC?.Chara != null)

@@ -770,22 +774,22 @@ void ModExpDef(int ele, int mod)

cs
	}
	void PlayHitEffect()
	{
		string id = "hit_default"; 
		string id2 = "hit_default";
		string id3 = "hit_default"; 
		switch (attackType)
		{
		case AttackType.Slash:
			id3 = "hit_slash"; 
			id2 = "hit_slash";
			id = "hit_slash"; 
			break;
		case AttackType.Spore:
			id3 = "hit_spore"; 
			id2 = "hit_spore";
			id = "hit_spore"; 
			break;
		case AttackType.Claw:
		case AttackType.Bite:
			id3 = "hit_claw"; 
			id2 = "hit_claw";
			id = "hit_claw"; 
			break;
		case AttackType.Blunt:
		case AttackType.Punch:

@@ -793,15 +797,15 @@ void PlayHitEffect()

cs
		case AttackType.Bow:
		case AttackType.Gun:
		case AttackType.Cane:
			id3 = "hit_blunt"; 
			id2 = "hit_blunt";
			id = "hit_blunt"; 
			break;
		}
		if (TC != null)
		{
			TC.PlayEffect(id2).SetScale(crit ? 1.25f : 0.75f); 
			TC.PlayEffect(id3).SetScale(crit ? 1.25f : 0.75f); 
		}
		CC.PlaySound(id); 
		CC.PlaySound(id2); 
	}
	void Proc(List<Element> list)
	{

+AttackSourceSub

File Created
cs
public enum AttackSourceSub
{
	None,
	FleshWall
}

Card

@@ -3634,6 +3634,10 @@ public void SetPlaceState(PlaceState newState, bool byPlayer = false)

cs
	{
		this.placeState = newState;
	}
	if (trait is TraitFakeBlock) 
	{ 
		_CreateRenderer(); 
	} 
	if (newState == PlaceState.none)
	{
		this.placeState = PlaceState.roaming;

@@ -3910,12 +3914,29 @@ public void DamageHP(int dmg, AttackSource attackSource = AttackSource.None, Car

cs
		DamageHP(dmg, 0, 0, attackSource, origin);
	}

	public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null) 
	public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource = AttackSource.None, Card origin = null, bool showEffect = true, Thing weapon = null, AttackSourceSub attackSourceSub = AttackSourceSub.None) 
	{
		if (hp < 0)
		{
			return;
		}
		bool flag = attackSourceSub == AttackSourceSub.FleshWall; 
		if (isChara && !HasElement(1241)) 
		{ 
			AttackSource attackSource2 = attackSource; 
			if (attackSource2 != AttackSource.Fatigue && (uint)(attackSource2 - 13) > 4u) 
			{ 
				foreach (Chara chara3 in EClass._map.charas) 
				{ 
					int num = chara3.Evalue(1241); 
					if (num != 0 && !chara3.IsDisabled && !chara3.isRestrained && !chara3.IsDeadOrSleeping && chara3 != this && !chara3.IsHostile(Chara) && chara3.Dist(this) <= num) 
					{ 
						chara3.DamageHP(dmg, ele, eleP, attackSource, origin, showEffect, weapon, AttackSourceSub.FleshWall); 
						return; 
					} 
				} 
			} 
		} 
		Element e;
		if (ele == 0 || ele == 926)
		{

@@ -3938,12 +3959,12 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

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

@@ -3985,13 +4006,13 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		}
		if (EClass.game.principal.enableDamageReduction && IsPCFaction)
		{
			int num2 = ((origin != null) ? origin.LV : EClass._zone.DangerLv); 
			if (num2 > 50) 
			int num3 = ((origin != null) ? origin.LV : EClass._zone.DangerLv); 
			if (num3 > 50) 
			{
				dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num2 - 50))) / 100; 
				dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100; 
			}
		}
		dmg = dmg * Mathf.Max(0, 100 - Evalue((e == Element.Void || e.id == 926) ? 55 : 56)) / 100; 
		dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(Evalue((e == Element.Void || e.id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100; 
		if (origin != null && origin.IsPC && EClass.player.codex.Has(id))
		{
			dmg = dmg * (100 + Mathf.Min(10, EClass.player.codex.GetOrCreate(id).weakspot)) / 100;

@@ -4010,26 +4031,26 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

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

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

cs
		}
		if (HasElement(1218) && attackSource != AttackSource.ManaBackfire && (hp > 0 || Evalue(1421) <= 0))
		{
			dmg = dmg * (1000 - Evalue(1218)) / 1000; 
			dmg = dmg * (1000 - Mathf.Min(Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000; 
			if (dmg <= 0 && EClass.rnd(4) == 0)
			{
				dmg++;

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

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

@@ -4060,19 +4081,19 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
	{
		dmg = 0;
	}
	int num7 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0); 
	int num8 = Mathf.Clamp(dmg * 6 / MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0); 
	if (Evalue(1421) > 0)
	{
		int num8 = 0; 
		int num9 = dmg; 
		int num9 = 0; 
		int num10 = dmg; 
		if (hp > 0)
		{
			num9 = dmg - hp; 
			num10 = dmg - hp; 
			hp -= dmg;
			num8 += dmg; 
			num9 += dmg; 
			if (hp < 0 && Chara.mana.value >= 0)
			{
				num8 += hp; 
				num9 += hp; 
				hp = 0;
			}
		}

@@ -4080,22 +4101,22 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		{
			if (Evalue(1421) >= 2)
			{
				num9 /= 2; 
				num10 /= 2; 
			}
			dmg = num9; 
			dmg = num10; 
			if (Chara.mana.value > 0)
			{
				num9 -= Chara.mana.value; 
				num10 -= Chara.mana.value; 
				Chara.mana.value -= dmg;
				num8 += dmg; 
				num9 += dmg; 
			}
			if (Chara.mana.value <= 0)
			{
				hp -= num9; 
				num8 += num9; 
				hp -= num10; 
				num9 += num10; 
			}
		}
		dmg = num8; 
		dmg = num9; 
	}
	else
	{

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

cs
		aI_PracticeDummy.totalDamage += dmg;
	}
	ZoneInstanceBout zoneInstanceBout = EClass._zone.instance as ZoneInstanceBout;
	bool flag = false; 
	bool flag2 = false; 
	if (hp < 0 && Religion.recentWrath == null)
	{
		if (isRestrained && IsPCFaction && EClass._zone.IsPCFaction && (!IsPC || (Chara.ai is AI_Torture && Chara.ai.IsRunning)))

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

cs
			else if (Chara.host != null || (weapon != null && weapon.HasElement(485)))
			{
				EvadeDeath();
				flag = true; 
				flag2 = true; 
			}
			else if (zoneInstanceBout != null && (bool)LayerDrama.Instance)
			{

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

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

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

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

@@ -4259,18 +4280,18 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
				PlaySound("revive");
				return;
			}
			foreach (Chara chara3 in EClass._map.charas) 
			foreach (Chara chara4 in EClass._map.charas) 
			{
				if (Chara.IsFriendOrAbove(chara3) && chara3.HasElement(1408) && chara3.faith == EClass.game.religions.Healing && EClass.world.date.GetRawDay() != chara3.GetInt(58) && (!chara3.IsPCFaction || IsPCFaction)) 
				if (Chara.IsFriendOrAbove(chara4) && chara4.HasElement(1408) && chara4.faith == EClass.game.religions.Healing && EClass.world.date.GetRawDay() != chara4.GetInt(58) && (!chara4.IsPCFaction || IsPCFaction)) 
				{
					Msg.alwaysVisible = true;
					Msg.Say("layhand", chara3, this); 
					Msg.Say("layhand", chara4, this); 
					Msg.Say("pray_heal", this);
					hp = MaxHP;
					Chara.AddCondition<ConInvulnerable>();
					PlayEffect("revive");
					PlaySound("revive");
					chara3.SetInt(58, EClass.world.date.GetRawDay()); 
					chara4.SetInt(58, EClass.world.date.GetRawDay()); 
					return;
				}
			}

@@ -4376,26 +4397,26 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
	}
	else if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin != null)
	{
		(IsPC ? EClass.pc : origin).Say("dmgMelee" + num7 + (IsPC ? "pc" : ""), origin, this); 
		(IsPC ? EClass.pc : origin).Say("dmgMelee" + num8 + (IsPC ? "pc" : ""), origin, this); 
	}
	else if (isChara)
	{
		int num10 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2); 
		if (num7 >= num10) 
		int num11 = ((attackSource != AttackSource.Condition && attackSource != AttackSource.WeaponEnchant) ? 1 : 2); 
		if (num8 >= num11) 
		{
			if (e != Element.Void)
			{
				Say("dmg_" + e.source.alias, this);
			}
			if (e == Element.Void || num7 >= 2) 
			if (e == Element.Void || num8 >= 2) 
			{
				Say("dmg" + num7, this); 
				Say("dmg" + num8, this); 
			}
		}
	}
	if (isChara)
	{
		if (flag) 
		if (flag2) 
		{
			if (!Chara.HasCondition<ConFaint>())
			{

@@ -4409,9 +4430,10 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
			{
				origin.HealHP(Mathf.Clamp(EClass.rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 + EClass.rnd(10)));
			}
			if ((attackSource == AttackSource.Melee || attackSource == AttackSource.Range) && origin.Dist(this) <= 1) 
			if (attackSource == AttackSource.Melee || attackSource == AttackSource.Range) 
			{
				if (attackSource == AttackSource.Melee && HasElement(1221)) 
				int num12 = origin.Dist(this); 
				if (attackSource == AttackSource.Melee && HasElement(1221) && num12 <= Evalue(1221)) 
				{
					int ele2 = ((Chara.MainElement == Element.Void) ? 924 : Chara.MainElement.id);
					if (id == "hedgehog_ether")

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

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

@@ -4448,17 +4470,17 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
			}
		}
	}
	int num11 = ((EClass.rnd(2) == 0) ? 1 : 0); 
	int num13 = ((EClass.rnd(2) == 0) ? 1 : 0); 
	if (attackSource == AttackSource.Condition)
	{
		num11 = 1 + EClass.rnd(2); 
		num13 = 1 + EClass.rnd(2); 
	}
	if (num11 > 0) 
	if (num13 > 0) 
	{
		bool flag2 = Chara.HasCondition<ConPoison>() || ((e.id == 915 || e.id == 923) && ResistLv(Evalue(955)) < 4); 
		AddBlood(num11, flag2 ? 6 : (-1)); 
		bool flag3 = Chara.HasCondition<ConPoison>() || ((e.id == 915 || e.id == 923) && ResistLv(Evalue(955)) < 4); 
		AddBlood(num13, flag3 ? 6 : (-1)); 
	}
	bool flag3 = true; 
	bool flag4 = true; 
	switch (e.id)
	{
	case 910:

@@ -4499,14 +4521,14 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		}
		break;
	case 918:
		flag3 = false; 
		flag4 = false; 
		if (Chance(30 + eleP / 5, 100))
		{
			Chara.AddCondition<ConParalyze>(eleP);
		}
		break;
	case 914:
		flag3 = false; 
		flag4 = false; 
		if (EClass.rnd(3) != 0)
		{
			if (Chance(30 + eleP / 5, 100))

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

cs
		}
		break;
	case 920:
		flag3 = false; 
		flag4 = false; 
		if (Chance(5 + eleP / 25, 40))
		{
			Chara.AddCondition<ConBlind>(eleP / 2);

@@ -4598,20 +4620,20 @@ public void DamageHP(int dmg, int ele, int eleP = 100, AttackSource attackSource

cs
		Chara.AddCondition<ConGravity>(2000);
		Condition.ignoreEffect = false;
	}
	if (Chara.conSleep != null && flag3) 
	if (Chara.conSleep != null && flag4) 
	{
		Chara.conSleep.Kill();
	}
	if (IsPC)
	{
		float num12 = (float)hp / (float)MaxHP; 
		float num14 = (float)hp / (float)MaxHP; 
		if (Evalue(1421) > 0)
		{
			num12 = (float)Chara.mana.value / (float)Chara.mana.max; 
			num14 = (float)Chara.mana.value / (float)Chara.mana.max; 
		}
		if (num12 < 0.3f) 
		if (num14 < 0.3f) 
		{
			PlaySound("heartbeat", 1f - num12 * 2f); 
			PlaySound("heartbeat", 1f - num14 * 2f); 
		}
	}
	if (!IsPC && hp < MaxHP / 5 && Evalue(423) <= 0 && dmg * 100 / MaxHP + 10 > EClass.rnd(IsPowerful ? 400 : 150) && !HasCondition<ConFear>())

@@ -4684,29 +4706,29 @@ void ProcAbsorb()

cs
			int valueOrDefault2 = (origin.Evalue(661) + weapon?.Evalue(661, ignoreGlobalElement: true)).GetValueOrDefault();
			if (valueOrDefault > 0 && attackSource == AttackSource.Melee && origin.isChara && !origin.Chara.ignoreSPAbsorb && Chara.IsHostile(origin as Chara))
			{
				int num13 = EClass.rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10)); 
				origin.Chara.stamina.Mod(num13); 
				int num15 = EClass.rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10)); 
				origin.Chara.stamina.Mod(num15); 
				if (IsAliveInCurrentZone)
				{
					Chara.stamina.Mod(-num13); 
					Chara.stamina.Mod(-num15); 
				}
			}
			if (origin.HasElement(1350) && attackSource == AttackSource.Melee)
			{
				int num14 = EClass.rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10)); 
				origin.Chara.mana.Mod(num14); 
				int num16 = EClass.rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10)); 
				origin.Chara.mana.Mod(num16); 
				if (IsAliveInCurrentZone)
				{
					Chara.mana.Mod(-num14); 
					Chara.mana.Mod(-num16); 
				}
			}
			if (valueOrDefault2 > 0 && attackSource == AttackSource.Melee)
			{
				int num15 = EClass.rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10)); 
				origin.Chara.mana.Mod(num15); 
				int num17 = EClass.rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10)); 
				origin.Chara.mana.Mod(num17); 
				if (IsAliveInCurrentZone)
				{
					Chara.mana.Mod(-num15); 
					Chara.mana.Mod(-num17); 
				}
			}
		}

CardRenderer

@@ -38,16 +38,13 @@ public Vector3 PositionCenter()

cs
public virtual void SetOwner(Card c)
{
	owner = c;
	if (data == null) 
	if (owner.trait is TraitFakeBlock) 
	{
		if (owner.trait is TraitFakeBlock) 
		{ 
			data = EClass.sources.blocks.map[owner.refVal].renderData; 
		} 
		else
		{ 
			data = owner.sourceCard.renderData; 
		} 
		data = EClass.sources.blocks.map[owner.refVal].renderData; 
	} 
	else if (data == null) 
	{ 
		data = owner.sourceCard.renderData; 
	}
	isChara = c.isChara;
	usePass = data.pass != null;

@@ -269,7 +266,7 @@ public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)

cs
		if (drawShadow && shadow != 1 && SubPassData.Current.shadow && (!flag2 || owner.IsPC))
		{
			bool flag3 = ((!isChara) ? (owner.dir % 2 == 1) : (owner.dir == 1 || owner.dir == 2));
			EClass.scene.screenElin.tileMap.passShadow.AddShadow(position.x + (flag3 ? (-1f) : 1f) * renderData.offsetShadow.x, position.y + renderData.offsetShadow.y + (owner.TileType.UseMountHeight ? 0f : p.shadowFix) - RenderObject.altitudeFix * (float)owner.altitude, position.z + renderData.offsetShadow.z, ShadowData.Instance.items[shadow], pref, prefIndex, p.snow); 
			EClass.scene.screenElin.tileMap.passShadow.AddShadow(position.x + (flag3 ? (-1f) : 1f) * renderData.offsetShadow.x, position.y + renderData.offsetShadow.y + (owner.TileType.UseMountHeight ? 0f : p.shadowFix) - (owner.isChara ? 0f : (RenderObject.altitudeFix * (float)owner.altitude)), position.z + renderData.offsetShadow.z, ShadowData.Instance.items[shadow], pref, prefIndex, p.snow); 
		}
		if (usePass)
		{

CodexManager

@@ -72,7 +72,7 @@ public List<CardRow> ListKills()

cs
	List<CardRow> list = new List<CardRow>();
	foreach (KeyValuePair<string, CodexCreature> creature in creatures)
	{
		if (creature.Value.kills > 0) 
		if (creature.Value.kills > 0 || creature.Value.droppedCard) 
		{
			CardRow cardRow = EClass.sources.cards.map.TryGetValue(creature.Key);
			if (cardRow != null && !cardRow.HasTag(CTAG.noRandomProduct))

FEAT

@@ -115,14 +115,16 @@ public class FEAT

cs

	public const int featDefender = 1649;

	public const int featElea = 1213; 
	public const int featFairyResist = 1212; 

	public const int featManaMeat = 1421;

	public const int featFairyResist = 1212; 
	public const int featElea = 1213; 

	public const int featMilitant = 1419;

	public const int featMeatCushion = 1241; 
	public const int featGod_element1 = 1300;

	public const int featGod_earth1 = 1305;

@@ -137,14 +139,14 @@ public class FEAT

cs

	public const int featGod_luck1 = 1330;

	public const int featGod_harmony1 = 1335; 
	public const int featGod_oblivion1 = 1340; 

	public const int featGod_trickery1 = 1345;

	public const int featMassSummoner = 1240; 
	public const int featGod_moonshadow1 = 1350;

	public const int featGod_strife1 = 1355; 
	public const int featWarrior = 1400;

	public const int featThief = 1401;

@@ -163,11 +165,11 @@ public class FEAT

cs

	public const int featPaladin2 = 1408;

	public const int featGod_strife1 = 1355; 
	public const int featMassSummoner = 1240; 

	public const int featDemon = 1239; 
	public const int featBoost = 1409; 

	public const int featElder = 1238; 
	public const int featDemon = 1239; 

	public const int featRoran = 1237;

@@ -197,10 +199,10 @@ public class FEAT

cs

	public const int featLittleOne = 1229;

	public const int featGolem = 1217; 
	public const int featAdam = 1230;

	public const int featGolem = 1217; 
	public const int featNirvana = 1231;

	public const int featBaby = 1232;

@@ -213,11 +215,11 @@ public class FEAT

cs

	public const int featNorland = 1236;

	public const int featBoost = 1409; 
	public const int featElder = 1238; 

	public const int featReboot = 1410;

	public const int featGod_oblivion1 = 1340; 
	public const int featGod_harmony1 = 1335; 

	public const int featLuckyCat = 1412;

@@ -235,20 +237,20 @@ public class FEAT

cs

	public const int featEarthStrength = 1411;

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

FOOD

@@ -6,13 +6,13 @@ public class FOOD

cs

	public const int food_poison = 702;

	public const int food_love = 703; 
	public const int food_bug = 704; 

	public const int gainWeight = 705;

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

	public const int food_bug = 704; 
	public const int kirimi = 707; 

	public const int food_human = 708;

@@ -20,13 +20,13 @@ public class FOOD

cs

	public const int justcooked = 757;

	public const int food_god = 758; 
	public const int loseWeight = 706; 

	public const int kirimi = 707; 
	public const int food_god = 758; 

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

MUTATION

@@ -6,27 +6,27 @@ public class MUTATION

cs

	public const int mutationSpeedN = 1519;

	public const int mutationSkin = 1510; 
	public const int mutationSpeed = 1518; 

	public const int mutationSkinN = 1511; 
	public const int mutationSkin = 1510; 

	public const int mutationDexN = 1515;

	public const int mutationRegen = 1516; 
	public const int mutationDex = 1514;

	public const int mutationEyeN = 1513;

	public const int mutationEye = 1512;

	public const int mutationSkinN = 1511; 
	public const int mutationCha = 1522;

	public const int mutationRegenN = 1517; 
	public const int mutationRegen = 1516; 

	public const int mutationChaN = 1523;

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

	public const int mutationBrainN = 1525;

@@ -82,8 +82,8 @@ public class MUTATION

cs

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

Net

@@ -62,13 +62,13 @@ public class DownloadCahce

cs

	public List<ChatLog> chatList;

	private const string urlScript = "http://ylva.php.xdomain.jp/script/"; 
	public static string urlScript = "http://elin.cloudfree.jp/script/"; 

	private const string urlChat = "http://ylva.php.xdomain.jp/script/chat/"; 
	public static string urlChat = urlScript + "chat/"; 

	private const string urlVote = "http://ylva.php.xdomain.jp/script/vote/"; 
	public static string urlVote = urlScript + "vote/"; 

	private const string urlUpload = "http://ylva.php.xdomain.jp/script/uploader/"; 
	public static string urlUpload = urlScript + "uploader/"; 

	public static bool isUploading;

@@ -136,7 +136,7 @@ public static async UniTask<bool> UploadFile(string id, string password, string

cs
	Debug.Log(password);
	Debug.Log(tag);
	Debug.Log(array.Length);
	using (UnityWebRequest www = UnityWebRequest.Post("http://ylva.php.xdomain.jp/script/uploader/uploader.php", wWWForm)) 
	using (UnityWebRequest www = UnityWebRequest.Post(urlUpload + "uploader.php", wWWForm)) 
	{
		try
		{

@@ -170,7 +170,7 @@ public static async UniTask<FileInfo> DownloadFile(DownloadMeta item, string pat

cs
		Debug.Log("Returning Cache:" + path + fn);
		return new FileInfo(path + fn);
	}
	using UnityWebRequest www = UnityWebRequest.Get("http://ylva.php.xdomain.jp/script/uploader/files/" + idLang + "/" + fn);
	using UnityWebRequest www = UnityWebRequest.Get(urlUpload + "files/" + idLang + "/" + fn); 
	www.downloadHandler = new DownloadHandlerFile(path + fn);
	try
	{

@@ -197,7 +197,7 @@ public static async UniTask<FileInfo> DownloadFile(DownloadMeta item, string pat

cs
public static async UniTask<List<DownloadMeta>> GetFileList(string idLang)
{
	List<DownloadMeta> list = new List<DownloadMeta>();
	using UnityWebRequest www = UnityWebRequest.Get("http://ylva.php.xdomain.jp/script/uploader/files/" + idLang + "/index.txt"); 
	using UnityWebRequest www = UnityWebRequest.Get(urlUpload + "files/" + idLang + "/index.txt"); 
	try
	{
		await www.SendWebRequest();

@@ -245,7 +245,7 @@ public static async UniTask<bool> SendVote(int id, string idLang)

cs
		wWWForm.AddField("vote", id.ToString() ?? "");
		wWWForm.AddField("idLang", idLang);
		wWWForm.AddField("submit", "Send");
		using UnityWebRequest www = UnityWebRequest.Post("http://ylva.php.xdomain.jp/script/vote/vote.php", wWWForm);
		using UnityWebRequest www = UnityWebRequest.Post(urlVote + "vote.php", wWWForm); 
		await www.SendWebRequest();
		if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
		{

@@ -269,7 +269,7 @@ public static async UniTask<List<VoteLog>> GetVote(string idLang)

cs
	List<VoteLog> list = new List<VoteLog>();
	try
	{
		string uri = $"http://ylva.php.xdomain.jp/script/vote/logs/data_{idLang}.txt"; 
		string uri = string.Format(urlVote + "logs/data_{0}.txt", idLang); 
		using UnityWebRequest www = UnityWebRequest.Get(uri);
		await www.SendWebRequest();
		if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)

@@ -336,7 +336,7 @@ public static async UniTask<bool> SendChat(string name, string msg, ChatCategory

cs
		wWWForm.AddField("idLang", idLang);
		try
		{
			using UnityWebRequest www = UnityWebRequest.Post("http://ylva.php.xdomain.jp/script/chat/chat.php", wWWForm); 
			using UnityWebRequest www = UnityWebRequest.Post(urlChat + "chat.php", wWWForm); 
			await www.SendWebRequest();
			if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)
			{

@@ -368,7 +368,7 @@ public static async UniTask<List<ChatLog>> GetChat(ChatCategory cat, string idLa

cs
		{
			idLang = "DEBUG";
		}
		string uri = $"http://ylva.php.xdomain.jp/script/chat/logs/all_{idLang}.json"; 
		string uri = string.Format(urlChat + "logs/all_{0}.json", idLang); 
		using UnityWebRequest www = UnityWebRequest.Get(uri);
		await www.SendWebRequest();
		if (www.result == UnityWebRequest.Result.ConnectionError || www.result == UnityWebRequest.Result.ProtocolError)

SKILL

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

cs

	public const int marksman = 133;

	public const int tactics = 132; 
	public const int fishing = 245; 

	public const int climbing = 242;

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

cs

	public const int eyeofmind = 134;

	public const int fishing = 245; 
	public const int twowield = 131; 

	public const int spotting = 210;

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

cs

	public const int gathering = 250;

	public const int twowield = 131; 
	public const int tactics = 132; 

	public const int blacksmith = 256;

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

cs

	public static readonly int[] IDS = new int[133]
	{
		50, 109, 110, 111, 120, 122, 123, 130, 133, 132, 
		50, 109, 110, 111, 120, 122, 123, 130, 133, 245, 
		242, 241, 240, 237, 235, 230, 227, 226, 225, 220,
		207, 200, 152, 151, 150, 135, 134, 245, 210, 102, 
		207, 200, 152, 151, 150, 135, 134, 131, 210, 102, 
		107, 71, 70, 68, 67, 66, 65, 72, 64, 61,
		60, 57, 56, 55, 51, 62, 73, 74, 75, 106,
		105, 104, 103, 101, 100, 93, 92, 91, 90, 80,
		79, 78, 77, 76, 108, 250, 131, 256, 916, 917, 
		79, 78, 77, 76, 108, 250, 132, 256, 916, 917, 
		918, 919, 920, 921, 922, 923, 924, 925, 926, 950,
		951, 952, 915, 953, 956, 957, 958, 959, 960, 961,
		962, 963, 964, 965, 970, 971, 972, 255, 954, 914,

SerializedCards

@@ -762,6 +762,10 @@ public void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial = nu

cs
			}
			card2.SetObj(5, null);
		}
		if (card2.trait is TraitFakeBlock) 
		{ 
			card2._CreateRenderer(); 
		} 
		if (addToZone)
		{
			EClass._zone.AddCard(card2, card2.pos);

Thing

@@ -267,7 +267,7 @@ public override void OnCreate(int genLv)

cs
		{
			if (bp.qualityBonus == 0)
			{
				num4 = EClass.rnd(EClass.rnd(12) + 1); 
				num4 = EClass.rnd(EClass.rnd(14) + 1); 
				if (num4 == 1 && EClass.rnd(3) != 0)
				{
					num4 = 0;

TraitFakeBlock

@@ -6,7 +6,10 @@ public class TraitFakeBlock : Trait

cs

	public override void OnCreate(int lv)
	{
		owner.refVal = 1; 
		if (owner.refVal == 0) 
		{ 
			owner.refVal = 1; 
		} 
	}

	public override void OnCrafted(Recipe recipe, List<Thing> ings)