Skip to content

EA 23.83 Patch 3

January 31, 2025

40 files modified.

Important Changes

None.

AI_Shear

@@ -17,7 +17,11 @@ public override string GetText(string str = "")

cs

	public override bool IsValidTC(Card c)
	{
		return c?.CanBeSheared() ?? false; 
		if (c != null && c.IsAliveInCurrentZone) 
		{ 
			return c.CanBeSheared(); 
		} 
		return false; 
	}

	public override bool Perform()

@@ -62,12 +66,15 @@ public override IEnumerable<Status> Run()

cs
		},
		onProgressComplete = delegate
		{
			Thing fur = GetFur(target.Chara); 
			owner.Say("shear_end", owner, target, fur.Name); 
			owner.Pick(fur, msg: false); 
			owner.elements.ModExp(237, 50 * furLv); 
			owner.stamina.Mod(-1); 
			target.Chara.ModAffinity(owner, 1); 
			if (target.IsAliveInCurrentZone) 
			{ 
				Thing fur = GetFur(target.Chara); 
				owner.Say("shear_end", owner, target, fur.Name); 
				owner.Pick(fur, msg: false); 
				owner.elements.ModExp(237, 50 * furLv); 
				owner.stamina.Mod(-1); 
				target.Chara.ModAffinity(owner, 1); 
			} 
		}
	}.SetDuration((6 + furLv * 6) * 100 / (100 + owner.Tool.material.hardness * 2), 3);
	yield return Do(seq);

ActEffect

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

cs
		{
			return;
		}
		Thing thing3 = ThingGen.Create("mine"); 
		thing3.c_idRefCard = "dog_mine"; 
		Thing thing = ThingGen.Create("mine"); 
		thing.c_idRefCard = "dog_mine"; 
		Zone.ignoreSpawnAnime = true;
		EClass._zone.AddCard(thing3, CC.pos).Install(); 
		EClass._zone.AddCard(thing, CC.pos).Install(); 
		break;
	}
	case EffectId.MagicMap:

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

cs
		TC.PlaySound("curse3");
		TC.PlayEffect("curse");
		TC.Say("forgetItems", TC);
		int num4 = power / 50 + 1 + EClass.rnd(3); 
		int num5 = power / 50 + 1 + EClass.rnd(3); 
		List<Thing> source = TC.things.List((Thing t) => t.c_IDTState == 0);
		for (int j = 0; j < num4; j++) 
		for (int j = 0; j < num5; j++) 
		{
			source.RandomItem().c_IDTState = 5;
		}

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

cs
	case EffectId.EnchantArmorGreat:
	{
		bool armor = id == EffectId.EnchantArmor || id == EffectId.EnchantArmorGreat;
		bool flag2 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat; 
		bool flag3 = id == EffectId.EnchantWeaponGreat || id == EffectId.EnchantArmorGreat; 
		if (!tc.isThing)
		{
			LayerDragGrid.CreateEnchant(CC, armor, flag2, state); 
			LayerDragGrid.CreateEnchant(CC, armor, flag3, state); 
			return;
		}
		cc.PlaySound("identify");

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

cs
			tc.ModEncLv(-1);
			break;
		}
		int num = (flag2 ? 4 : 2) + (blessed ? 1 : 0); 
		if (tc.encLV >= num) 
		int num3 = (flag3 ? 4 : 2) + (blessed ? 1 : 0); 
		if (tc.encLV >= num3) 
		{
			cc.Say("enc_resist", tc);
			break;

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

cs
			LayerDragGrid.CreateUncurse(CC, state);
			return;
		}
		Thing thing = tc.Thing; 
		if (thing.blessedState == BlessedState.Cursed) 
		Thing thing3 = tc.Thing; 
		if (thing3.blessedState == BlessedState.Cursed) 
		{
			thing.SetBlessedState(BlessedState.Normal); 
			thing3.SetBlessedState(BlessedState.Normal); 
		}
		else if (thing.blessedState == BlessedState.Doomed) 
		else if (thing3.blessedState == BlessedState.Doomed) 
		{
			thing.SetBlessedState(BlessedState.Normal); 
			thing3.SetBlessedState(BlessedState.Normal); 
		}
		thing.GetRootCard()?.TryStack(thing); 
		LayerInventory.SetDirty(thing); 
		thing3.GetRootCard()?.TryStack(thing3); 
		LayerInventory.SetDirty(thing3); 
		break;
	}
	case EffectId.Lighten:

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

cs
		}
		cc.PlaySound("offering");
		cc.PlayEffect("buff");
		int num5 = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight); 
		int num4 = (tc.isWeightChanged ? tc.c_weight : tc.Thing.source.weight); 
		tc.isWeightChanged = true;
		Element orCreateElement = tc.elements.GetOrCreateElement(64);
		Element orCreateElement2 = tc.elements.GetOrCreateElement(65);

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

cs
		bool flag4 = tc.IsEquipmentOrRanged || tc.IsThrownWeapon || tc.IsAmmo;
		if (flag)
		{
			num5 = (int)(0.01f * (float)num5 * (float)power * 0.75f + 500f); 
			if (num5 < 0 || num5 > 10000000) 
			num4 = (int)(0.01f * (float)num4 * (float)power * 0.75f + 500f); 
			if (num4 < 0 || num4 > 10000000) 
			{
				num5 = 10000000; 
				num4 = 10000000; 
				flag4 = false;
			}
			if (flag4)
			{
				if (tc.IsWeapon || tc.IsThrownWeapon) 
				if (tc.IsWeapon || tc.IsThrownWeapon || tc.IsAmmo) 
				{
					tc.elements.ModBase(67, Mathf.Clamp(orCreateElement3.vBase * power / 1000, 1, 5));
					tc.elements.ModBase(66, -Mathf.Clamp(orCreateElement4.vBase * power / 1000, 1, 5));

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

cs
		}
		else
		{
			num5 = num5 * (100 - power / 10) / 100; 
			num4 = num4 * (100 - power / 10) / 100; 
			if (blessed)
			{
				power /= 4;

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

cs
			}
			cc.Say("lighten", cc, tc);
		}
		tc.c_weight = num5; 
		tc.c_weight = num4; 
		tc.SetDirtyWeight();
		if (tc.parent == null)
		{

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

cs
		string name = tc.Name;
		if (row == null)
		{
			bool num2 = id == EffectId.ChangeMaterialGreater; 
			bool flag3 = id == EffectId.ChangeMaterialLesser; 
			bool num = id == EffectId.ChangeMaterialGreater; 
			bool flag2 = id == EffectId.ChangeMaterialLesser; 
			string text2 = tc.Thing.source.tierGroup;
			Dictionary<string, SourceMaterial.TierList> tierMap = SourceMaterial.tierMap;
			int num3 = 1; 
			int num2 = 1; 
			if (flag)
			{
				num3 -= 2; 
				num2 -= 2; 
			}
			if (blessed)
			{
				num3++; 
				num2++; 
			}
			if (num2) 
			if (num) 
			{
				num3++; 
				num2++; 
			}
			if (flag3) 
			if (flag2) 
			{
				num3 -= 2; 
				num2 -= 2; 
			}
			num3 = Mathf.Clamp(num3 + EClass.rnd(2), 0, 4); 
			num2 = Mathf.Clamp(num2 + EClass.rnd(2), 0, 4); 
			if (EClass.rnd(10) == 0)
			{
				text2 = ((text2 == "metal") ? "leather" : "metal");

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

cs
			SourceMaterial.TierList tierList = (text2.IsEmpty() ? tierMap.RandomItem() : tierMap[text2]);
			for (int i = 0; i < 1000; i++)
			{
				row = tierList.tiers[num3].Select(); 
				row = tierList.tiers[num2].Select(); 
				if (row != tc.material)
				{
					break;

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

cs
		{
			break;
		}
		int hex2 = 0; 
		int hex = 0; 
		foreach (Condition condition4 in TC.conditions)
		{
			if (condition4.Type == ConditionType.Debuff)
			{
				hex2++; 
				hex++; 
			}
		}
		if (hex2 == 0) 
		if (hex == 0) 
		{
			CC.SayNothingHappans();
			break;

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

cs
				{
					break;
				}
				int dmg2 = Dice.Create("SpShutterHex", power * hex2, CC, actRef.act).Roll(); 
				int dmg2 = Dice.Create("SpShutterHex", power * hex, CC, actRef.act).Roll(); 
				item3.DamageHP(dmg2, 919, power, AttackSource.None, CC);
			}
		});

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

cs
	case EffectId.KizuamiTrick:
	{
		EClass.game.religions.Trickery.Talk("ability");
		bool hex = CC.IsHostile(TC); 
		List<SourceStat.Row> list4 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex ? "Debuff" : "Buff")).ToList(); 
		bool hex2 = CC.IsHostile(TC); 
		List<SourceStat.Row> list3 = EClass.sources.stats.rows.Where((SourceStat.Row con) => con.tag.Contains("random") && con.group == (hex2 ? "Debuff" : "Buff")).ToList(); 
		int power2 = power;
		for (int k = 0; k < 4 + EClass.rnd(2); k++)
		{
			SourceStat.Row row2 = list4.RandomItem(); 
			list4.Remove(row2); 
			Proc(hex ? EffectId.Debuff : EffectId.Buff, CC, TC, power2, new ActRef
			SourceStat.Row row2 = list3.RandomItem(); 
			list3.Remove(row2); 
			Proc(hex2 ? EffectId.Debuff : EffectId.Buff, CC, TC, power2, new ActRef
			{
				n1 = row2.alias
			});

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

cs
		bool isPowerful = TC.IsPowerful;
		string n = actRef.n1;
		int a2 = power;
		int num6 = TC.WIL * (isPowerful ? 20 : 5); 
		int num7 = TC.WIL * (isPowerful ? 20 : 5); 
		ConHolyVeil condition = TC.GetCondition<ConHolyVeil>();
		if (condition != null)
		{
			num6 += condition.power * 5; 
			num7 += condition.power * 5; 
		}
		if (EClass.rnd(a2) < num6 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		if (EClass.rnd(a2) < num7 / EClass.sources.stats.alias[n].hexPower && EClass.rnd(10) != 0) 
		{
			TC.Say("debuff_resist", TC);
			CC.DoHostileAction(TC);

@@ -1586,9 +1586,12 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
	case EffectId.Ally:
	{
		Msg.Say("gainAlly");
		Chara chara = CharaGen.CreateFromFilter("chara", EClass.pc.LV); 
		Chara chara = CharaGen.CreateFromFilter("chara", cc.LV); 
		EClass._zone.AddCard(chara, cc.pos.GetNearestPoint(allowBlock: false, allowChara: false));
		chara.MakeAlly(msg: false); 
		if (cc.IsPCFactionOrMinion) 
		{ 
			chara.MakeAlly(msg: false); 
		} 
		chara.PlaySound("identify");
		chara.PlayEffect("teleport");
		break;

@@ -1693,16 +1696,16 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		break;
	case EffectId.Revive:
	{
		List<KeyValuePair<int, Chara>> list3 = 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>> list4 = 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 && list3.Count == 0) 
			if (TC.IsPC && list4.Count == 0) 
			{
				list3 = 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(); 
				list4 = 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 (list3.Count > 0) 
			if (list4.Count > 0) 
			{
				list3.RandomItem().Value.Chara.GetRevived(); 
				list4.RandomItem().Value.Chara.GetRevived(); 
				break;
			}
		}

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

cs
	{
		bool flag6 = id == EffectId.EnhanceBody || id == EffectId.EnhanceBodyGreat;
		bool mind = id == EffectId.EnhanceMind || id == EffectId.EnhanceMindGreat;
		int num7 = ((id == EffectId.EnhanceBody || id == EffectId.EnhanceMind) ? 1 : (4 + EClass.rnd(4))); 
		int num6 = ((id == EffectId.EnhanceBody || id == EffectId.EnhanceMind) ? 1 : (4 + EClass.rnd(4))); 
		TC.Say(flag6 ? "enhanceBody" : "enhanceMind", TC);
		TC.PlayEffect("buff");
		TC.PlaySound("buff");
		for (int l = 0; l < num7; l++) 
		for (int l = 0; l < num6; l++) 
		{
			TC.EnhanceTempElements(power, flag6, mind);
		}

ActRestrain

@@ -42,7 +42,7 @@ public override bool Perform()

cs
	}
	if (Act.TC.IsPCFaction && EClass._zone.IsPCFaction)
	{
		Act.CC.SetAI(new AI_Torture
		Act.TC.Chara?.SetAI(new AI_Torture
		{
			shackle = shackle
		});

Card

@@ -5573,7 +5573,7 @@ public void CalculateFOV()

cs
		{
			power = EClass.scene.profile.global.playerLightPowerLimit;
		}
		power *= EClass.scene.profile.light.playerLightMod; 
		power *= EClass.scene.profile.light.playerLightMod + (float)EClass.player.customLightMod * EClass.scene.profile.light.playerLightCustomMod; 
		EClass.player.lightRadius = radius;
		EClass.player.lightPower = power;
	}

CardRow

@@ -128,9 +128,10 @@ public string GetName(Card c, bool full = false)

cs
	{
		return text2;
	}
	int type = ((quality == 3) ? 3 : ((quality < 2) ? 1 : 2)); 
	if (full && !text2.IsEmpty())
	{
		text = text2.ToTitleCase(wholeText: true) + Lang.space + text.Bracket(2); 
		text = text2.ToTitleCase(wholeText: true) + Lang.space + text.Bracket(type); 
	}
	return text;
}

Chara

@@ -2468,7 +2468,7 @@ public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
			}
			if (newPoint.cell.CanSuffocate())
			{
				AddCondition<ConSuffocation>((EClass.pc.Evalue(200) > 0) ? (2000 / (100 + Evalue(200) * 10)) : 30); 
				AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30); 
				int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
				if (num4 >= 2)
				{

@@ -2860,11 +2860,16 @@ public void DestroyPath(Point pos)

cs

	public void TryPush(Point point)
	{
		point.Charas.ForeachReverse(delegate(Chara c) 
		List<Chara> list = point.ListCharas(); 
		if (list.Count == 0) 
		{ 
			return; 
		} 
		list.Copy().ForeachReverse(delegate(Chara c) 
		{
			if (!c.ai.IsMoveAI && !c.IsPC && c.trait.CanBePushed && c != this && !c.noMove && (!EClass._zone.IsRegion || c.IsPCFactionOrMinion))
			{
				List<Point> list = new List<Point>(); 
				List<Point> list2 = new List<Point>(); 
				for (int i = point.x - 1; i <= point.x + 1; i++)
				{
					for (int j = point.z - 1; j <= point.z + 1; j++)

@@ -2874,24 +2879,24 @@ public void TryPush(Point point)

cs
						Point point2 = new Point(i, j);
						if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
						{
							list.Add(point2); 
							list2.Add(point2); 
						}
					}
				}
			}
			if (list.Count > 0) 
			if (list2.Count > 0) 
			{
				if (list.Count > 1) 
				if (list2.Count > 1) 
				{
					list.ForeachReverse(delegate(Point p) 
					list2.ForeachReverse(delegate(Point p) 
					{
						if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
						{
							list.Remove(p); 
							list2.Remove(p); 
						}
					});
				}
				Point newPoint = list.RandomItem(); 
				Point newPoint = list2.RandomItem(); 
				if (IsPC)
				{
					Say("displace", this, c);

@@ -3744,7 +3749,7 @@ public override void Tick()

cs
	}
	if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate())
	{
		AddCondition<ConSuffocation>(800 / (100 + Evalue(200) * 10)); 
		AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10)); 
	}
	CellEffect e;
	if (cell.effect != null)

GoalCombat

@@ -314,6 +314,7 @@ public override IEnumerable<Status> Run()

cs
		}
		else if (owner.FindNearestNewEnemy())
		{
			yield return Status.Running; 
			continue;
		}
		yield return Status.Running;

InvOwner

@@ -1393,6 +1393,19 @@ public ListInteraction ListInteractions(ButtonGrid b, bool context)

cs
		}
	}
	ListInteractions(listInteraction, t, trait, b, context);
	if (context && trait is TraitLightSource) 
	{ 
		listInteraction.Add("customBrightness", 300, delegate
		{ 
			UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction(); 
			uIContextMenu.AddSlider("brightness", (float a) => a.ToString() ?? "", EClass.player.customLightMod, delegate(float b) 
			{ 
				EClass.player.customLightMod = (int)b; 
				EClass.pc.RecalculateFOV(); 
			}, 1f, 6f, isInt: true, hideOther: false); 
			uIContextMenu.Show(); 
		}); 
	} 
	if (AllowHold(t) && !t.isEquipped && !HasTrader)
	{
		Interaction item = listInteraction.Add((EClass.pc.held == t) ? "actPick" : "actHold", 60, delegate

Player

@@ -761,6 +761,9 @@ public void OnLeaveZone()

cs
	[JsonProperty]
	public int luckycoin;

	[JsonProperty] 
	public int customLightMod = 3; 

	[JsonProperty]
	public float angle;

SceneLightProfile

@@ -14,6 +14,8 @@ public class SceneLightProfile : ScriptableObject

cs

	public float playerLightMod = 1f;

	public float playerLightCustomMod; 

	public AnimationCurve lightLimit;

	public AnimationCurve lightModCurve;

SourceArea

@@ -21,10 +21,13 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textAssign_L;

		public override bool UseAlias => false;

SourceBacker

@@ -38,8 +38,10 @@ public class Row : BaseRow

cs

		public string original;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string text_L;

		public override bool UseAlias => false;

SourceBlock

@@ -26,8 +26,10 @@ public class Row : TileRow

cs
		[NonSerialized]
		public SourceFloor.Row sourceAutoFloor;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => true;

SourceCategory

@@ -56,6 +56,7 @@ public class Row : BaseRow

cs
		[NonSerialized]
		public List<Row> children;

		[NonSerialized] 
		public string name_L;

		public override bool UseAlias => false;

SourceChara

@@ -59,10 +59,13 @@ public class Row : CardRow

cs
		[NonSerialized]
		public SourceRace.Row _race_row;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string aka_L;

		public override bool UseAlias => false;

SourceCharaText

@@ -27,14 +27,19 @@ public class Row : BaseRow

cs

		public string kill;

		[NonSerialized] 
		public string calm_L;

		[NonSerialized] 
		public string fov_L;

		[NonSerialized] 
		public string aggro_L;

		[NonSerialized] 
		public string dead_L;

		[NonSerialized] 
		public string kill_L;

		public override bool UseAlias => false;

SourceCollectible

@@ -27,8 +27,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceElement

@@ -135,24 +135,34 @@ public class Row : BaseRow

cs

		public int idMold;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string altname_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textPhase_L;

		[NonSerialized] 
		public string textExtra_L;

		[NonSerialized] 
		public string textInc_L;

		[NonSerialized] 
		public string textDec_L;

		[NonSerialized] 
		public string levelBonus_L;

		[NonSerialized] 
		public string[] textAlt_L;

		[NonSerialized] 
		public string[] adjective_L;

		public override bool UseAlias => true;

SourceFaction

@@ -29,14 +29,19 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textType_L;

		[NonSerialized] 
		public string textBenefit_L;

		[NonSerialized] 
		public string textPet_L;

		public override bool UseAlias => false;

SourceFloor

@@ -39,8 +39,10 @@ public class Row : TileRow

cs
		[NonSerialized]
		public BiomeProfile biome;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => true;

SourceHobby

@@ -46,8 +46,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => true;

SourceHomeResource

@@ -21,8 +21,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceJob

@@ -46,8 +46,10 @@ public class Row : BaseRow

cs

		public Dictionary<int, int> elementMap;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceKeyItem

@@ -17,8 +17,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => true;

SourceLiquid

@@ -1,9 +1,13 @@

cs
using System; 

public class SourceLiquid
{
	public class Row
	{
		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;
	}
}

SourceMaterial

@@ -87,10 +87,13 @@ public class Row : BaseRow

cs

		public static string[] IDAxe = new string[1] { "wood" };

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string[] altName_L;

		public override bool UseAlias => true;

SourceObj

@@ -32,8 +32,10 @@ public class Row : TileRow

cs

		public ObjValType objValType;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => true;

SourcePerson

@@ -35,10 +35,13 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string aka_L;

		public override bool UseAlias => false;

SourceQuest

@@ -39,12 +39,16 @@ public class Row : BaseRow

cs

		public string talkComplete;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string talkProgress_L;

		[NonSerialized] 
		public string talkComplete_L;

		public override bool UseAlias => false;

SourceRace

@@ -98,8 +98,10 @@ public class Row : BaseRow

cs

		public Dictionary<int, int> elementMap;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceRecipe

@@ -27,8 +27,10 @@ public class Row : BaseRow

cs

		public string[] tag;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceReligion

@@ -51,14 +51,19 @@ public class Row : BaseRow

cs

		public string textPet;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textType_L;

		[NonSerialized] 
		public string textBenefit_L;

		[NonSerialized] 
		public string[] name2_L;

		public override bool UseAlias => false;

SourceResearch

@@ -31,8 +31,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceStat

@@ -70,16 +70,22 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textPhase_L;

		[NonSerialized] 
		public string textPhase2_L;

		[NonSerialized] 
		public string textEnd_L;

		[NonSerialized] 
		public string[] strPhase_L;

		public override bool UseAlias => true;

SourceSupplyType

@@ -1,7 +1,10 @@

cs
using System; 

public class SourceSupplyType
{
	public class Row
	{
		[NonSerialized] 
		public string name_L;
	}
}

SourceTactics

@@ -41,8 +41,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

SourceThing

@@ -52,16 +52,22 @@ public class Row : CardRow

cs

		public bool ignoreAltFix;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string unit_L;

		[NonSerialized] 
		public string unknown_L;

		[NonSerialized] 
		public string[] name2_L;

		[NonSerialized] 
		public string[] roomName_L;

		public override bool UseAlias => false;

SourceZone

@@ -53,10 +53,13 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		[NonSerialized] 
		public string textFlavor_L;

		public override bool UseAlias => false;

SourceZoneAffix

@@ -21,8 +21,10 @@ public class Row : BaseRow

cs

		public string detail;

		[NonSerialized] 
		public string name_L;

		[NonSerialized] 
		public string detail_L;

		public override bool UseAlias => false;

WindowChara

@@ -378,7 +378,7 @@ public void RefreshProfile()

cs
	textSAN.text = chara.SAN.value.ToString() ?? "";
	textFame.text = (chara.IsPC ? (EClass.player.fame.ToString() ?? "") : "???");
	textMoney.text = Lang._currency(chara.GetCurrency(), showUnit: true);
	textDeposit.text = (chara.IsPC ? Lang._currency(EClass.game.cards.container_deposit.GetCurrency(), showUnit: true) : "???"); 
	textDeposit.text = Lang._currency(chara.IsPC ? EClass.game.cards.container_deposit.GetCurrency() : chara.c_allowance, showUnit: true); 
	string text = "deepestLv2".lang((chara.IsPCFaction ? EClass.player.stats.deepest : chara.LV).ToString() ?? "");
	if (chara.IsPCFaction && EClass.player.CountKeyItem("license_void") > 0)
	{