Skip to content

EA 23.293 Nightly Patch 1

April 9, 2026

10 files modified.

Important Changes

None.

AI_Fuck

public void Finish()

cs
			EClass.player.forceTalk = true;
			chara2.Talk("seduced");
		}
		else if (variation != Variation.NTR && variation != Variation.Bloodsuck && variation != Variation.Slime && chara != EClass.pc) 
		else if (variation != Variation.NTR && variation != Variation.Bloodsuck && variation != Variation.Slime && variation != Variation.MotherMilk && chara != EClass.pc) 
		{
			if (IsSacredLovemaking)
			{

public void Finish()

cs
			if (variation == Variation.MotherMilk)
			{
				EClass.player.stats.mama++;
				if (EClass.player.stats.mama >= 20 && !EClass.pc.HasElement(1291)) 
				if (EClass.player.stats.mama >= 20 && !EClass.pc.HasElement(1291) && EClass.pc.faith != EClass.game.religions.MoonShadow) 
				{
					EClass.pc.SetFeat(1291, 1, msg: true);
				}

ActEffect

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

cs
		break;
	case EffectId.StripBlessing:
	{
		List<Condition> list6 = new List<Condition>(); 
		List<Condition> list5 = new List<Condition>(); 
		foreach (Condition condition4 in TC.conditions)
		{
			if (GetBlessingDifficulty(condition4) > 0 && EClass.rnd(GetBlessingDifficulty(condition4)) == 0)
			{
				list6.Add(condition4); 
				list5.Add(condition4); 
			}
		}
		if (list6.Count == 0) 
		if (list5.Count == 0) 
		{
			CC.SayNothingHappans();
			break;

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

cs
		TC.pos.PlayEffect("holyveil");
		TC.pos.PlaySound("holyveil");
		TC.Say("unpolluted", TC);
		list6.Shuffle(); 
		list5.Shuffle(); 
		{
			foreach (Condition item5 in list6) 
			foreach (Condition item5 in list5) 
			{
				item5.Kill();
				if (CC.IsHostile(TC))

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

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

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

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

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

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

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

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

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

cs
		else
		{
			Func<Thing, bool> func = (Thing t) => true;
			if (flag10) 
			if (flag11) 
			{
				func = (Thing t) => t.IsFood;
			}

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

cs
		{
			break;
		}
		List<Thing> list5 = TC.things.List(delegate(Thing t) 
		List<Thing> list6 = TC.things.List(delegate(Thing t) 
		{
			if (!t.isEquipped || t.blessedState == BlessedState.Doomed || t.IsToolbelt)
			{

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

cs
			}
			return (t.blessedState < BlessedState.Blessed || EClass.rnd(10) == 0) ? true : false;
		});
		if (list5.Count == 0) 
		if (list6.Count == 0) 
		{
			CC.SayNothingHappans();
			break;
		}
		Thing thing5 = list5.RandomItem(); 
		Thing thing5 = list6.RandomItem(); 
		TC.Say("curse_hit", TC, thing5);
		thing5.SetBlessedState((thing5.blessedState == BlessedState.Cursed) ? BlessedState.Doomed : BlessedState.Cursed);
		LayerInventory.SetDirty(thing5);

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

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

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

cs
		tc.bio.SetGender(gender2);
		tc.Say("transGender", tc, Gender.Name(tc.bio.gender));
		tc.Talk("tail");
		int age2 = tc.bio.GetAge(tc.Chara); 
		if (blessed && age2 > 1) 
		int age3 = tc.bio.GetAge(tc.Chara); 
		if (blessed && age3 > 1) 
		{
			tc.Say("ageDown", tc);
			tc.bio.SetAge(tc.Chara, age2 - 1); 
			tc.bio.SetAge(tc.Chara, age3 - 1); 
		}
		else if (flag)
		{
			tc.Say("ageUp", tc);
			tc.bio.SetAge(tc.Chara, age2 + 1); 
			tc.bio.SetAge(tc.Chara, age3 + 1); 
		}
		break;
	}

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

cs
	{
		tc.PlaySound("mutation");
		tc.PlayEffect("mutation");
		int num10 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num10 == 0) 
		int num12 = ((actRef.refThing != null) ? actRef.refThing.GetInt(118) : actRef.refVal); 
		if (num12 == 0) 
		{
			num10 = tc.GetInt(118); 
			if (num10 == 0) 
			num12 = tc.GetInt(118); 
			if (num12 == 0) 
			{
				num10 = EClass.game.seed + tc.uid; 
				num12 = EClass.game.seed + tc.uid; 
			}
			num10++; 
			num12++; 
		}
		tc.Say("transBlood", tc);
		tc.Talk("tail");
		tc.c_bloodData = null;
		tc.SetInt(118, num10); 
		tc.SetInt(118, num12); 
		break;
	}
	case EffectId.Youth:

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

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

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

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

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

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

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

cs
	{
		bool flag12 = id == EffectId.DamageBody || id == EffectId.DamageBodyGreat;
		bool mind2 = id == EffectId.DamageMind || id == EffectId.DamageMindGreat;
		int num15 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		int num14 = ((id == EffectId.DamageBody || id == EffectId.DamageMind) ? 1 : (4 + EClass.rnd(4))); 
		if (id == EffectId.Weaken)
		{
			flag12 = EClass.rnd(2) == 0;
			mind2 = !flag12;
			num15 = 1; 
			num14 = 1; 
		}
		else
		{

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

cs
			TC.PlaySound("debuff");
		}
		TC.Say(flag12 ? "damageBody" : "damageMind", TC);
		for (int m = 0; m < num15; m++) 
		for (int m = 0; m < num14; m++) 
		{
			TC.DamageTempElements(power, flag12, mind2, id != EffectId.Weaken);
		}

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

cs
	case EffectId.RestoreBody:
	case EffectId.RestoreMind:
	{
		bool flag11 = id == EffectId.RestoreBody; 
		bool flag10 = id == EffectId.RestoreBody; 
		if (flag)
		{
			Redirect(flag11 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef)); 
			Redirect(flag10 ? EffectId.DamageBodyGreat : EffectId.DamageMindGreat, BlessedState.Normal, default(ActRef)); 
			break;
		}
		TC.Say(flag11 ? "restoreBody" : "restoreMind", TC); 
		TC.Say(flag10 ? "restoreBody" : "restoreMind", TC); 
		TC.PlaySound("heal");
		TC.PlayEffect("heal");
		TC.CureHost(flag11 ? CureType.CureBody : CureType.CureMind, power, state); 
		TC.CureHost(flag10 ? CureType.CureBody : CureType.CureMind, power, state); 
		if (blessed)
		{
			Redirect(flag11 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef)); 
			Redirect(flag10 ? EffectId.EnhanceBodyGreat : EffectId.EnhanceMindGreat, BlessedState.Normal, default(ActRef)); 
		}
		break;
	}

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

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

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

cs
			break;
		}
		Chara chara = CharaGen.Create("baby");
		if (!TC.Aka.IsEmpty()) 
		{ 
			chara.c_altName = TC.c_altName ?? TC.source.GetName(TC); 
		} 
		chara.c_altName = TC.c_altName ?? TC.source.GetName(TC); 
		TC.AddCondition(Condition.Create(power, delegate(ConTransmuteHuman con)
		{
			con.chara = chara;

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

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

CINT

public class CINT

cs

	public const int isPartyFood = 128;

	public const int isAmbushWarned = 129; 
	public const int dateDeathLock = 130;

	public const int fixedValue = 131;

CardActor

public virtual void OnRender(RenderParam p)

cs
			num2 = 2;
		}
		num2 = ((floatV == 1) ? ((!(floatY < 0f)) ? ((floatY < 3f) ? 1 : 2) : 0) : ((!(floatY < 2f)) ? ((!(floatY < 5f)) ? 2 : 3) : 0));
		srAnime.sr.sprite = srAnime.data.GetSprites().TryGet(num2); 
		srAnime.sr.sprite = srAnime.data.GetSprites().TryGet(num2, returnNull: true); 
	}
	base.transform.position = tempV;
	base.transform.localScale = tempV2;

public virtual void OnRender(RenderParam p)

cs
			{
				spriteIndex = 0;
			}
			sr.sprite = spriteData.GetSprites()[spriteIndex]; 
			sr.sprite = spriteData.GetSprites().TryGet(spriteIndex, returnNull: true); 
			if ((bool)sr.sprite) 
			{ 
				mpb.SetTexture("_MainTex", sr.sprite.texture); 
			} 
		}
	}

Chara

public override Sprite GetSprite(int dir = 0)

cs
			pCC.Build();
			return pCC.variation.idle[0, 0];
		}
		bool snow = EClass.core.IsGameStarted && EClass._zone.IsSnowCovered; 
		int skin = 0; 
		if (spriteReplacer?.data != null)
		{
			return spriteReplacer.data.GetSprite(); 
			Sprite sprite = spriteReplacer.GetSprite(dir, skin, snow); 
			if ((bool)sprite) 
			{ 
				return sprite; 
			} 
		}
		int skin = 0; 
		if (sourceCard.tiles.Length > 1)
		{
			skin = ((base.idSkin == 0 && !source.staticSkin) ? (base.uid % sourceCard.tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)) : base.idSkin);
		}
		return sourceCard.GetSprite(0, skin, EClass.core.IsGameStarted && EClass._zone.IsSnowCovered); 
		return sourceCard.GetSprite(dir, skin, snow); 
	}

	public void SetTempHand(int right = 0, int left = 0)

DramaCustomSequence

public void Build(Chara c)

cs
			bool num2;
			if (condition == null)
			{
				if (EClass.pc.HasElement(1232)) 
				if (EClass.pc.HasElement(1232) || EClass.pc.faith == EClass.game.religions.MoonShadow) 
				{
					goto IL_093e; 
					goto IL_0959; 
				}
				num2 = EClass.pc.HasElement(1291);
			}

public void Build(Chara c)

cs
			}
			if (num2)
			{
				goto IL_093e; 
				goto IL_0959; 
			}
			goto IL_094f; 
			goto IL_096a; 
		}
		if (c.isDrunk || c.HasElement(1275) || EClass.debug.enable)
		{
			Choice2(flag2 ? "daBird" : "daTail", "_tail");
		}
	}
	goto IL_0d68; 
	IL_0d68: 
	goto IL_0d83; 
	IL_09a9: 
	Choice2("daBaby", "_baby"); 
	goto IL_09ba; 
	IL_0959: 
	Choice2("daMama", "_mama"); 
	goto IL_096a; 
	IL_09ba: 
	if (c.trait.CanRevive) 
	{ 
		Choice2("daRevive", "_revive").DisableSound(); 
	} 
	if (!c.trait.IDTrainer.IsEmpty() && !EClass._zone.IsUserZone && (Guild.GetCurrentGuild() == null || Guild.GetCurrentGuild().relation.IsMember())) 
	{ 
		Choice2("daTrain", "_train").DisableSound(); 
	} 
	if (c.trait.CanWhore) 
	{ 
		Choice2(flag2 ? "daBirdBuy" : "daTailBuy", "_whore"); 
	} 
	if (c.trait.CanHeal) 
	{ 
		Choice2("daHeal", "_heal"); 
	} 
	if (c.trait.CanServeFood) 
	{ 
		Choice2("daFood", "_food"); 
	} 
	if (c.trait is TraitInformer) 
	{ 
		Choice2("daSellFame", "_sellFame"); 
	} 
	if (EClass._zone.AllowInvest) 
	{ 
		if (c.trait.CanInvestTown && Guild.GetCurrentGuild() == null) 
		{ 
			Choice2("daInvest", "_investZone"); 
		} 
		if (c.trait.CanInvest) 
		{ 
			Choice2("daInvest", "_investShop"); 
		} 
	} 
	if (c.trait.CanIdentify) 
	{ 
		Choice2("daIdentify", "_identify").DisableSound(); 
		Choice2("daIdentifyAll", "_identifyAll"); 
		Choice2("daIdentifySP", "_identifySP").DisableSound(); 
	} 
	if (c.trait.CanPicklock) 
	{ 
		if (c.Evalue(280) < 20) 
		{ 
			c.elements.SetBase(280, 20); 
		} 
		foreach (Thing item4 in EClass.pc.things.List((Thing a) => a.c_lockLv > 0, onlyAccessible: true)) 
		{ 
			Thing _t4 = item4; 
			Choice2("daPicklock".lang(_t4.Name), "_picklock").SetOnClick(delegate
			{ 
				destThing = _t4; 
			}); 
		} 
	} 
	if (c.trait is TraitBanker) 
	{ 
		Choice2("daDeposit", "_deposit"); 
	} 
	if (c.IsMaid || (c.trait.CanInvestTown && (EClass._zone.source.faction == "mysilia" || EClass._zone.IsPCFaction))) 
	{ 
		Choice2("daExtraTax", "_extraTax"); 
	} 
	if ((c.trait is TraitMiko_Mifu || c.trait is TraitMiko_Nefu || c.trait is TraitEureka) && EClass.world.date.IsExpired(c.c_dateStockExpire)) 
	{ 
		Choice2("daBlessing", "_blessing"); 
	} 
	goto IL_0d83; 
	IL_0d83: 
	if (c.IsHomeMember())
	{
		if (c.IsMaid)

public void Build(Chara c)

cs
	Talk("what", StepDefault);
	if (!c.IsMarried || EClass.debug.enable)
	{
		foreach (Thing item4 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement"))) 
		foreach (Thing item5 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement"))) 
		{
			Thing _t4 = item4; 
			Choice("daMarry".lang(item4.Name), "_marry").SetOnClick(delegate
			Thing _t3 = item5; 
			Choice("daMarry".lang(item5.Name), "_marry").SetOnClick(delegate
			{
				destThing = _t4; 
				destThing = _t3; 
			});
		}
	}

public void Build(Chara c)

cs
		QuestSupply supply = c.quest as QuestSupply;
		if (supply != null)
		{
			foreach (Thing item5 in supply.ListDestThing()) 
			foreach (Thing item6 in supply.ListDestThing()) 
			{
				Thing _t3 = item5; 
				Choice("daDeliver".lang(supply.GetTitle() ?? "", _t3.GetName(NameStyle.Full, supply.num)), "_deliver").SetOnClick(delegate
				Thing _t2 = item6; 
				Choice("daDeliver".lang(supply.GetTitle() ?? "", _t2.GetName(NameStyle.Full, supply.num)), "_deliver").SetOnClick(delegate
				{
					EClass.game.quests.Start(c.quest);
					destThing = _t3; 
					destThing = _t2; 
					destQuest = supply;
				}).SetOnTooltip(delegate(UITooltip a)
				{
					_t3.WriteNote(a.note); 
					_t2.WriteNote(a.note); 
				});
			}
		}

public void Build(Chara c)

cs
		{
			EClass.pc.party.AddMemeber(c);
		}
		foreach (Chara item6 in EClass.pc.party.members.ToList()) 
		foreach (Chara item7 in EClass.pc.party.members.ToList()) 
		{
			if (item6 != EClass.pc && item6 != c) 
			if (item7 != EClass.pc && item7 != c) 
			{
				EClass.pc.party.RemoveMember(item6); 
				EClass.pc.party.RemoveMember(item7); 
			}
		}
		if (c.host != null)

public void Build(Chara c)

cs
	Step("_mama");
	Method(delegate
	{
		if (c.affinity.CanBecomeMama() || EClass.debug.enable) 
		if (c.affinity.CanBecomeMama() || EClass.pc.faith == EClass.game.religions.MoonShadow || EClass.debug.enable) 
		{
			TempTalkTopic("mama_yes", StepEnd);
			EClass.pc.SetAI(new AI_Fuck

public void Build(Chara c)

cs
	Step("_baby");
	Method(delegate
	{
		if (c.affinity.CanBecomeMama() || EClass.debug.enable) 
		if (c.affinity.CanBecomeMama() || EClass.pc.faith == EClass.game.religions.MoonShadow || EClass.debug.enable) 
		{
			TempTalkTopic("baby_yes", StepEnd);
			EClass.pc.SetAI(new AI_Fuck

public void Build(Chara c)

cs
	Method(delegate
	{
		TempTalkTopic("blooming1", null);
		foreach (Chara item7 in EClass.pc.party.members.Where((Chara c2) => c2.CanBloom())) 
		foreach (Chara item8 in EClass.pc.party.members.Where((Chara c2) => c2.CanBloom())) 
		{
			Chara c4 = item7; 
			Chara c4 = item8; 
			Choice("daBloom".lang(c4.Name), delegate
			{
				if (EClass._zone.influence < 10)

public void Build(Chara c)

cs
				},
				onList = delegate
				{
					foreach (ResearchPlan item8 in plans) 
					foreach (ResearchPlan item9 in plans) 
					{
						list.Add(item8); 
						list.Add(item9); 
					}
				}
			};

void Invest(bool quick)

cs
				},
				onList = delegate
				{
					foreach (SourceElement.Row item9 in EClass.sources.elements.rows.Where(delegate(SourceElement.Row a) 
					foreach (SourceElement.Row item10 in EClass.sources.elements.rows.Where(delegate(SourceElement.Row a) 
					{
						if (a.tag.Contains("unused"))
						{

void Invest(bool quick)

cs
						return a.category == "skill" && a.categorySub == c.trait.IDTrainer;
					}).ToList())
					{
						list.Add(Element.Create(item9.id)); 
						list.Add(Element.Create(item10.id)); 
					}
				}
			};

void Invest(bool quick)

cs
				{
					SE.Pay();
					EClass.pc.ModCurrency(-costIdentify);
					foreach (Thing item10 in EClass.pc.things.List((Thing t) => !t.IsIdentified, onlyAccessible: true)) 
					foreach (Thing item11 in EClass.pc.things.List((Thing t) => !t.IsIdentified, onlyAccessible: true)) 
					{
						item10.Thing.Identify(show: false); 
						if (!item10.IsInstalled) 
						item11.Thing.Identify(show: false); 
						if (!item11.IsInstalled) 
						{
							numSuperior++;
						}

void Invest(bool quick)

cs
			{
				EClass._zone.SetBGM(102);
			}
			EClass.player.ModKarma(1); 
			EClass.player.ModKarma((!c.GetBool(129)) ? 1 : (-1)); 
			c.SetBool(129, enable: true); 
		});
		Choice("no_rob", StepDefault, cancel: true).SetOnClick(RumorChill);
	}, null, StepDefault);

void Invest(bool quick)

cs
	Step("_end");
	End();
	return;
	IL_093e: 
	Choice2("daMama", "_mama"); 
	goto IL_094f; 
	IL_098e: 
	Choice2("daBaby", "_baby"); 
	goto IL_099f; 
	IL_094f: 
	IL_096a: 
	ConTransmuteHuman condition2 = c.GetCondition<ConTransmuteHuman>();
	bool num3;
	if (condition2 == null)
	{
		if (c.HasElement(1232))
		{
			goto IL_098e; 
			goto IL_09a9; 
		}
		num3 = c.HasElement(1291);
	}

void Invest(bool quick)

cs
	}
	if (num3)
	{
		goto IL_098e; 
	} 
	goto IL_099f; 
	IL_099f: 
	if (c.trait.CanRevive) 
	{ 
		Choice2("daRevive", "_revive").DisableSound(); 
	} 
	if (!c.trait.IDTrainer.IsEmpty() && !EClass._zone.IsUserZone && (Guild.GetCurrentGuild() == null || Guild.GetCurrentGuild().relation.IsMember())) 
	{ 
		Choice2("daTrain", "_train").DisableSound(); 
	} 
	if (c.trait.CanWhore) 
	{ 
		Choice2(flag2 ? "daBirdBuy" : "daTailBuy", "_whore"); 
	} 
	if (c.trait.CanHeal) 
	{ 
		Choice2("daHeal", "_heal"); 
	} 
	if (c.trait.CanServeFood) 
	{ 
		Choice2("daFood", "_food"); 
	} 
	if (c.trait is TraitInformer) 
	{ 
		Choice2("daSellFame", "_sellFame"); 
	} 
	if (EClass._zone.AllowInvest) 
	{ 
		if (c.trait.CanInvestTown && Guild.GetCurrentGuild() == null) 
		{ 
			Choice2("daInvest", "_investZone"); 
		} 
		if (c.trait.CanInvest) 
		{ 
			Choice2("daInvest", "_investShop"); 
		} 
	} 
	if (c.trait.CanIdentify) 
	{ 
		Choice2("daIdentify", "_identify").DisableSound(); 
		Choice2("daIdentifyAll", "_identifyAll"); 
		Choice2("daIdentifySP", "_identifySP").DisableSound(); 
	} 
	if (c.trait.CanPicklock) 
	{ 
		if (c.Evalue(280) < 20) 
		{ 
			c.elements.SetBase(280, 20); 
		} 
		foreach (Thing item11 in EClass.pc.things.List((Thing a) => a.c_lockLv > 0, onlyAccessible: true)) 
		{ 
			Thing _t2 = item11; 
			Choice2("daPicklock".lang(_t2.Name), "_picklock").SetOnClick(delegate
			{ 
				destThing = _t2; 
			}); 
		} 
	} 
	if (c.trait is TraitBanker) 
	{ 
		Choice2("daDeposit", "_deposit"); 
	} 
	if (c.IsMaid || (c.trait.CanInvestTown && (EClass._zone.source.faction == "mysilia" || EClass._zone.IsPCFaction))) 
	{ 
		Choice2("daExtraTax", "_extraTax"); 
	} 
	if ((c.trait is TraitMiko_Mifu || c.trait is TraitMiko_Nefu || c.trait is TraitEureka) && EClass.world.date.IsExpired(c.c_dateStockExpire)) 
	{ 
		Choice2("daBlessing", "_blessing"); 
		goto IL_09a9; 
	}
	goto IL_0d68; 
	goto IL_09ba; 
	void BackChill()
	{
		Method(RumorChill, null, StepDefault);

RenderRow

public Sprite GetSprite(int dir = 0, int skin = 0, bool snow = false)

cs
	bool flag = this is SourceChara.Row;
	if (replacer.HasSprite(idSprite, renderData))
	{
		foreach (string item in new List<string> 
		Sprite sprite = replacer.GetSprite(dir, skin, snow); 
		if ((bool)sprite) 
		{
			$"_skin{skin}_dir{dir}", 
			$"_skin{skin}", 
			$"_dir{dir}", 
			""
		}) 
		{ 
			Sprite sprite = null; 
			if (snow) 
			{ 
				sprite = replacer.GetSprite(item + "_snow"); 
			} 
			if ((object)sprite == null) 
			{ 
				sprite = replacer.GetSprite(item); 
			} 
			if ((bool)sprite) 
			{ 
				return sprite; 
			} 
			return sprite; 
		}
	}
	int[] array = null ?? _tiles;

SpriteData

public void Validate()

cs

	public void Load()
	{
		LoadPref(); 
		LoadAnimationIni(); 
		Texture2D texture2D = IO.LoadPNG(path + ".png");
		Debug.Log(texture2D.width + "/" + texture2D.height + "/" + path);
		if ((bool)tex)

public void Load()

cs
		else
		{
			tex = texture2D;
			int num = tex.width / frame; 
			int height = tex.height; 
			sprites = new Sprite[frame]; 
			Vector2 pivot = new Vector2(0.5f, 0.5f); 
			for (int i = 0; i < frame; i++) 
			{ 
				sprites[i] = Sprite.Create(tex, new Rect(i * num, 0f, num, height), pivot, 100f, 0u, SpriteMeshType.FullRect); 
			} 
		}
		LoadPref(); 
		int num = tex.width / frame; 
		int height = tex.height; 
		sprites = new Sprite[frame]; 
		Vector2 pivot = new Vector2(0.5f, 0.5f); 
		for (int i = 0; i < frame; i++) 
		{ 
			sprites[i] = Sprite.Create(tex, new Rect(i * num, 0f, num, height), pivot, 100f, 0u, SpriteMeshType.FullRect); 
		} 
	}
}

SpriteReplacer

using System;

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

public class SpriteReplacer

public class SpriteReplacer

cs

	public static Dictionary<string, string> dictModItems = new Dictionary<string, string>();

	public static Dictionary<string, string> dictTextureItems = new Dictionary<string, string>(); 
	public SpriteData data;

	public Dictionary<string, SpriteData> suffixes = new Dictionary<string, SpriteData>();

public static Dictionary<string, SpriteReplacer> ListSkins()

cs
		{
			dictSkins.Remove(item);
		}
		FileInfo[] files = new DirectoryInfo(CorePath.custom + "Skin").GetFiles("*.png"); 
		foreach (FileInfo fileInfo in files) 
		Dictionary<string, string> dictionary = new DirectoryInfo(CorePath.custom + "Skin").GetFiles("*.png").ToDictionary((FileInfo f) => Path.GetFileNameWithoutExtension(f.Name), (FileInfo f) => Path.ChangeExtension(f.FullName, null)); 
		string key2; 
		foreach (KeyValuePair<string, string> item2 in dictionary) 
		{
			string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); 
			if (!dictSkins.ContainsKey(fileNameWithoutExtension)) 
			item2.Deconstruct(out var key, out key2); 
			string key3 = key; 
			string path = key2; 
			if (!dictSkins.ContainsKey(key3)) 
			{
				SpriteReplacer spriteReplacer = new SpriteReplacer(); 
				spriteReplacer.data = new SpriteData
				dictSkins[key3] = new SpriteReplacer
				{
					path = fileInfo.GetFullFileNameWithoutExtension() 
					data = new SpriteData
					{ 
						path = path 
					} 
				};
				spriteReplacer.data.Init(); 
				dictSkins.Add(fileNameWithoutExtension, spriteReplacer); 
			}
		}
		foreach (KeyValuePair<string, SpriteReplacer> dictSkin2 in dictSkins) 
		{ 
			dictSkin2.Deconstruct(out key2, out var value); 
			string id = key2; 
			value.BuildSuffixData(id, dictionary); 
		} 
		return dictSkins;
	}

public Sprite GetSprite(string suffix = "")

cs
		return value.GetSprite();
	}

	public Sprite GetSprite(int dir, int skin, bool snow) 
	{ 
		foreach (string item in new List<string> 
		{ 
			$"_skin{skin}_dir{dir}", 
			$"_skin{skin}", 
			$"_dir{dir}", 
			""
		}) 
		{ 
			Sprite sprite = null; 
			if (snow) 
			{ 
				sprite = GetSprite(item + "_snow"); 
			} 
			if ((object)sprite == null) 
			{ 
				sprite = GetSprite(item); 
			} 
			if ((bool)sprite) 
			{ 
				return sprite; 
			} 
		} 
		return data?.GetSprite(); 
	} 
	public void Validate()
	{
		data?.Validate();

public void Validate()

cs
		}
	}

	public void ReloadBuiltInTextures() 
	{ 
		dictTextureItems = new DirectoryInfo(CorePath.packageCore + "Texture/Item").GetFiles("*.png").ToDictionary((FileInfo f) => Path.GetFileNameWithoutExtension(f.Name), (FileInfo f) => Path.ChangeExtension(f.FullName, null)); 
	} 
	public void BuildSuffixData(string id, Dictionary<string, string> dictTexItems) 
	{ 
		foreach (var (text3, path) in dictTexItems) 
		{ 
			if (text3.StartsWith(id)) 
			{ 
				string text4 = text3[id.Length..]; 
				SpriteData spriteData = new SpriteData
				{ 
					path = path 
				}; 
				spriteData.Init(); 
				suffixes[text4] = spriteData; 
				Debug.Log("#sprite replacer init '" + text4 + "' at " + path.ShortPath()); 
			} 
		} 
	} 
	public void Reload(string id, RenderData renderData = null)
	{
		data = null;

public void Reload(string id, RenderData renderData = null)

cs
	{
		if (dictModItems.ContainsKey(id))
		{
			foreach (var (text3, path) in dictModItems) 
			{ 
				if (text3.StartsWith(id)) 
				{ 
					string text4 = text3[id.Length..]; 
					SpriteData spriteData = new SpriteData
					{ 
						path = path 
					}; 
					spriteData.Init(); 
					suffixes[text4] = spriteData; 
					Debug.Log("#sprite replacer init '" + text4 + "' at " + path.ShortPath()); 
				} 
			} 
			data = suffixes.TryGetValue(""); 
			BuildSuffixData(id, dictModItems); 
		}
		else
		{
			string text5 = CorePath.packageCore + "Texture/Item/" + id; 
			if (!File.Exists(text5 + ".png") && renderData != null) 
			if (dictTextureItems.Count == 0) 
			{
				text5 = CorePath.packageCore + "Texture/Item/" + renderData.name; 
				ReloadBuiltInTextures(); 
			}
			if (File.Exists(text5 + ".png")) 
			string text = dictTextureItems.TryGetValue(id); 
			if (text == null && renderData != null) 
			{
				data = new SpriteData
				{ 
					path = text5 
				}; 
				data.Init(); 
				suffixes[""] = data; 
				text = dictTextureItems.TryGetValue(renderData.name); 
			} 
			if (text != null) 
			{ 
				BuildSuffixData(id, dictTextureItems); 
			}
		}
		data = suffixes.TryGetValue(""); 
		if (data != null)
		{
			Debug.Log(id + ":" + data.path);

ZonePreEnterEncounter

public override void Execute()

cs
				Point randomPointInRadius3 = EClass.pc.pos.GetRandomPointInRadius(2, 5, requireLos: false, allowChara: false);
				if (randomPointInRadius3 != null)
				{
					Chara chara3 = EClass._zone.SpawnMob(randomPointInRadius3, SpawnSetting.Mob(mob.id, (mob.MainElement == Element.Void) ? null : mob.MainElement.source.alias.Substring(3), -1, EClass.player.HasKeyItem("license_adv") ? EClass.rndHalf(EClass.pc.FameLv) : 0)); 
					bool flag2 = EClass.rnd(5) == 0; 
					Chara chara3 = EClass._zone.SpawnMob(randomPointInRadius3, SpawnSetting.Mob(mob.id, (mob.MainElement == Element.Void) ? null : mob.MainElement.source.alias.Substring(3), -1, (!flag2 && EClass.player.HasKeyItem("license_adv")) ? EClass.rndHalf(EClass.pc.FameLv) : 0)); 
					Hostility hostility2 = (chara3.c_originalHostility = Hostility.Enemy);
					chara3.hostility = hostility2;
					chara3.enemy = EClass.pc.party.members.RandomItem();
					leader = chara3;
					if (EClass.rnd(5) == 0) 
					if (flag2) 
					{
						TraitFoodEggFertilized.MakeBaby(chara3, 1);
					}