Skip to content

EA 23.175 Nightly

August 4, 2025

26 files modified.

Important Changes

None.

ActEffect

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

cs
			{
				continue;
			}
			if (chara.rarity >= Rarity.Legendary) 
			{ 
				j--; 
				continue; 
			} 
			int num6 = -1;
			num6 = ((!(actRef.n1 == "shadow")) ? (chara.LV * (100 + power / 10) / 100 + power / 30) : (power / 10 + 1));
			if (chara.LV < num6)

Card

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

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

@@ -5603,6 +5603,10 @@ public bool HasGlobalElement(int ele)

cs

	public bool HasElementNoCopy()
	{
		if (HasElement(764)) 
		{ 
			return true; 
		} 
		if (HasElement(759))
		{
			return true;

@@ -6910,18 +6914,16 @@ public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
		switch (currency)
		{
		case CurrencyType.Ecopo:
		{ 
			string text = id; 
			if (!(text == "plat")) 
			switch (id) 
			{
				if (!(text == "whip_egg")) 
				{ 
					break; 
				} 
			case "plat": 
				return 500; 
			case "whip_egg": 
				return 3000;
			case "helm_chef": 
				return 40000; 
			}
			return 500; 
		} 
			break; 
		case CurrencyType.Plat:
		{
			string text = id;

@@ -6958,6 +6960,8 @@ public virtual int GetPrice(CurrencyType currency = CurrencyType.Money, bool sel

cs
				return 3;
			case "wrench_tent_soil":
				return 3;
			case "wrench_tent_seabed":
				return 12; 
			case "wrench_bed":
				return 3;
			case "wrench_storage":

Chara

@@ -957,7 +957,17 @@ public int Speed

cs
		}
	}

	public bool IsMofuable => race.tag.Contains("mofu"); 
	public bool IsMofuable 
	{ 
		get 
		{ 
			if (!race.tag.Contains("mofu")) 
			{ 
				return HasElement(419); 
			} 
			return true; 
		} 
	} 

	public ElementContainer baseWorkElements
	{

CharaRenderer

@@ -336,7 +336,9 @@ public void DrawHat()

cs
		RenderObject.currentParam.z -= pref.hatY;
		RenderObject.currentParam.tile = cardRow._tiles[owner.uid % cardRow._tiles.Length] * ((!flag) ? 1 : (-1));
		cardRow.renderData.Draw(RenderObject.currentParam);
		RenderObject.currentParam.y -= num; 
		RenderObject.currentParam.x -= 0.01f * (float)pref.equipX; 
		RenderObject.currentParam.y -= num + 0.01f * (float)pref.equipY; 
		RenderObject.currentParam.z += pref.hatY; 
		RenderObject.currentParam.liquidLv = liquidLv;
	}

CraftUtil

@@ -158,6 +158,7 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
	bool isFood = type == MixType.Food;
	int nutFactor = 100 - (ings.Count - 1) * 5;
	Thing thing = ((ings.Count > 0) ? ings[0] : null);
	bool creative = crafter?.HasElement(487) ?? false; 
	if (crafter != null && crafter.Evalue(1650) >= 3)
	{
		nutFactor -= 10;

@@ -266,6 +267,10 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
			product.elements.SetTo(10, 1);
		}
	}
	if (creative) 
	{ 
		product.elements.SetBase(764, 1); 
	} 
	return product;
	bool IsValidTrait(Element e)
	{

@@ -309,6 +314,10 @@ void MixElements(Card t)

cs
						{
							num5 *= -1;
						}
						if (creative && num5 > 500) 
						{ 
							num5 = 500; 
						} 
						product.elements.ModBase(value3.id, num5);
					}
					else

ELEMENT

@@ -833,7 +833,7 @@ public void AddEncNote(UINote n, Card Card, ElementContainer.NoteMode mode = Ele

cs
			text = "isProc".lang(Name);
			flag3 = false;
		}
		else if (categorySub == "resist") 
		else if (categorySub == "resist" || this is Feat) 
		{
			text = ("isResist" + (flag3 ? "Neg" : "")).lang(Name);
		}

ENC

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

cs

	public const int mod_chaser = 620;

	public const int negateParalysis = 422; 
	public const int negateFear = 423; 

	public const int mod_splash = 608;

	public const int negateShockwave = 430; 
	public const int breathing = 429;

	public const int allNeckHunt = 428;

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

cs

	public const int negateSleep = 424;

	public const int negateFear = 423; 
	public const int negateParalysis = 422; 

	public const int negateBlind = 421;

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

cs

	public const int seeInvisible = 416;

	public const int negateShockwave = 430; 
	public const int invisibility = 415;

	public const int encHit = 414; 
	public const int slowCorruption = 412;

	public const int encSpell = 411;

@@ -92,11 +94,11 @@ public class ENC

cs

	public const int corruption = 409;

	public const int resWeather = 408; 
	public const int mod_talisman = 609; 

	public const int travelSpeed = 407;

	public const int mod_talisman = 609; 
	public const int resMutation = 406; 

	public const int slowDecay = 405;

@@ -110,63 +112,63 @@ public class ENC

cs

	public const int negateTeleport = 400;

	public const int encHit = 414; 
	public const int sustain_STR = 440;

	public const int resMutation = 406; 
	public const int sustain_END = 441; 

	public const int sustain_DEX = 442; 
	public const int resWeather = 408; 

	public const int sustain_END = 441; 
	public const int sustain_PER = 443; 

	public const int mod_scatter = 607; 
	public const int force_weapon = 482; 

	public const int mod_drill = 606; 
	public const int optimizeMana = 483; 

	public const int mod_precision = 605; 
	public const int slot_rune = 484; 

	public const int mod_ammo_recover = 604; 
	public const int nonLethal = 485; 

	public const int mod_rapid = 602; 
	public const int safetyMeasure = 486; 

	public const int mod_reload = 601; 
	public const int creativeChef = 487; 
	public const int revealFaith = 481; 

	public const int mod_ammo = 600;

	public const int safetyMeasure = 486; 
	public const int mod_ammo_knockback = 603; 

	public const int nonLethal = 485; 
	public const int mod_ammo_recover = 604; 

	public const int slot_rune = 484; 
	public const int mod_precision = 605; 

	public const int optimizeMana = 483; 
	public const int mod_drill = 606; 

	public const int force_weapon = 482; 
	public const int mod_scatter = 607; 

	public const int revealFaith = 481; 
	public const int sustain_DEX = 442; 
	public const int mod_reload = 601; 

	public const int strongStomach = 480;

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

	public const int bane_fish = 467;

	public const int bane_all = 468;

	public const int sustain_LER = 444; 
	public const int sustain_WIL = 445;

	public const int sustain_CHA = 447; 
	public const int sustain_MAG = 446; 

	public const int bane_dragon = 460; 
	public const int sustain_CHA = 447; 

	public const int bane_undead = 461;

	public const int sustain_MAG = 446; 
	public const int bane_fairy = 462; 

	public const int sustain_PER = 443; 
	public const int bane_dragon = 460; 

	public const int bane_animal = 463;

@@ -176,18 +178,18 @@ public class ENC

cs

	public const int bane_god = 466;

	public const int bane_fairy = 462; 
	public const int sustain_LER = 444; 

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

ElementContainer

@@ -277,13 +277,24 @@ public void ModExp(int ele, int a, bool chain = false)

cs
	{
		return;
	}
	if (!chain && a > 0 && Card != null && Card.isChara) 
	if (!chain) 
	{
		a = a * Card.Chara.GetDaysTogetherBonus() / 100; 
		if (a > 0 && Card != null && Card.isChara) 
		{ 
			a = a * Card.Chara.GetDaysTogetherBonus() / 100; 
		} 
		if (element.source.parentFactor > 0f && Card != null && !element.source.aliasParent.IsEmpty()) 
		{ 
			Element element2 = element.GetParent(Card); 
			if (element2.CanGainExp) 
			{ 
				ModExp(element2.id, (int)Math.Max(1f, (float)a * element.source.parentFactor / (float)(100 + Mathf.Max(0, element2.ValueWithoutLink * 5))), chain: true); 
			} 
		} 
	}
	int value = (element.UsePotential ? element.Potential : 100); 
	if (element.UseExpMod && a >= 0)
	{
		int value = (element.UsePotential ? element.Potential : 100); 
		float num = (float)a * (float)Mathf.Clamp(value, 10, 1000) / (float)(100 + Mathf.Max(0, element.ValueWithoutLink) * 25);
		a = (int)num;
		if (EClass.rndf(1f) < num % 1f)

@@ -292,14 +303,6 @@ public void ModExp(int ele, int a, bool chain = false)

cs
		}
	}
	element.vExp += a;
	if (!chain && element.source.parentFactor > 0f && Card != null && !element.source.aliasParent.IsEmpty()) 
	{ 
		Element element2 = element.GetParent(Card); 
		if (element2.CanGainExp) 
		{ 
			ModExp(element2.id, (int)Math.Max(1f, (float)a * element.source.parentFactor / 100f), chain: true); 
		} 
	} 
	if (element.vExp >= element.ExpToNext)
	{
		int num2 = element.vExp - element.ExpToNext;

FACTION

@@ -4,27 +4,27 @@

cs

public class FACTION
{
	public const int bfPlain = 3600; 
	public const int bfFertile = 3700; 

	public const int bfForest = 3601; 
	public const int bfUndersea = 3606; 

	public const int bfSnow = 3602; 
	public const int bfCave = 3500; 

	public const int bfHill = 3603; 
	public const int bfRuin = 3702; 

	public const int bfSea = 3605;

	public const int bfUndersea = 3606; 
	public const int bfBeach = 3604; 

	public const int bfCave = 3500; 
	public const int bfHill = 3603; 

	public const int bfFertile = 3700; 
	public const int bfSnow = 3602; 

	public const int bfGeyser = 3701; 
	public const int bfForest = 3601; 

	public const int bfBeach = 3604; 
	public const int bfPlain = 3600; 

	public const int bfRuin = 3702; 
	public const int bfGeyser = 3701; 

	public const int fPromo = 2202;

@@ -38,18 +38,18 @@ public class FACTION

cs

	public const int fElec = 2201;

	public const int fHeirloom = 2120; 
	public const int fSoil = 2200; 

	public const int fTaxEvasion = 2119;

	public const int fLuck = 2118; 
	public const int fEducation = 2116; 

	public const int bfTranquil = 3703;

	public const int fEducation = 2116; 
	public const int fLoyal = 2117;

	public const int fLuck = 2118; 
	public const int fRation = 2207;

	public const int bfVolcano = 3704;

@@ -108,16 +108,16 @@ public class FACTION

cs

	public const int fConstruction = 2003;

	public const int fSoil = 2200; 
	public const int fHeirloom = 2120; 

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

FEAT

@@ -3,9 +3,7 @@

cs

public class FEAT
{
	public const int featSuccubus = 1216; 
	public const int featBodyParts = 1644; 
	public const int featDwarf = 1215; 

	public const int featSorter = 1643;

@@ -29,11 +27,11 @@ public class FEAT

cs

	public const int featHardy = 1630;

	public const int featParty = 1645; 
	public const int featSPD = 1629;

	public const int featCHA = 1627; 
	public const int featBodyParts = 1644; 
	public const int featLuck = 1628; 

	public const int featWIL = 1626;

@@ -57,15 +55,17 @@ public class FEAT

cs

	public const int featHealer = 1422;

	public const int featLuck = 1628; 
	public const int featManaMeat = 1421;

	public const int featLonelySoul = 1646; 
	public const int featCHA = 1627; 

	public const int featRapidMagic = 1648; 
	public const int featExecutioner = 1420; 

	public const int featDwarf = 1215; 
	public const int featParty = 1645; 
	public const int featSummoner = 1647; 
	public const int featManaPrecision = 1214; 

	public const int featSlowFood = 1200;

@@ -89,12 +89,10 @@ public class FEAT

cs

	public const int featUndead = 1210;

	public const int featSummoner = 1647; 
	public const int featLonelySoul = 1646; 

	public const int featSnail = 1211;

	public const int featManaPrecision = 1214; 
	public const int featFisher = 1659;

	public const int featChef = 1658;

@@ -117,13 +115,17 @@ public class FEAT

cs

	public const int featDefender = 1649;

	public const int featRapidMagic = 1648; 
	public const int featFairyResist = 1212;

	public const int featExecutioner = 1420; 
	public const int featMilitant = 1419; 

	public const int featElea = 1213;

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

	public const int featMeatCushion = 1241;

@@ -139,7 +141,7 @@ public class FEAT

cs

	public const int featGod_healing1 = 1320;

	public const int featGod_harvest1 = 1325; 
	public const int featGod_luck1 = 1330; 

	public const int featGod_harmony1 = 1335;

@@ -165,17 +167,17 @@ public class FEAT

cs

	public const int featTourist = 1406;

	public const int featPaladin = 1407; 
	public const int featDemon = 1239; 

	public const int featMassSummoner = 1240; 
	public const int featPaladin = 1407; 

	public const int featPaladin2 = 1408; 
	public const int featElder = 1238; 

	public const int featDemon = 1239; 
	public const int featNorland = 1236; 

	public const int featRoran = 1237; 
	public const int featSwordsage = 1418; 

	public const int featMilitant = 1419; 
	public const int featGolem = 1217; 

	public const int featMetal = 1218;

@@ -201,9 +203,9 @@ public class FEAT

cs

	public const int featLittleOne = 1229;

	public const int featAdam = 1230; 
	public const int featSuccubus = 1216; 

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

	public const int featNirvana = 1231;

@@ -215,44 +217,42 @@ public class FEAT

cs

	public const int featLightEater = 1235;

	public const int featNorland = 1236; 
	public const int featElder = 1238; 
	public const int featRoran = 1237; 

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

	public const int featGod_luck1 = 1330; 
	public const int featGod_harvest1 = 1325; 

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

	public const int featWitch = 1417; 
	public const int featFoxMaid = 1415; 

	public const int featInquisitor = 1416;

	public const int featFoxMaid = 1415; 
	public const int featReboot = 1410; 
	public const int featWhiteVixen = 1414; 

	public const int featFairysan = 1413; 
	public const int featBoost = 1409; 

	public const int featLuckyCat = 1412;

	public const int featWhiteVixen = 1414; 
	public const int featEarthStrength = 1411; 
	public const int featFairysan = 1413; 

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

FOOD

@@ -1,11 +1,11 @@

cs
public class FOOD
{
	public const int creativeDish = 764; 
	public const int food_god = 758;

	public const int justcooked = 757;

	public const int food_cat = 701; 
	public const int food_human = 708;

	public const int kirimi = 707;

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

cs

	public const int food_poison = 702;

	public const int food_cat = 701; 
	public const int food_undead = 709;

	public const int food_CHA = 700;

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

MUTATION

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

cs
public class MUTATION
{
	public const int etherFeet = 1552; 
	public const int mutationDexN = 1515; 
	public const int mutationDex = 1514; 
	public const int etherGravity = 1550; 

	public const int mutationEyeN = 1513;

@@ -12,11 +8,17 @@ public class MUTATION

cs

	public const int mutationSkinN = 1511;

	public const int mutationSkin = 1510; 
	public const int etherEye = 1553; 
	public const int etherWing = 1554; 
	public const int etherNeck = 1555;

	public const int etherViolence = 1556; 
	public const int etherUgly = 1551; 

	public const int etherEye = 1553; 
	public const int etherHead = 1557; 

	public const int etherRain = 1558;

@@ -32,42 +34,36 @@ public class MUTATION

cs

	public const int etherManaBattery = 1564;

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

	public const int mutationRegen = 1516; 
	public const int mutationRegenN = 1517; 
	public const int etherHead = 1557; 
	public const int mutationSpeed = 1518; 
	public const int mutationDex = 1514; 

	public const int etherUgly = 1551; 
	public const int mutationDexN = 1515; 

	public const int etherWing = 1554; 
	public const int etherViolence = 1556; 

	public const int etherGravity = 1550; 
	public const int etherFeet = 1552; 

	public const int mutationHairN = 1533;

	public const int mutationRegen = 1516; 
	public const int mutationHair = 1532;

	public const int mutationBodyN = 1531;

	public const int mutationLightningN = 1529; 
	public const int mutationBody = 1530; 

	public const int mutationLightning = 1528; 
	public const int mutationLightningN = 1529; 

	public const int mutationColdN = 1527;

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

	public const int mutationBrainN = 1525;

	public const int mutationLightning = 1528; 
	public const int mutationBrain = 1524;

	public const int mutationChaN = 1523;

@@ -80,12 +76,16 @@ public class MUTATION

cs

	public const int mutationSpeedN = 1519;

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

POLICY

@@ -41,7 +41,7 @@ public class POLICY

cs

	public const int open_business = 2810;

	public const int speed_growth = 2516; 
	public const int stop_growth = 2515; 

	public const int livestock_priv = 2715;

@@ -51,6 +51,8 @@ public class POLICY

cs

	public const int ban_radio = 2510;

	public const int self_sufficient = 2511; 
	public const int legal_drug = 2505;

	public const int impressment = 2504;

@@ -61,13 +63,11 @@ public class POLICY

cs

	public const int faith_tax = 2501;

	public const int wealth_tax = 2500; 
	public const int home_discount = 2800;

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

	public const int self_sufficient = 2511; 
	public const int inquisition = 2507; 

	public const int resident_tax = 2512;

@@ -75,21 +75,23 @@ public class POLICY

cs

	public const int human_right = 2506;

	public const int stop_growth = 2515; 
	public const int speed_growth = 2516; 

	public const int trash_no = 2702; 
	public const int trash_sort = 2701; 

	public const int weed_no = 2703; 
	public const int trash_no = 2702; 

	public const int taxfree = 2514;

	public const int border_watch = 2704; 
	public const int taxTransfer = 2705;

	public const int demon_invocation = 2706;

	public const int auto_farm = 2707; 
	public const int weed_no = 2703; 

	public const int border_watch = 2704; 
	public const int noDM = 2708; 

	public const int noAnimal = 2709;

@@ -99,20 +101,18 @@ public class POLICY

cs

	public const int forcePanty = 2712;

	public const int trash_sort = 2701; 
	public const int energy_conservation = 2700;

	public const int noDM = 2708; 
	public const int auto_farm = 2707; 

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

Props

@@ -218,13 +218,18 @@ public ThingStack ListThingStack(Recipe.Ingredient ing, StockSearchMode searchMo

cs
		{
			FindCat(item);
		}
		stack.list.Sort(UIList.SortMode.ByCategory); 
		return stack; 
	}
	Find(id2); 
	foreach (string item2 in ing.idOther) 
	else
	{
		Find(item2); 
		Find(id2); 
		foreach (string item2 in ing.idOther) 
		{ 
			Find(item2); 
		} 
	} 
	if (ing.ingType == Recipe.IngType.CreativeFood) 
	{ 
		FindAnyFood(); 
	}
	stack.list.Sort(UIList.SortMode.ByCategory);
	return stack;

@@ -242,13 +247,33 @@ void Find(string id)

cs
		{
			foreach (Card item3 in cardMap.GetOrCreate(id))
			{
				if (!(item3.parent is Thing thing) || (thing.c_lockLv == 0 && thing.trait.CanUseContent)) 
				if (!(item3.parent is Thing thing2) || (thing2.c_lockLv == 0 && thing2.trait.CanUseContent)) 
				{
					TryAdd(item3.Thing);
				}
			}
		}
	}
	void FindAnyFood() 
	{ 
		EClass.pc.things.Foreach(delegate(Thing t) 
		{ 
			if (!t.isEquipped) 
			{ 
				TryAdd(t); 
			} 
		}); 
		if (EClass._zone.IsPCFaction || EClass._zone is Zone_Tent || EClass.debug.enable) 
		{ 
			foreach (Card item4 in all) 
			{ 
				if (!(item4.parent is Thing thing) || (thing.c_lockLv == 0 && thing.trait.CanUseContent)) 
				{ 
					TryAdd(item4.Thing); 
				} 
			} 
		} 
	} 
	void FindCat(string id)
	{
		SourceCategory.Row cat = EClass.sources.categories.map[id];

@@ -261,12 +286,12 @@ void FindCat(string id)

cs
		});
		if (EClass._zone.IsPCFaction || EClass._zone is Zone_Tent || EClass.debug.enable)
		{
			foreach (Thing thing2 in things) 
			foreach (Thing thing3 in things) 
			{
				Card obj = thing2.parent as Card; 
				if (obj != null && obj.c_lockLv == 0 && thing2.category.IsChildOf(cat.id) && !thing2.IsExcludeFromCraft(ing)) 
				Card obj = thing3.parent as Card; 
				if (obj != null && obj.c_lockLv == 0 && thing3.category.IsChildOf(cat.id) && !thing3.IsExcludeFromCraft(ing)) 
				{
					stack.Add(thing2); 
					stack.Add(thing3); 
				}
			}
		}

@@ -278,6 +303,13 @@ void TryAdd(Thing t)

cs
				stack.Add(t.Thing);
			}
		}
		void TryAdd(Thing t) 
		{ 
			if (t.HasElement(10) && !(t.trait is TraitFoodMeal) && !t.IsExcludeFromCraft(ing) && !stack.list.Contains(t)) 
			{ 
				stack.Add(t.Thing); 
			} 
		} 
	}

	public List<Thing> ListThingsInCategory(SourceCategory.Row cat)

Recipe

@@ -11,6 +11,12 @@ public enum State

cs
		Invalid
	}

	public enum IngType
	{ 
		Default, 
		CreativeFood
	} 
	public class Ingredient : EClass
	{
		[JsonProperty]

@@ -34,6 +40,9 @@ public class Ingredient : EClass

cs
		[JsonProperty]
		public List<string> idOther = new List<string>();

		[JsonProperty] 
		public IngType ingType; 
		public Thing thing;

		public bool optional;

@@ -125,6 +134,10 @@ static string CatName(string id)

cs

		public bool IsValidIngredient(Thing t)
		{
			if (ingType == IngType.CreativeFood && t.HasElement(10)) 
			{ 
				return true; 
			} 
			if (useCat)
			{
				if (t.category.IsChildOf(id))

RecipeCard

@@ -69,7 +69,15 @@ public override void BuildIngredientList()

cs
		return;
	}
	base.BuildIngredientList();
	if (!EClass.core.IsGameStarted || EClass.core.game.isLoading || !isDish || EClass.pc.Evalue(1650) < 2) 
	if (!EClass.core.IsGameStarted || EClass.core.game.isLoading || !isDish) 
	{ 
		return; 
	} 
	if (EClass.pc.HasElement(487)) 
	{ 
		ingredients[0].ingType = IngType.CreativeFood; 
	} 
	if (EClass.pc.Evalue(1650) < 2) 
	{
		return;
	}

Region

@@ -10,6 +10,9 @@ public class Region : Zone

cs
	[JsonProperty]
	public int dateCheckSites;

	[JsonProperty] 
	public bool beachFix; 
	public override bool WillAutoSave => false;

	public override ActionMode DefaultActionMode => ActionMode.Region;

@@ -47,6 +50,25 @@ public override void OnActivate()

cs
				elomap.SetZone(zone.x, zone.y, zone);
			}
		});
		if (!beachFix) 
		{ 
			Cell[,] cells = EClass._map.cells; 
			foreach (Cell cell in cells) 
			{ 
				if (cell.blocked) 
				{ 
					int gx = cell.x + EClass.scene.elomap.minX; 
					int gy = cell.z + EClass.scene.elomap.minY; 
					EloMap.TileInfo tileInfo = EClass.scene.elomapActor.elomap.GetTileInfo(gx, gy); 
					if (tileInfo != null && tileInfo.source != null && tileInfo.source.idBiome.IsEmpty("Plain") == "Sand") 
					{ 
						cell.blocked = false; 
						cell.impassable = false; 
					} 
				} 
			} 
			beachFix = true; 
		} 
		CheckRandomSites();
	}

SKILL

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

cs

	public const int twohand = 130;

	public const int marksman = 133; 
	public const int tactics = 132; 

	public const int fishing = 245;

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

cs

	public const int mining = 220;

	public const int weightlifting = 207; 
	public const int spotting = 210; 

	public const int swimming = 200;

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

cs

	public const int twowield = 131;

	public const int spotting = 210; 
	public const int weightlifting = 207; 

	public const int weaponAxe = 102; 
	public const int weaponStaff = 103; 

	public const int weaponDagger = 107;

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

cs

	public const int weaponBow = 104;

	public const int weaponStaff = 103; 
	public const int weaponAxe = 102; 

	public const int weaponSword = 101;

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

cs

	public const int gathering = 250;

	public const int tactics = 132; 
	public const int marksman = 133; 

	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, 245, 
		50, 109, 110, 111, 120, 122, 123, 130, 132, 245, 
		242, 241, 240, 237, 235, 230, 227, 226, 225, 220,
		207, 200, 152, 151, 150, 135, 134, 131, 210, 102, 
		210, 200, 152, 151, 150, 135, 134, 131, 207, 103, 
		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, 132, 256, 916, 917, 
		105, 104, 102, 101, 100, 93, 92, 91, 90, 80, 
		79, 78, 77, 76, 108, 250, 133, 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,

TaskHarvest

@@ -574,7 +574,7 @@ public void HarvestThing()

cs
	{
		return;
	}
	if (target.isCopy) 
	if (target.isCopy || target.HasElement(764)) 
	{
		text = "ash3";
	}

Trait

@@ -1790,6 +1790,7 @@ public void OnBarter()

cs
				Add("container_magic", 1, 0).ChangeMaterial("feywood").idSkin = 3;
				Add("wrench_tent_elec", 1, 0);
				Add("wrench_tent_soil", 1, 0);
				Add("wrench_tent_seabed", 1, 0); 
				Add("wrench_bed", 1, 0).SetNum(20);
				Add("wrench_storage", 1, 0).SetNum(10);
				Add("wrench_fridge", 1, 0).SetNum(1);

@@ -1858,6 +1859,7 @@ public void OnBarter()

cs
			case ShopType.Ecopo:
				Add("ecomark", 5, 0);
				Add("whip_egg", 1, 0);
				Add("helm_chef", 1, 0); 
				Add("1165", 1, 0);
				Add("plat", 100, 0);
				AddThing(ThingGen.CreateScroll(9160).SetNum(5));

TraitBaseSpellbook

@@ -218,7 +218,7 @@ public override void OnRead(Chara c)

cs
			c.AddCondition<ConFaint>();
			if (!c.IsPC && c.faith != religion)
			{
				if (!c.source.faith.IsEmpty()) 
				if (!c.source.faith.IsEmpty() && c.source.faith == c.faith.id) 
				{
					c.Say("faith_stands", c);
					break;

TraitDetector

@@ -67,14 +67,12 @@ public void Search()

cs
	}
	else
	{
		EClass.pc.PlaySound("detect_" + ((num <= 1) ? "detected" : ((num < 5) ? "near" : ((num < 15) ? "medium" : ((num < 30) ? "far" : ((num < 50) ? "veryFar" : "superFar")))))); 
		string text = "detect_" + ((num <= 1) ? "detected" : ((num < 5) ? "near" : ((num < 15) ? "medium" : ((num < 30) ? "far" : ((num < 50) ? "veryFar" : "superFar"))))); 
		EClass.pc.PlaySound(text); 
		interval = ((num <= 1) ? 1 : ((num < 5) ? 2 : ((num < 15) ? 4 : ((num < 30) ? 7 : 10))));
		if (EClass.core.config.sound.volumeSFX < 0.1f || EClass.core.config.sound.volumeMaster < 0.1f) 
		{ 
			WidgetMainText.ignoreStack = true; 
			Msg.Say("beep".lang()); 
			WidgetMainText.ignoreStack = false; 
		} 
		WidgetMainText.ignoreStack = true; 
		Msg.Say((LangGame.Has(text) ? text : "beep").lang()); 
		WidgetMainText.ignoreStack = false; 
	}
	owner.PlayAnime(AnimeID.HitObj);
}

TraitWrench

@@ -12,6 +12,12 @@ public bool IsValidTarget(Thing t)

cs
	}
	switch (ID)
	{
	case "tent_seabed": 
		if (t.trait is TraitTent && (t.trait as TraitTent).zone != null) 
		{ 
			return !(t.trait as TraitTent).zone.IsUnderwater; 
		} 
		return false; 
	case "tent_soil":
	{
		if (!(t.trait is TraitTent))

@@ -56,6 +62,9 @@ public bool Upgrade(Thing t)

cs
{
	switch (ID)
	{
	case "tent_seabed": 
		(t.trait as TraitTent).zone.elements.ModBase(3606, 1); 
		break; 
	case "tent_elec":
		(t.trait as TraitTent).zone.elements.ModBase(2201, 2);
		break;

Zone

@@ -888,6 +888,11 @@ public void Activate()

cs
	}
	PathManager.Instance._pathfinder.PunishChangeDirection = false;
	isImported = false;
	if (this is Zone_Tent && IsUnderwater) 
	{ 
		EClass._map.config.idSceneProfile = "indoor_water"; 
		EClass.scene.profile = SceneProfile.Load(EClass._map.config.idSceneProfile); 
	} 
	if (flag && IsTown && base.lv == 0)
	{
		SpawnLostItems();

ZonePreEnterOnCompleteQuestInstance

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

cs
		{
			Debug.Log(uidClient + "/" + uidQuest + "/" + fail + "/" + quest);
			Debug.LogError("exception: quest not found:" + chara?.ToString() + "/" + chara?.quest);
			quest.Fail(); 
			return;
		}
		chara.Revive();

Zone_Tent

@@ -10,6 +10,8 @@ public class Zone_Tent : Zone

cs

	public override int MaxSoil => 50 + Evalue(2200) * 5;

	public override bool IsUnderwater => elements.Has(3606); 
	public override ZoneTransition.EnterState RegionEnterState => ZoneTransition.EnterState.Bottom;

	public override void OnBeforeDeactivate()