Skip to content

EA 23.130 Nightly

April 25, 2025

24 files modified.

Important Changes

None.

AI_Fish

@@ -394,6 +394,10 @@ public static Thing Makefish(Chara c)

cs
	}
	if (thing != null)
	{
		if (EClass._zone.IsUserZone && !c.IsPCFactionOrMinion) 
		{ 
			num2 = 1; 
		} 
		if (num2 > 1)
		{
			thing.SetNum(num2);

AI_Read

@@ -41,6 +41,10 @@ public override void OnSetOwner()

cs
			target.trait.OnRead(owner);
			target.Thing?.Identify(chara.IsPCParty);
			Success();
			if (chara.IsPC) 
			{ 
				EClass.player.EndTurn(); 
			} 
		}
	}

ButtonGrid

@@ -482,7 +482,7 @@ public void SetIngredient(Recipe r, Recipe.Ingredient _ing)

cs
		num2 = 0;
	}
	bool flag = num < num2 && !ing.optional;
	string text = (num.ToString() ?? "").TagColor(Colors.colorIngPredict) + (" -" + num2).TagColor(flag ? Colors.colorIngCost : Colors.colorIngReq); 
	string text = num.ToShortNumber().TagColor(Colors.colorIngPredict) + (" -" + num2).TagColor(flag ? Colors.colorIngCost : Colors.colorIngReq); 
	mainText.text = text;
	if (thing == null)
	{

@@ -506,7 +506,7 @@ public void SetIngredient(Recipe r, Thing t)

cs
{
	SetCard(t, Mode.Ingredient);
	int num = t.Num;
	mainText.text = num.ToString() ?? ""; 
	mainText.text = num.ToShortNumber(); 
	mainText.SetActive(enable: true);
	ing = null;
	if (t.GetRootCard() != EClass.pc)

@@ -552,7 +552,7 @@ public void SetRecipe(Recipe r)

cs
	{
		recipe.ingredients[0].RefreshThing();
		Thing thing = recipe.ingredients[0].thing;
		mainText.SetText(thing.Num.ToString() ?? "", SkinManager.CurrentColors.buttonGrid); 
		mainText.SetText(thing.Num.ToShortNumber(), SkinManager.CurrentColors.buttonGrid); 
		if (r.VirtualBlock)
		{
			r.renderRow.SetImage(icon, null, r.GetDefaultColor(), setNativeSize: true, 0, thing.trait.IdSkin);

CINT

@@ -146,6 +146,8 @@ public class CINT

cs

	public const int isSleepBeside = 123;

	public const int price_copy = 124; 

	public const int dateDeathLock = 130;

	public const int fixedValue = 131;

CTAG

@@ -35,5 +35,7 @@ public enum CTAG

cs
	dish_fail,
	random_color,
	noRandomEnc,
	noMix 
	noMix, 
	bigFish, 
	noSkinRecipe 
}

Card

@@ -1117,6 +1117,18 @@ public int c_priceAdd

cs
		}
	}

	public int c_priceCopy 
	{ 
		get 
		{ 
			return GetInt(124); 
		} 
		set 
		{ 
			SetInt(124, value); 
		} 
	} 

	public int c_fixedValue
	{
		get

@@ -4563,7 +4575,7 @@ void Heal()

cs
	}
	void ProcAbsorb()
	{
		if (origin != null && origin.isChara && isChara) 
		if (origin != null && origin.isChara && isChara && (weapon == null || !weapon.HasElement(486))) 
		{
			int valueOrDefault = (origin.Evalue(662) + weapon?.Evalue(662, ignoreGlobalElement: true)).GetValueOrDefault();
			int valueOrDefault2 = (origin.Evalue(661) + weapon?.Evalue(661, ignoreGlobalElement: true)).GetValueOrDefault();

@@ -6586,12 +6598,24 @@ public void SetSale(bool sale)

cs
public int GetValue(PriceType priceType = PriceType.Default, bool sell = false)
{
	int num = ((c_fixedValue == 0) ? trait.GetValue() : c_fixedValue);
	if (id == "plat" && !sell) 
	{ 
		num = 10000; 
	} 
	if (num == 0)
	{
		return 0;
	}
	float num2 = num;
	num2 = ((priceType != PriceType.CopyShop) ? (num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f) : (num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f)); 
	if (priceType == PriceType.CopyShop) 
	{ 
		num2 += (float)c_priceCopy * 0.2f; 
		num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f; 
	} 
	else
	{ 
		num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f; 
	} 
	if (IsFood && !material.tag.Contains("food"))
	{
		num2 *= 0.5f;

CardRow

@@ -133,6 +133,6 @@ public string GetName(Card c, bool full = false)

cs
		{
			text = ((text2 == "*r") ? "" : text2.ToTitleCase(wholeText: true)) + Lang.space + text.Bracket(type);
		}
		return text.TrimStart(' '); 
		return text.TrimStart(' ').Replace("  ", " "); 
	}
}

Chara

@@ -1460,6 +1460,10 @@ public override void OnCreate(int genLv)

cs
			}
		}
		break;
	case "baby":
	case "ika":
		SetFeat(1232, 3); 
		break; 
	}
	if (HasTag(CTAG.random_color))
	{

@@ -9253,7 +9257,7 @@ public void OnAdvanceDay()

cs
{
	if (_historyFood != null)
	{
		while (_historyFood.Count > 7) 
		while (_historyFood.Count > 5) 
		{
			_historyFood.RemoveAt(_historyFood.Count - 1);
		}

@@ -9278,7 +9282,10 @@ public void AddFoodHistory(Thing food)

cs
				new List<string>()
			};
		}
		_historyFood[0].Add(food.id); 
		if (_historyFood[0].Count < 5) 
		{ 
			_historyFood[0].Add(food.id); 
		} 
	}

	public int CountNumEaten(Thing food)

CraftUtil

@@ -186,11 +186,13 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
	}
	int num = 0;
	int num2 = 0;
	int num3 = 0; 
	foreach (Thing ing in ings)
	{
		if (ing != null)
		{
			MixElements(ing);
			num3 += ing.c_priceCopy; 
			if (isFood)
			{
				num += Mathf.Clamp(ing.SelfWeight * 80 / 100, 50, 400 + ing.SelfWeight / 20);

@@ -205,16 +207,20 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
		product.c_weight = num;
		product.c_priceAdd = num2;
	}
	product.c_priceCopy = num3; 
	if (thing != null && product.trait is TraitFoodFishSlice)
	{
		product.elements.SetTo(10, thing.Evalue(10) / 4);
		product.isWeightChanged = true;
		product.c_weight = Mathf.Min(thing.SelfWeight / 6, 1000);
		product.c_idRefCard = thing.id;
		product.c_fixedValue = ((thing.c_fixedValue == 0) ? thing.sourceCard.value : thing.c_fixedValue) / 6; 
		product.c_priceCopy = ((thing.c_priceCopy == 0) ? thing.GetValue() : thing.c_priceCopy); 
		product.c_fixedValue = ((thing.c_fixedValue == 0) ? thing.sourceCard.value : thing.c_fixedValue) / 4; 
		product.c_priceAdd = 0; 
		product.decay = thing.decay;
		product.elements.SetBase(707, 1);
		product.SetTier(thing.tier, setTraits: false);
		product.idSkin = ((thing.trait is TraitFoodFishSlice) ? thing.idSkin : (thing.HasTag(CTAG.bigFish) ? 1 : 0)); 
	}
	if (product.HasElement(652))
	{

@@ -229,23 +235,23 @@ public static Card MixIngredients(Card product, List<Thing> ings, MixType type,

cs
	{
		if (id2 == "map")
		{
			int num3 = 1 + product.Evalue(2) + product.Evalue(751); 
			if (num3 < 1) 
			int num4 = 1 + product.Evalue(2) + product.Evalue(751); 
			if (num4 < 1) 
			{
				num3 = 1; 
				num4 = 1; 
			}
			foreach (Thing ing2 in ings)
			{
				if (ing2 != null && ing2.Thing != null && !(ing2.id != "gem"))
				{
					num3 *= ing2.Thing.material.hardness / 20 + 2; 
					num4 *= ing2.Thing.material.hardness / 20 + 2; 
				}
			}
			if (num3 > EClass.pc.FameLv + 10 - 1) 
			if (num4 > EClass.pc.FameLv + 10 - 1) 
			{
				num3 = EClass.pc.FameLv + 10 - 1; 
				num4 = EClass.pc.FameLv + 10 - 1; 
			}
			product.SetInt(25, num3); 
			product.SetInt(25, num4); 
		}
	}
	else

@@ -302,8 +308,8 @@ void MixElements(Card t)

cs
					}
					else
					{
						int num4 = product.elements.Base(value3.id); 
						if ((num4 <= 0 && value3.Value < 0 && value3.Value < num4) || (value3.Value > 0 && value3.Value > num4)) 
						int num5 = product.elements.Base(value3.id); 
						if ((num5 <= 0 && value3.Value < 0 && value3.Value < num5) || (value3.Value > 0 && value3.Value > num5)) 
						{
							product.elements.SetTo(value3.id, value3.Value);
						}

DramaCustomSequence

@@ -550,7 +550,7 @@ public void Build(Chara c)

cs
	Step("_sleepBeside");
	Method(delegate
	{
		if (c.affinity.CanSleepBeside()) 
		if (c.affinity.CanSleepBeside() || c.GetInt(123) == 1) 
		{
			c.SetInt(123, (c.GetInt(123) == 0) ? 1 : 0);
		}

FoodEffect

@@ -26,7 +26,6 @@ public static void Proc(Chara c, Thing food)

cs
	{
		int num6 = c.CountNumEaten(food);
		bool flag6 = c.GetFavFood().id == food.id;
		Debug.Log(c.Name + "/" + food.id + "/" + num6); 
		if (num6 < 2 || flag6)
		{
			if (num6 == 1 || flag6 || EClass.rnd(4) == 0)

@@ -225,19 +224,18 @@ public static void Proc(Chara c, Thing food)

cs
			case "little":
			{
				int @int = c.GetInt(112);
				if (@int >= 30) 
				if (@int < 30) 
				{
					break; 
				} 
				c.Say("little_eat", c); 
				c.PlaySound("ding_potential"); 
				int v = Mathf.Max(5 - @int / 2, 1); 
				Debug.Log("sister eaten:" + @int + "/" + v); 
				foreach (Element value3 in c.elements.dict.Values) 
				{ 
					if (value3.IsMainAttribute) 
					c.Say("little_eat", c); 
					c.PlaySound("ding_potential"); 
					int v = Mathf.Max(5 - @int / 2, 1); 
					Debug.Log("sister eaten:" + @int + "/" + v); 
					foreach (Element value3 in c.elements.dict.Values) 
					{
						c.elements.ModPotential(value3.id, v); 
						if (value3.IsMainAttribute) 
						{ 
							c.elements.ModPotential(value3.id, v); 
						} 
					}
				}
				if (c.race.id == "mutant" && c.elements.Base(1230) < 10)

GridItemCard

@@ -4,7 +4,7 @@ public class GridItemCard : GridItem

cs

	public override void SetButton(ButtonGrid b)
	{
		b.mainText.text = c.Num.ToString() ?? ""; 
		b.mainText.text = c.Num.ToShortNumber(); 
		c.SetImage(b.icon);
		b.SetTooltip("note", delegate(UITooltip t)
		{

GrowSystem

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

cs
		}
		t.SetNum(num2);
	}
	else
	else if (Application.isEditor) 
	{
		Debug.Log("harvest count not set:" + source.id + "/" + source.alias);
	}

InvOwnerRecycle

@@ -29,7 +29,15 @@ public override void BuildUICurrency(UICurrency uiCurrency, bool canReroll = fal

cs

	public override bool ShouldShowGuide(Thing t)
	{
		if (!t.c_isImportant && t.things.Count == 0 && t.trait.CanBeDestroyed && !t.trait.CanOnlyCarry && t.rarity < Rarity.Artifact && t.category.GetRoot().id != "currency") 
		if (t.c_isImportant) 
		{ 
			return false; 
		} 
		if (t.id == "1084") 
		{ 
			return true; 
		} 
		if (t.things.Count == 0 && t.trait.CanBeDestroyed && !t.trait.CanOnlyCarry && t.rarity < Rarity.Artifact && t.category.GetRoot().id != "currency") 
		{
			return !(t.trait is TraitRecycle);
		}

@@ -42,6 +50,10 @@ public override void _OnProcess(Thing t)

cs
	Msg.Say("dump", t, Container.Name);
	int a = t.Num * Mathf.Clamp(t.GetPrice() / 100, 1, 100);
	a = EClass.rndHalf(a);
	if (t.id == "1084") 
	{ 
		a *= 10; 
	} 
	if (a != 0)
	{
		EClass.pc.Pick(ThingGen.Create("ecopo").SetNum(a / 10 + 1));

LayerCraft

@@ -322,7 +322,7 @@ public void RefreshCategory(string cat, bool first = false)

cs
				{
					Recipe o2 = Recipe.Create(item);
					list.Add(o2);
					if (item.row.skins != null && item.row.skins.Length != 0) 
					if (item.row.skins != null && item.row.skins.Length != 0 && !item.row.HasTag(CTAG.noSkinRecipe)) 
					{
						for (int j = 0; j < item.row.skins.Length; j++)
						{

SKILL

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

cs

	public const int mining = 220;

	public const int fishing = 245; 
	public const int marksman = 133; 

	public const int climbing = 242;

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

cs

	public const int eyeofmind = 134;

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

	public const int EDR = 56;

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

cs

	public const int gathering = 250;

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

	public const int blacksmith = 256;

@@ -269,12 +269,12 @@ public class SKILL

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

SLOT

@@ -12,7 +12,7 @@ public class SLOT

cs

	public const int back = 33;

	public const int range = 41; 
	public const int token = 43; 

	public const int lightsource = 45;

@@ -20,7 +20,7 @@ public class SLOT

cs

	public const int toolbelt = 44;

	public const int token = 43; 
	public const int range = 41; 

	public const int torso = 32;

@@ -34,7 +34,7 @@ public class SLOT

cs

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

SPELL

@@ -2,6 +2,8 @@ public class SPELL

cs
{
	public const int hand_Impact = 50415;

	public const int sword_Nether = 51006; 

	public const int ball_Sound = 50107;

	public const int bolt_Void = 50316;

@@ -22,10 +24,10 @@ public class SPELL

cs

	public const int sword_Sound = 51007;

	public const int hand_Void = 50416; 

	public const int ball_Nerve = 50108;

	public const int ball_Void = 50116; 

	public const int bolt_Nerve = 50308;

	public const int hand_Nerve = 50408;

@@ -48,13 +50,15 @@ public class SPELL

cs

	public const int bolt_Holy = 50309;

	public const int ball_Void = 50116; 
	public const int hand_Void = 50416; 

	public const int sword_Nether = 51006; 
	public const int hand_Holy = 50409; 

	public const int puddle_Nether = 50906;

	public const int weapon_Nether = 50806; 
	public const int miasma_Nether = 50706; 

	public const int hand_Mind = 50404; 

	public const int arrow_Mind = 50504;

@@ -90,10 +94,10 @@ public class SPELL

cs

	public const int sword_Poison = 51005;

	public const int ball_Nether = 50106; 

	public const int funnel_Void = 50616;

	public const int ball_Nether = 50106; 

	public const int arrow_Void = 50516;

	public const int bolt_Nether = 50306;

@@ -104,14 +108,12 @@ public class SPELL

cs

	public const int funnel_Nether = 50606;

	public const int miasma_Nether = 50706; 
	public const int weapon_Nether = 50806; 

	public const int hand_Holy = 50409; 
	public const int bolt_Impact = 50315; 

	public const int arrow_Holy = 50509;

	public const int funnel_Holy = 50609; 

	public const int miasma_Holy = 50709;

	public const int miasma_Ether = 50712;

@@ -132,7 +134,7 @@ public class SPELL

cs

	public const int arrow_Acid = 50513;

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

	public const int miasma_Acid = 50713;

@@ -166,7 +168,7 @@ public class SPELL

cs

	public const int funnel_Ether = 50612;

	public const int bolt_Impact = 50315; 
	public const int funnel_Holy = 50609; 

	public const int arrow_Ether = 50512;

@@ -226,9 +228,9 @@ public class SPELL

cs

	public const int funnel_Acid = 50613;

	public const int puddle_Fire = 50900; 
	public const int weapon_Fire = 50800; 

	public const int ball_Mind = 50104; 
	public const int sword_Darkness = 51003; 

	public const int SpHealLight = 8400;

@@ -352,12 +354,14 @@ public class SPELL

cs

	public const int SpIdentify = 8230;

	public const int bolt_Mind = 50304; 
	public const int ball_Mind = 50104; 

	public const int SpTelepathy = 8770;

	public const int SpSeeInvisible = 8776;

	public const int puddle_Fire = 50900; 

	public const int sword_Fire = 51000;

	public const int ball_Cold = 50101;

@@ -382,11 +386,11 @@ public class SPELL

cs

	public const int bolt_Lightning = 50302;

	public const int hand_Lightning = 50402; 
	public const int miasma_Fire = 50700; 

	public const int weapon_Fire = 50800; 
	public const int hand_Lightning = 50402; 

	public const int arrow_Lightning = 50502; 
	public const int funnel_Lightning = 50602; 

	public const int miasma_Lightning = 50702;

@@ -412,15 +416,13 @@ public class SPELL

cs

	public const int puddle_Darkness = 50903;

	public const int sword_Darkness = 51003; 

	public const int funnel_Lightning = 50602; 
	public const int arrow_Lightning = 50502; 

	public const int SpInvisibility = 8775;

	public const int miasma_Fire = 50700; 
	public const int funnel_Fire = 50600; 

	public const int arrow_Fire = 50500; 
	public const int hand_Fire = 50400; 

	public const int SpIncognito = 8780;

@@ -448,10 +450,12 @@ public class SPELL

cs

	public const int SpSummonOrc = 9007;

	public const int funnel_Fire = 50600; 
	public const int arrow_Fire = 50500; 

	public const int SpSummonFish = 9008;

	public const int SpSummonShubKid = 9010; 

	public const int SpSummonShadow = 9050;

	public const int SpMeteor = 9150;

@@ -476,39 +480,37 @@ public class SPELL

cs

	public const int bolt_Fire = 50300;

	public const int hand_Fire = 50400; 

	public const int SpSummonTako = 9009;

	public const int sword_Void = 51016;

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

SourceChara

@@ -121,7 +121,7 @@ public override string GetName()

cs
			{
				text = text.TrimStart(' ');
			}
			return text; 
			return text.Replace("  ", " "); 
		}
	}

SourceElement

@@ -387,22 +387,25 @@ public override void OnAfterImportData()

cs

	public void AddRow(Row ele, int id, string idOrg)
	{
		Row row = EClass.sources.elements.alias[idOrg]; 
		System.Reflection.FieldInfo[] fields = row.GetType().GetFields(); 
		Row row2 = new Row(); 
		System.Reflection.FieldInfo[] array = fields; 
		foreach (System.Reflection.FieldInfo fieldInfo in array) 
		if (!map.ContainsKey(id)) 
		{
			row2.SetField(fieldInfo.Name, row.GetField<object>(fieldInfo.Name)); 
			Row row = EClass.sources.elements.alias[idOrg]; 
			System.Reflection.FieldInfo[] fields = row.GetType().GetFields(); 
			Row row2 = new Row(); 
			System.Reflection.FieldInfo[] array = fields; 
			foreach (System.Reflection.FieldInfo fieldInfo in array) 
			{ 
				row2.SetField(fieldInfo.Name, row.GetField<object>(fieldInfo.Name)); 
			} 
			row2.id = id; 
			row2.idMold = row.id; 
			row2.alias = row.alias + ele.alias.Remove(0, 3); 
			row2.aliasRef = ele.alias; 
			row2.aliasParent = ele.aliasParent; 
			row2.chance = row.chance * ele.chance / 100; 
			row2.LV = row.LV; 
			row2.OnImportData(EClass.sources.elements); 
			rows.Add(row2); 
		}
		row2.id = id; 
		row2.idMold = row.id; 
		row2.alias = row.alias + ele.alias.Remove(0, 3); 
		row2.aliasRef = ele.alias; 
		row2.aliasParent = ele.aliasParent; 
		row2.chance = row.chance * ele.chance / 100; 
		row2.LV = row.LV; 
		row2.OnImportData(EClass.sources.elements); 
		rows.Add(row2); 
	}
}

TaskCullLife

@@ -1,5 +1,6 @@

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

public class TaskCullLife : Task
{

@@ -53,7 +54,7 @@ public override IEnumerable<Status> Run()

cs
			owner.PlaySound("shear");
			Msg.Say("cull_life", EClass.pc, target);
			target.Die();
			Thing t = ThingGen.Create("ecopo").SetNum(EClass.rndHalf(target.LV / 10 + 6)); 
			Thing t = ThingGen.Create("ecopo").SetNum(EClass.rndHalf((int)Mathf.Sqrt(target.LV) + 5)); 
			EClass.pc.Pick(t);
			yield return KeepRunning();
		}

TraitMerchantEcopo

@@ -3,4 +3,6 @@ public class TraitMerchantEcopo : TraitMerchant

cs
	public override ShopType ShopType => ShopType.Ecopo;

	public override CurrencyType CurrencyType => CurrencyType.Ecopo;

	public override int CostRerollShop => 2; 
}

WidgetCodex

@@ -22,6 +22,8 @@ public enum SearchType

cs

	public UIButton buttonClear;

	public UIButton buttonRefresh; 

	public Transform transResult;

	private int count;

@@ -43,6 +45,7 @@ public override void OnActivate()

cs
	public void Clear()
	{
		field.text = "";
		field.Select(); 
	}

	public virtual void Search(string s)

WidgetSearch

@@ -32,6 +32,8 @@ public class Word

cs

	public UIList listWords;

	public Zone lastZone; 

	public Extra extra => base.config.extra as Extra;

	public override SearchType type => SearchType.Search;

@@ -80,13 +82,23 @@ public override bool CheckClose()

cs
		if (EMono.scene.actionMode.IsFuncPressed(CoreConfig.GameFunc.PropertySearch))
		{
			EMono.ui.widgets.DeactivateWidget(this);
			return; 
		}
		else
		base.Update(); 
		if (lastZone != EMono._zone) 
		{
			base.Update(); 
			lastSearch = ""; 
			Search(field.text); 
		}
	}

	public void RefreshSearch() 
	{ 
		SE.Tab(); 
		lastSearch = ""; 
		Search(field.text); 
	} 

	public override void Search(string s)
	{
		if (!s.IsEmpty())

@@ -95,11 +107,13 @@ public override void Search(string s)

cs
	}
	s = s.ToLower();
	buttonClear.SetActive(field.text != "");
	buttonRefresh.SetActive(field.text != ""); 
	if (s == lastSearch || s.Length == 0)
	{
		return;
	}
	lastSearch = s;
	lastZone = EMono._zone; 
	bool encSearch = s.Length >= 2 && (s[0] == '@' || s[0] == '@');
	if (encSearch)
	{

@@ -275,7 +289,6 @@ public override void RefreshList()

cs
					selected = null;
					EMono.pc.SetAIImmediate(new AI_Goto(rootCard.pos.Copy(), 0));
					ActionMode.Adv.SetTurbo(3);
					Close(); 
				}
			}
			else