Skip to content

EA 23.234 Nightly

November 16, 2025

42 files modified. 1 new file created.

Important Changes

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

Chara (1)

cs
public void OnSleep(int power, int days = 1) 
public void OnSleep(int power, int days = 1, bool isSunLit = false) 

ABILITY

``

cs

public class ABILITY
{
	public const int ActNTR = 6603; 
	public const int ActBash = 5052; 
	public const int TaskHarvest = 5053; 
	public const int ActCryRage = 6604; 

	public const int AI_Bladder = 5054;

public class ABILITY

cs

	public const int ActPray = 6050;

	public const int ActZap = 5051; 
	public const int ActEscape = 6400;

	public const int ActDuplicate = 6420; 
	public const int ActSuicide = 6410; 

	public const int ActRush = 6450; 
	public const int TaskHarvest = 5053; 
	public const int ActDuplicate = 6420; 

	public const int ActCrabBreathe = 6500;

public class ABILITY

cs

	public const int ActDraw = 6602;

	public const int ActCryRage = 6604; 
	public const int ActNTR = 6603; 

	public const int ActCrySad = 6605;

	public const int ActBurnMana = 6606;

	public const int ActBloodsuck = 6607; 
	public const int ActWeaken = 6610;

	public const int ActFear = 6611;

public class ABILITY

cs

	public const int ActGazeDim = 6620;

	public const int ActSuicide = 6410; 
	public const int ActGazeInsane = 6621;

	public const int AI_Sleep = 5050; 
	public const int ActRush = 6450; 

	public const int ActItem = 5048; 
	public const int ActGazeMana = 6623; 

	public const int TaskPick = 5018; 
	public const int ActBash = 5052; 

	public const int TaskReadBoard = 5019; 
	public const int AI_Sleep = 5050; 

	public const int TaskFarm = 5020;

public class ABILITY

cs

	public const int AI_Deconstruct = 5031;

	public const int AI_OpenLock = 5049; 
	public const int AI_Equip = 5032;

	public const int GoalIdle = 5034; 
	public const int ActCancelTask = 5033; 

	public const int TaskBuild = 5035; 
	public const int ActZap = 5051; 
	public const int GoalIdle = 5034; 

	public const int TaskMoveInstalled = 5036;

public class ABILITY

cs

	public const int ActPick = 5047;

	public const int ActCancelTask = 5033; 
	public const int ActGazeMana = 6623; 
	public const int ActItem = 5048; 

	public const int ActGazeMutation = 6622; 
	public const int AI_OpenLock = 5049; 

	public const int ActCatHuffing = 6627; 
	public const int TaskBuild = 5035; 

	public const int ActDrainBlood = 6626;

	public const int breathe_Nether = 50206; 
	public const int ActGazeMutation = 6622; 
	public const int ActInsult = 6630; 
	public const int ActCatHuffing = 6627; 

	public const int breathe_Sound = 50207;

public class ABILITY

cs

	public const int breathe_Void = 50216;

	public const int TaskReadBoard = 5019; 
	public const int TaskPick = 5018; 
	public const int TaskTalk = 5017;

	public const int TaskTame = 5016;

	public const int breathe_Mind = 50204; 
	public const int TaskAttack = 5015;

	public const int ActAttack = 5013; 
	public const int TaskPlow = 5014; 

	public const int AI_Goto = 5012; 
	public const int ActWait = 5000; 

	public const int TaskCut = 5011; 
	public const int ActMelee = 5001; 

	public const int TaskDig = 5010; 
	public const int Melee = 5002; 

	public const int TaskMine = 5009; 
	public const int Ranged = 5003; 

	public const int General = 5008; 
	public const int Sleep = 5004; 

	public const int Use = 5007; 
	public const int Wait = 5005; 

	public const int Shoot = 5006; 
	public const int breathe_Poison = 50205; 

	public const int Wait = 5005; 
	public const int Shoot = 5006; 

	public const int Sleep = 5004; 
	public const int General = 5008; 

	public const int Ranged = 5003; 
	public const int TaskMine = 5009; 

	public const int Melee = 5002; 
	public const int TaskDig = 5010; 

	public const int ActMelee = 5001; 
	public const int TaskCut = 5011; 

	public const int ActWait = 5000; 
	public const int AI_Goto = 5012; 

	public const int TaskPlow = 5014; 
	public const int ActAttack = 5013; 

	public const int breathe_Darkness = 50203; 
	public const int Use = 5007; 

	public const int breathe_Poison = 50205; 
	public const int breathe_Mind = 50204; 

	public const int breathe_Cold = 50201; 
	public const int breathe_Nether = 50206; 

	public const int ActInsult = 6630; 
	public const int breathe_Lightning = 50202; 

	public const int ActScream = 6631;

public class ABILITY

cs

	public const int ActBladeStorm2 = 6665;

	public const int breathe_Lightning = 50202; 
	public const int breathe_Darkness = 50203; 

	public const int ActMissileBarrage = 6667;

public class ABILITY

cs

	public const int ActWhirlwind = 6666;

	public const int ActJureHeal = 6901; 
	public const int StTaunt = 6700; 
	public const int StManaCost = 6720;

	public const int SongSleep = 6750; 
	public const int SongTulip = 6751; 
	public const int breathe_Cold = 50201; 

	public const int SongValor = 6752; 
	public const int breathe_Fire = 50200; 

	public const int ActManaAbsorb = 6900; 
	public const int SpTransmuteBat = 8793; 

	public const int breathe_Fire = 50200; 
	public const int breathe_ = 7000; 

	public const int ActLulwyTrick = 6902; 
	public const int StTaunt = 6700; 

	public const int ActKizuamiTrick = 6903;

	public const int breathe_ = 7000; 
	public const int ActLulwyTrick = 6902; 

	public const int ActHeadpat = 6904;

	public static readonly int[] IDS = new int[131] 
	public const int ActManaAbsorb = 6900; 
	public const int SongValor = 6752; 
	public const int SongTulip = 6751; 
	public const int SongSleep = 6750; 
	public const int ActJureHeal = 6901; 
	public static readonly int[] IDS = new int[133] 
	{
		6603, 5052, 5053, 5054, 5055, 6001, 6003, 6011, 6012, 6013, 
		6015, 6018, 6019, 6020, 6050, 5051, 6400, 6420, 6450, 6500, 
		6600, 6601, 6602, 6604, 6605, 6606, 6610, 6611, 6612, 6613, 
		6620, 6410, 6621, 5050, 5048, 5018, 5019, 5020, 5021, 5022, 
		5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5049, 
		5032, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 
		5043, 5044, 5045, 5046, 5047, 5033, 6623, 6622, 6627, 6626, 
		50206, 50207, 50208, 50209, 50210, 50211, 50212, 50213, 50214, 50215, 
		50216, 5017, 5016, 50204, 5015, 5013, 5012, 5011, 5010, 5009, 
		5008, 5007, 5006, 5005, 5004, 5003, 5002, 5001, 5000, 5014, 
		50203, 50205, 50201, 6630, 6631, 6640, 6641, 6642, 6650, 6660, 
		6661, 6662, 6663, 6664, 6665, 50202, 6667, 6800, 6666, 6901, 
		6700, 6720, 6750, 6751, 6752, 6900, 50200, 6902, 6903, 7000, 
		6904
		6604, 5054, 5055, 6001, 6003, 6011, 6012, 6013, 6015, 6018, 
		6019, 6020, 6050, 6400, 6410, 5053, 6420, 6500, 6600, 6601, 
		6602, 6603, 6605, 6606, 6607, 6610, 6611, 6612, 6613, 6620, 
		6621, 6450, 6623, 5052, 5050, 5020, 5021, 5022, 5023, 5024, 
		5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5051, 
		5034, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 
		5045, 5046, 5047, 5048, 5049, 5035, 6626, 6622, 6630, 6627, 
		50207, 50208, 50209, 50210, 50211, 50212, 50213, 50214, 50215, 50216, 
		5019, 5018, 5017, 5016, 5015, 5014, 5000, 5001, 5002, 5003, 
		5004, 5005, 50205, 5006, 5008, 5009, 5010, 5011, 5012, 5013, 
		5007, 50204, 50206, 50202, 6631, 6640, 6641, 6642, 6650, 6660, 
		6661, 6662, 6663, 6664, 6665, 50203, 6667, 6800, 6666, 6720, 
		50201, 50200, 8793, 7000, 6700, 6903, 6902, 6904, 6900, 6752, 
		6751, 6750, 6901
	};
}
public class Ability : Act

AI_Fuck

public enum FuckType

cs
		tame
	}

	public enum Variation
	{ 
		Normal, 
		Bitch, 
		Succubus, 
		NTR, 
		Bloodsuck
	} 
	public Variation variation; 
	public Chara target;

	public bool sell;

	public bool bitch; 
	public bool succubus;

	public bool ntr; 
	public int maxProgress;

	public int progress;

public enum FuckType

cs

	public override int CurrentProgress => progress;

	public override bool CancelOnAggro => !ntr; 
	public override bool CancelOnAggro 
	{ 
		get 
		{ 
			if (variation != Variation.NTR) 
			{ 
				return variation != Variation.Bloodsuck; 
			} 
			return false; 
		} 
	} 

	public override bool CancelWhenDamaged => !ntr; 
	public override bool CancelWhenDamaged => CancelOnAggro; 

	public override bool ShouldAllyAttack(Chara tg)
	{

public override IEnumerable<Status> Run()

cs
	{
		cc.SetTempHand(1104, -1);
	}
	maxProgress = (ntr ? 10 : 25); 
	if (succubus) 
	maxProgress = ((variation == Variation.NTR || variation == Variation.Bloodsuck) ? 10 : 25); 
	if (variation == Variation.Succubus) 
	{
		cc.Talk("seduce");
	}
	if (variation == Variation.Bloodsuck) 
	{ 
		cc.PlaySound("bloodsuck"); 
	} 
	for (int i = 0; i < maxProgress; i++)
	{
		progress = i;

public override IEnumerable<Status> Run()

cs
		switch (Type)
		{
		case FuckType.fuck:
			if (ntr) 
			if (variation == Variation.NTR) 
			{
				cc.Say("ntr", cc, tc);
			}

public override IEnumerable<Status> Run()

cs
			{
				target.AddCondition<ConWait>(50, force: true);
			}
			if (variation == Variation.Bloodsuck) 
			{ 
				owner.pos.TryWitnessCrime(cc, tc, 4, (Chara c) => EClass.rnd(cc.HasCondition<ConTransmuteBat>() ? 50 : 20) == 0); 
			} 
			break;
		case FuckType.tame:
		{

public void Finish()

cs
	{
	case FuckType.fuck:
	{
		for (int i = 0; i < 2; i++) 
		if (variation == Variation.Bloodsuck) 
		{
			Chara chara3 = ((i == 0) ? chara : chara2); 
			chara3.RemoveCondition<ConDrunk>(); 
			if (EClass.rnd(15) == 0 && !chara3.HasElement(1216)) 
			if (EClass.rnd(2) == 0) 
			{
				chara3.AddCondition<ConDisease>(200); 
				chara2.AddCondition<ConConfuse>(500); 
			}
			chara3.ModExp(77, 250); 
			chara3.ModExp(71, 250); 
			chara3.ModExp(75, 250); 
		} 
		if (!chara2.HasElement(1216)) 
		{ 
			if (EClass.rnd(5) == 0) 
			if (EClass.rnd(2) == 0) 
			{ 
				chara2.AddCondition<ConDim>(500); 
			} 
			if (EClass.rnd(2) == 0) 
			{
				chara2.AddCondition<ConParalyze>(500);
			}
			if (EClass.rnd(3) == 0) 
			if (EClass.rnd(10) == 0) 
			{
				chara2.AddCondition<ConInsane>(100 + EClass.rnd(100));
			}
		}
		int num3 = CalcMoney.Whore(chara2, chara); 
		else
		{ 
			for (int i = 0; i < 2; i++) 
			{ 
				Chara chara3 = ((i == 0) ? chara : chara2); 
				chara3.RemoveCondition<ConDrunk>(); 
				if (EClass.rnd(15) == 0 && !chara3.HasElement(1216)) 
				{ 
					chara3.AddCondition<ConDisease>(200); 
				} 
				chara3.ModExp(77, 250); 
				chara3.ModExp(71, 250); 
				chara3.ModExp(75, 250); 
			} 
			if (!chara2.HasElement(1216)) 
			{ 
				if (EClass.rnd(5) == 0) 
				{ 
					chara2.AddCondition<ConParalyze>(500); 
				} 
				if (EClass.rnd(3) == 0) 
				{ 
					chara2.AddCondition<ConInsane>(100 + EClass.rnd(100)); 
				} 
			} 
		} 
		chara.Talk("tail_after");
		bool flag3 = false;
		if (succubus) 
		if (variation == Variation.Succubus) 
		{
			chara.ShowEmo(Emo.love);
			chara2.ShowEmo(Emo.love);
			EClass.player.forceTalk = true;
			chara2.Talk("seduced");
		}
		else if (chara != EClass.pc) 
		else if (variation != Variation.NTR && variation != Variation.Bloodsuck && chara != EClass.pc) 
		{
			int num3 = CalcMoney.Whore(chara2, chara); 
			Chara chara4 = chara;
			Chara chara5 = chara2;
			if (bitch) 
			if (variation == Variation.Bitch) 
			{
				chara = chara5;
				chara2 = chara4;

public void Finish()

cs
		{
			chara2.DoHostileAction(chara);
		}
		if (chara.IsPCParty || chara2.IsPCParty) 
		if (variation == Variation.Bloodsuck) 
		{ 
			int value = chara.hunger.value; 
			Thing food = CraftUtil.MakeBloodMeal(chara, chara2); 
			FoodEffect.Proc(chara, food, consume: false); 
			chara2.AddCondition<ConBleed>(EClass.rndHalf(value * 20)); 
		} 
		else
		{
			chara.stamina.Mod(-5 - EClass.rnd(chara.stamina.max / 10 + (succubus ? StaminaCost(chara2, chara) : 0) + 1)); 
			chara2.stamina.Mod(-5 - EClass.rnd(chara2.stamina.max / 20 + (succubus ? StaminaCost(chara, chara2) : 0) + 1)); 
			if (chara.IsPCParty || chara2.IsPCParty) 
			{ 
				chara.stamina.Mod(-5 - EClass.rnd(chara.stamina.max / 10 + ((variation == Variation.Succubus) ? StaminaCost(chara2, chara) : 0) + 1)); 
				chara2.stamina.Mod(-5 - EClass.rnd(chara2.stamina.max / 20 + ((variation == Variation.Succubus) ? StaminaCost(chara, chara2) : 0) + 1)); 
			} 
			SuccubusExp(chara, chara2); 
			SuccubusExp(chara2, chara); 
		}
		SuccubusExp(chara, chara2); 
		SuccubusExp(chara2, chara); 
		chara2.ModAffinity(chara, flag ? 10 : (-5));
		if (chara == EClass.pc || chara2 == EClass.pc)
		{
			EClass.player.stats.kimo++;
		}
		if (ntr) 
		if (variation != Variation.NTR) 
		{
			Thing thing = chara2.things.Find<TraitDreamBug>(); 
			if (thing != null) 
			break; 
		} 
		Thing thing = chara2.things.Find<TraitDreamBug>(); 
		if (thing != null) 
		{ 
			thing.ModNum(-1); 
			if (chara.IsPC) 
			{
				thing.ModNum(-1); 
				if (chara.IsPC) 
				{ 
					Msg.Say("dream_spell", EClass.sources.elements.map[9156].GetName().ToLowerInvariant()); 
					EClass.pc.GainAbility(9156, EClass.rnd(2) + 1); 
				} 
				Msg.Say("dream_spell", EClass.sources.elements.map[9156].GetName().ToLowerInvariant()); 
				EClass.pc.GainAbility(9156, EClass.rnd(2) + 1); 
			}
		}
		if (!ntr || !chara.HasElement(1239) || chara2.HasElement(1216)) 
		if (!chara.HasElement(1239) || chara2.HasElement(1216)) 
		{
			break;
		}

AI_Idle

public override IEnumerable<Status> Run()

cs
					}
				}
			}
			if (EClass.rnd(100) == 0 && EClass.pc.ai is AI_Fish && owner.stamina.value > 0 && owner.things.Find<TraitToolFishing>() != null) 
			{ 
				Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(0, 3); 
				if (randomPointInRadius != null) 
				{ 
					randomPointInRadius = AI_Fish.GetFishingPoint(randomPointInRadius); 
					if (randomPointInRadius.IsValid) 
					{ 
						yield return Do(new AI_Fish
						{ 
							pos = randomPointInRadius 
						}); 
					} 
				} 
			} 
		}
		if (owner.c_uidMaster != 0)
		{

public override IEnumerable<Status> Run()

cs
			yield return Do(new AI_Fuck
			{
				target = chara3,
				bitch = true
				variation = AI_Fuck.Variation.Bitch 
			});
		}
	}

AI_PlayMusic

public override IEnumerable<Status> Run()

cs
			idSong = "flute";
			break;
		case "taiko":
		case "drum":
			idSong = "taiko";
			break;
		case "mokugyo":

+ActBloodsuck

File Created
cs
public class ActBloodsuck : ActNTR
{
	public override bool IsHostileAct => true;

	public override bool CanPerform()
	{
		if (Act.TC == null || !Act.TC.isChara || Act.TC == Act.CC)
		{
			return false;
		}
		if (Act.TC.Evalue(964) > 0)
		{
			return false;
		}
		return true;
	}

	public override bool Perform()
	{
		Act.CC.SetAI(new AI_Fuck
		{
			target = Act.TC.Chara,
			variation = AI_Fuck.Variation.Bloodsuck
		});
		return true;
	}
}

ActEffect

public static bool Wish(string s, string name, int power, BlessedState state)

cs
			bool flag = false;
			foreach (Religion item in EClass.game.religions.list)
			{
				if (item.IsValidArtifact(r.id)) 
				if (item.giftRank >= 2 && item.IsValidArtifact(r.id)) 
				{
					flag = true;
				}

public static bool Wish(string s, string name, int power, BlessedState state)

cs
		Msg.Say("wishFail");
		return false;
	}
	list.Sort((WishItem a, WishItem b) => (a.score != b.score) ? (b.score - a.score) : (EClass.rnd(10) - EClass.rnd(10))); 
	list.Sort((WishItem a, WishItem b) => b.score - a.score); 
	foreach (WishItem item2 in list)
	{
		Debug.Log(item2.score + "/" + s + "/" + item2.n);

public static int Compare(string s, string t)

cs
	int num = 0;
	if (t == s)
	{
		num += 100; 
		num += 100 + EClass.rnd(30); 
	}
	if (t.Contains(s))
	{
		num += 100; 
		num += 100 + EClass.rnd(30); 
	}
	return num;
}

ActNTR

public override bool Perform()

cs
	Act.CC.SetAI(new AI_Fuck
	{
		target = Act.TC.Chara,
		bitch = true, 
		ntr = true
		variation = AI_Fuck.Variation.NTR 
	});
	return true;
}

ActPlan

public void _Update(PointTarget target)

cs
								TrySetAct(new AI_Fuck
								{
									target = c2,
									succubus = true
									variation = AI_Fuck.Variation.Succubus 
								}, c2);
							}
							TrySetAct(ACT.Chat, c2);

BaseGameScreen

public void RefreshAll()

cs
public void RefreshScreenSize()
{
	Zoom = EMono.scene.camSupport.Zoom;
	width = (int)((float)Screen.width / tileSize.x / Zoom) + (int)paddings.x + 2; 
	height = (int)((float)Screen.height / (tileSize.y / 2f) / Zoom) + (int)paddings.y + 4; 
	width = (int)((float)Screen.width / tileSize.x / Zoom) + (int)paddings.x + 2 + EMono.core.config.test.screenExtraWidth; 
	height = (int)((float)Screen.height / (tileSize.y / 2f) / Zoom) + (int)paddings.y + 4 + EMono.core.config.test.screenExtraHeight; 
	camSupport.divier = EMono.core.config.fix.divider;
	camSupport.ResizeCameraToPixelPerfect();
	Vector3 localScale = new Vector3(EMono.scene.cam.orthographicSize * ((float)Screen.width / (float)Screen.height) * 2.5f, EMono.scene.cam.orthographicSize * 2.5f, 1f);

BaseTileMap

public virtual void Draw()

cs
	mz = vector3Int.x - 1;
	HitPoint.Set(mx, mz);
	bool isAltDown = EInput.isAltDown;
	for (int num3 = maxColliderCheck; num3 >= 0; num3--) 
	for (int num3 = maxColliderCheck + EMono.core.config.test.screenExtraHeight; num3 >= 0; num3--) 
	{
		TestPoint.x = mx + num3;
		TestPoint.z = mz - num3;

public virtual void Draw()

cs
	int valueOrDefault = (this.room?.lot?.idBGM).GetValueOrDefault();
	if (valueOrDefault == 0)
	{
		goto IL_16fb; 
		goto IL_1710; 
	}
	if (!(EMono.Sound.currentPlaylist != EMono.Sound.plLot))
	{
		BGMData data = EMono.Sound.plLot.list[0].data;
		if ((object)data != null && data.id == valueOrDefault)
		{
			goto IL_16fb; 
			goto IL_1710; 
		}
	}
	goto IL_171a; 
	IL_1724: 
	goto IL_172f; 
	IL_1739: 
	if (this.room != lastRoom)
	{
		screen.RefreshWeather();

public virtual void Draw()

cs
		SoundManager.bgmVolumeMod = ((!LayerDrama.maxBGMVolume && !EMono._map.IsIndoor && this.room != null && !this.room.data.atrium && this.room.HasRoof) ? (-0.6f) : 0f);
		screenHighlight = ScreenHighlight.None;
		return;
		IL_16fb: 
		IL_1710: 
		if (valueOrDefault == 0 && EMono.Sound.currentPlaylist == EMono.Sound.plLot)
		{
			goto IL_171a; 
			goto IL_172f; 
		}
		goto IL_1724; 
		IL_171a: 
		goto IL_1739; 
		IL_172f: 
		EMono._zone.RefreshBGM();
		goto IL_1724; 
		goto IL_1739; 
	}

	public void RefreshHeight()

public virtual void DrawTile()

cs
	{
		blockLight -= heightLightMod * (float)(currentHeight - height);
	}
	if (blockLight < 0f) 
	{ 
		blockLight = 0f; 
	} 
	liquidLv = (param.liquidLv = ((!flag && !isUnderwater) ? (((this.cell.liquidLv + this.cell._bridge != 0) ? this.cell.sourceBridge.tileType.LiquidLV : sourceFloor.tileType.LiquidLV) * 10) : 0));
	if (this.cell.shore != 0 && liquidLv > 20)
	{

public virtual void DrawTile()

cs
	bool flag4 = this.cell.isSurrounded && innerMode != 0 && sourceBlock.tileType.IsFullBlock;
	if (!(!isSeen || flag4))
	{
		goto IL_1683; 
		goto IL_169b; 
	}
	bool isRoomEdge = this.cell.IsRoomEdge;
	orgY = param.y;

public virtual void DrawTile()

cs
	{
		if (isRoomEdge)
		{
			goto IL_1683; 
			goto IL_169b; 
		}
		if (detail == null || !EMono.pc.hasTelepathy)
		{

public virtual void DrawTile()

cs
			fogged = true;
		}
	}
	goto IL_7b8d; 
	IL_6fd2: 
	if (isSnowCovered && (sourceBlock.id != 0 || this.cell.hasDoor) && !snowed && !this.cell.isClearSnow && ((!this.cell.Front.HasRoof && !this.cell.Front.HasBlock) || (!this.cell.Right.HasRoof && !this.cell.Right.HasBlock))) 
	{ 
		snowed = true; 
	} 
	if (this.cell.effect != null) 
	{ 
		if (this.cell.effect.IsLiquid) 
		{ 
			SourceCellEffect.Row sourceEffect = this.cell.sourceEffect; 
			SourceMaterial.Row defaultMaterial = sourceEffect.DefaultMaterial; 
			tile = 4 + Rand.bytes[index % Rand.MaxBytes] % 4; 
			param.tile = tile + this.cell.sourceEffect._tiles[0]; 
			param.mat = defaultMaterial; 
			param.matColor = ((this.cell.effect.color == 0) ? GetColorInt(ref defaultMaterial.matColor, sourceEffect.colorMod) : this.cell.effect.color); 
			sourceEffect.renderData.Draw(param); 
		} 
		else
		{ 
			param.tile = this.cell.effect.source._tiles[0]; 
			SourceCellEffect.Row sourceEffect2 = this.cell.sourceEffect; 
			if (sourceEffect2.anime.Length != 0) 
			{ 
				if (sourceEffect2.anime.Length > 2) 
				{ 
					float num3 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[2]; 
					if (!(num3 >= (float)sourceEffect2.anime[0])) 
					{ 
						param.tile += num3; 
					} 
				} 
				else
				{ 
					float num4 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[0]; 
					param.tile += num4; 
				} 
			} 
			if (this.cell.effect.IsFire) 
			{ 
				rendererEffect.Draw(param); 
			} 
			else
			{ 
				this.cell.effect.source.renderData.Draw(param); 
			} 
		} 
	} 
	param.color = floorLight; 
	if (this.cell.critter != null) 
	{ 
		Critter critter = this.cell.critter; 
		int snowTile = critter.tile; 
		if (snowed && critter.SnowTile != 0) 
		{ 
			critter.x = 0.06f; 
			critter.y = -0.06f; 
			snowTile = critter.SnowTile; 
		} 
		else
		{ 
			critter.Update(); 
		} 
		pass = passObjSS; 
		batch = pass.batches[pass.batchIdx]; 
		batch.matrices[pass.idx].m03 = param.x + (float)(int)(critter.x * 100f) * 0.01f; 
		batch.matrices[pass.idx].m13 = param.y + (float)(int)(critter.y * 100f) * 0.01f; 
		batch.matrices[pass.idx].m23 = param.z; 
		batch.tiles[pass.idx] = snowTile * ((!critter.reverse) ? 1 : (-1)); 
		batch.colors[pass.idx] = floorLight; 
		pass.idx++; 
		if (pass.idx == pass.batchSize) 
		{ 
			pass.NextBatch(); 
		} 
	} 
	if (detail != null) 
	{ 
		TransAnime anime3 = detail.anime; 
		if (anime3 != null && !anime3.animeBlock) 
		{ 
			TransAnime anime4 = detail.anime; 
			param.x += anime4.v.x; 
			param.y += anime4.v.y; 
			param.z += anime4.v.z; 
		} 
	} 
	if (this.cell.obj != 0 && !this.cell.sourceObj.renderData.SkipOnMap) 
	{ 
		SourceObj.Row sourceObj = this.cell.sourceObj; 
		if (!snowed || sourceObj.snowTile <= 0) 
		{ 
			param.snow = snowed; 
			param.mat = this.cell.matObj; 
			orgY = param.y; 
			if (param.liquidLv > 0) 
			{ 
				if (sourceObj.pref.Float) 
				{ 
					param.y += 0.01f * floatY; 
					if (liquidLv > 10) 
					{ 
						liquidLv = TileType.FloorWaterShallow.LiquidLV * 10; 
					} 
					liquidLv -= (int)(floatY * 0.5f); 
					param.liquidLv = liquidLv; 
				} 
				if (sourceObj.tileType.IsWaterTop) 
				{ 
					param.liquidLv = 0; 
				} 
				else
				{ 
					param.liquidLv += sourceObj.pref.liquidMod; 
					if (param.liquidLv < 1) 
					{ 
						param.liquid = 1f; 
					} 
					else if (param.liquidLv > 99 + sourceObj.pref.liquidModMax) 
					{ 
						param.liquidLv = 99 + sourceObj.pref.liquidModMax; 
					} 
				} 
			} 
			if (sourceObj.useAltColor) 
			{ 
				param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, sourceObj.colorMod)); 
			} 
			else
			{ 
				param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, sourceObj.colorMod)); 
			} 
			if (sourceObj.HasGrowth) 
			{ 
				this.cell.growth.OnRenderTileMap(param); 
				if (this.cell.obj == 118 && Core.fixedFrame % 10f == 0f && sourceObj.growth.IsMature) 
				{ 
					EMono.scene.psFey.transform.position = new Vector3(param.x, param.y, param.z - 2f); 
					EMono.scene.psFey.Emit(1); 
				} 
			} 
			else
			{ 
				if (this.cell.autotileObj != 0) 
				{ 
					param.tile = sourceObj._tiles[0] + this.cell.autotileObj; 
				} 
				else if (sourceObj.tileType.IsUseBlockDir) 
				{ 
					param.tile = sourceObj._tiles[this.cell.blockDir % sourceObj._tiles.Length]; 
				} 
				else
				{ 
					param.tile = sourceObj._tiles[this.cell.objDir % sourceObj._tiles.Length]; 
				} 
				if (_lowblock && sourceObj.tileType.IsSkipLowBlock) 
				{ 
					param.tile += ((param.tile > 0f) ? 1 : (-1)) * 3000000; 
				} 
				orgY = param.y; 
				orgZ = param.z; 
				param.y += sourceObj.pref.y; 
				param.z += sourceObj.pref.z; 
				sourceObj.renderData.Draw(param); 
				param.y = orgY; 
				param.z = orgZ; 
				int shadow3 = sourceObj.pref.shadow; 
				if (shadow3 > 1 && !this.cell.ignoreObjShadow) 
				{ 
					passShadow.AddShadow(param.x + sourceObj.renderData.offsetShadow.x, param.y + sourceObj.renderData.offsetShadow.y, param.z + sourceObj.renderData.offsetShadow.z, ShadowData.Instance.items[shadow3], sourceObj.pref, 0, param.snow); 
				} 
				param.y = orgY; 
			} 
		} 
	} 
	if (this.cell.decal != 0 && sourceFloor.tileType.AllowBlood) 
	{ 
		passDecal.Add(param, (int)this.cell.decal, floorLight); 
	} 
	if (highlightCells) 
	{ 
		switch (ActionMode.FlagCell.mode) 
		{ 
		case AM_FlagCell.Mode.flagWallPillar: 
			if (this.cell.isToggleWallPillar) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagSnow: 
			if (this.cell.isClearSnow) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagFloat: 
			if (this.cell.isForceFloat) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagClear: 
			if (this.cell.isClearArea) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		} 
	} 
	if (detail == null) 
	{ 
		return; 
	} 
	if (highlightArea && detail.area != null) 
	{ 
		passArea.Add(param, (int)detail.area.GetTile(index) - ((!subtleHighlightArea) ? 1 : 0), 0f); 
	} 
	if (detail.footmark != null && sourceFloor.id != 0) 
	{ 
		param.tile = detail.footmark.tile; 
		param.mat = matFloor; 
		param.matColor = 104025f; 
		renderFootmark.Draw(param); 
	} 
	goto IL_7b8d; 
	IL_1683: 
	goto IL_7ba5; 
	IL_169b: 
	if (this.cell.isSlopeEdge)
	{
		float num5 = (float)height * _heightMod.y; 
		float num3 = (float)height * _heightMod.y; 
		orgY = param.y;
		orgZ = param.z;
		param.dir = this.cell.blockDir;

public virtual void DrawTile()

cs
				param.matColor = 104025f;
			}
		}
		for (int j = 0; (float)j < num5 / heightBlockSize; j++) 
		for (int j = 0; (float)j < num3 / heightBlockSize; j++) 
		{
			param.y += ugFix.y;
			param.z += ugFix.z + slopeFixZ * (float)j;
			defBlock.renderData.Draw(param);
			if (this.cell.pcSync && EMono.player.lightPower > 0f)
			{
				float num6 = param.tile; 
				float num4 = param.tile; 
				param.tile = 0f;
				rendererFov.Draw(param);
				param.tile = num6; 
				param.tile = num4; 
			}
		}
		param.y = orgY;

public virtual void DrawTile()

cs
	{
		orgY = param.y;
		orgZ = param.z;
		int num7 = 0; 
		int num5 = 0; 
		if (sourceBlock.tileType.IsFullBlock)
		{
			SourceBlock.Row row3 = sourceBlock;
			num7 = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length]; 
			num5 = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length]; 
		}
		else
		{
			SourceBlock.Row row3 = sourceFloor._defBlock;
			num7 = row3._tiles[this.cell.blockDir % row3._tiles.Length]; 
			num5 = row3._tiles[this.cell.blockDir % row3._tiles.Length]; 
		}
		if (((this.cell.Front.shore / 12) & 1) == 0 && this.cell.Front.sourceFloor.tileType.IsWater && this.cell.Front.height <= height && this.cell.Front.sourceBlock.tileType.RenderWaterBlock)
		{
			param.y = (float)(cz - cx) * screen.tileAlign.y - (this.cell.Front.sourceFloor.tileType.IsDeepWater ? 0.6f : 0.4f) + (float)(int)this.cell.Front.height * _heightMod.y;
			param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
			param.tile = num7 + ((!this.cell.Front.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0); 
			param.tile = num5 + ((!this.cell.Front.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0); 
			rendererWaterBlock.Draw(param);
		}
		if (((this.cell.Right.shore / 12) & 8) == 0 && this.cell.Right.sourceFloor.tileType.IsWater && this.cell.Right.height <= height && this.cell.Right.sourceBlock.tileType.RenderWaterBlock)
		{
			param.y = (float)(cz - cx) * screen.tileAlign.y - (this.cell.Right.sourceFloor.tileType.IsDeepWater ? 0.6f : 0.4f) + (float)(int)this.cell.Right.height * _heightMod.y;
			param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
			param.tile = num7 + ((!this.cell.Right.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0); 
			param.tile = num5 + ((!this.cell.Right.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0); 
			rendererWaterBlock.Draw(param);
		}
		param.y = orgY;

public virtual void DrawTile()

cs
				}
				sourceFloor.renderData.Draw(param);
			}
			int num8 = 0; 
			int num6 = 0; 
			if (isSnowCovered && sourceFloor == FLOOR.sourceSnow && !this.cell.hasDoor)
			{
				if (!this.cell.Right.IsSnowTile && this.cell.Right.topHeight == this.cell.topHeight)
				{
					num8++; 
					num6++; 
				}
				if (!this.cell.Front.IsSnowTile && this.cell.Front.topHeight == this.cell.topHeight)
				{
					num8 += 2; 
					num6 += 2; 
				}
				if (num8 != 0) 
				if (num6 != 0) 
				{
					param.tile = 448 + num8 + 12; 
					param.tile = 448 + num6 + 12; 
					param.z -= 0.1f;
					sourceFloor.renderData.Draw(param);
					param.z += 0.1f;

public virtual void DrawTile()

cs
					}
				}
			}
			if (this.cell.autotile != 0 && sourceFloor.autotile != 0 && (!hasBridge || this.cell.bridgeHeight - this.cell.height > 3) && !this.cell.skipRender && num8 == 0) 
			if (this.cell.autotile != 0 && sourceFloor.autotile != 0 && (!hasBridge || this.cell.bridgeHeight - this.cell.height > 3) && !this.cell.skipRender && num6 == 0) 
			{
				pass = (isWater ? passAutoTileWater : passAutoTile);
				batch = pass.batches[pass.batchIdx];

public virtual void DrawTile()

cs
		}
		if (isWater)
		{
			int num9 = 12; 
			int num10 = this.cell.shore / num9; 
			int num11 = this.cell.shore % num9; 
			int num7 = 12; 
			int num8 = this.cell.shore / num7; 
			int num9 = this.cell.shore % num7; 
			bool isShoreSand = this.cell.isShoreSand;
			if (this.cell.shore != 0)
			{
				Cell cell = ((((uint)num10 & (true ? 1u : 0u)) != 0) ? this.cell.Back : ((((uint)num10 & 2u) != 0) ? this.cell.Right : ((((uint)num10 & 4u) != 0) ? this.cell.Front : this.cell.Left))); 
				Cell cell = ((((uint)num8 & (true ? 1u : 0u)) != 0) ? this.cell.Back : ((((uint)num8 & 2u) != 0) ? this.cell.Right : ((((uint)num8 & 4u) != 0) ? this.cell.Front : this.cell.Left))); 
				if (isShoreSand && !cell.sourceFloor.isBeach)
				{
					cell = ((((uint)num10 & 8u) != 0) ? this.cell.Left : ((((uint)num10 & 4u) != 0) ? this.cell.Front : ((((uint)num10 & 2u) != 0) ? this.cell.Right : this.cell.Back))); 
					cell = ((((uint)num8 & 8u) != 0) ? this.cell.Left : ((((uint)num8 & 4u) != 0) ? this.cell.Front : ((((uint)num8 & 2u) != 0) ? this.cell.Right : this.cell.Back))); 
				}
				if (!cell.IsSnowTile)
				{

public virtual void DrawTile()

cs
						batch.matrices[pass.idx].m03 = param.x;
						batch.matrices[pass.idx].m13 = param.y;
						batch.matrices[pass.idx].m23 = param.z;
						batch.tiles[pass.idx] = 768 + this.cell.shore / num9; 
						batch.tiles[pass.idx] = 768 + this.cell.shore / num7; 
						batch.colors[pass.idx] = param.color;
						batch.matColors[pass.idx] = param.matColor;
						pass.idx++;

public virtual void DrawTile()

cs
						{
							pass.NextBatch();
						}
						num11 = 2; 
						num9 = 2; 
					}
					else
					{
						num11 = cell.sourceFloor.edge; 
						num9 = cell.sourceFloor.edge; 
					}
					param.tile = (24 + num11 / 2) * 32 + num11 % 2 * 16 + num10; 
					param.tile = (24 + num9 / 2) * 32 + num9 % 2 * 16 + num8; 
					rendererShore.Draw(param);
				}
			}
			if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num9) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num9) & (true ? 1u : 0u)) != 0) 
			if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num7) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num7) & (true ? 1u : 0u)) != 0) 
			{
				param.tile = 785f;
				param.matColor = GetColorInt(ref this.cell.BackLeft.matFloor.matColor, this.cell.BackLeft.sourceFloor.colorMod);
				passShore.Add(param);
				Draw(60);
			}
			if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num9) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num9) & (true ? 1u : 0u)) != 0) 
			if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num7) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num7) & (true ? 1u : 0u)) != 0) 
			{
				param.tile = 786f;
				param.matColor = GetColorInt(ref this.cell.BackRight.matFloor.matColor, this.cell.BackRight.sourceFloor.colorMod);
				passShore.Add(param);
				Draw(56);
			}
			if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num9) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num9) & 4u) != 0) 
			if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num7) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num7) & 4u) != 0) 
			{
				param.tile = 787f;
				param.matColor = GetColorInt(ref this.cell.FrontRight.matFloor.matColor, this.cell.FrontRight.sourceFloor.colorMod);
				passShore.Add(param);
				Draw(48);
			}
			if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num9) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num9) & 4u) != 0) 
			if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num7) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num7) & 4u) != 0) 
			{
				param.tile = 788f;
				param.matColor = GetColorInt(ref this.cell.FrontLeft.matFloor.matColor, this.cell.FrontLeft.sourceFloor.colorMod);

public virtual void DrawTile()

cs
			bool flag6 = false;
			if (isShoreSand)
			{
				if (((uint)num10 & (true ? 1u : 0u)) != 0) 
				if (((uint)num8 & (true ? 1u : 0u)) != 0) 
				{
					if (((uint)num10 & 8u) != 0) 
					if (((uint)num8 & 8u) != 0) 
					{
						if ((num10 & 2) == 0 && (num10 & 4) == 0) 
						if ((num8 & 2) == 0 && (num8 & 4) == 0) 
						{
							Draw(16);
						}
						flag6 = true;
					}
					if (((uint)num10 & 2u) != 0) 
					if (((uint)num8 & 2u) != 0) 
					{
						if ((num10 & 8) == 0 && (num10 & 4) == 0) 
						if ((num8 & 8) == 0 && (num8 & 4) == 0) 
						{
							Draw(20);
						}
						flag6 = true;
					}
				}
				if (((uint)num10 & 4u) != 0) 
				if (((uint)num8 & 4u) != 0) 
				{
					if (((uint)num10 & 8u) != 0) 
					if (((uint)num8 & 8u) != 0) 
					{
						if ((num10 & 2) == 0 && (num10 & 1) == 0) 
						if ((num8 & 2) == 0 && (num8 & 1) == 0) 
						{
							Draw(24);
						}
						flag6 = true;
					}
					if (((uint)num10 & 2u) != 0) 
					if (((uint)num8 & 2u) != 0) 
					{
						if ((num10 & 8) == 0 && (num10 & 1) == 0) 
						if ((num8 & 8) == 0 && (num8 & 1) == 0) 
						{
							Draw(28);
						}

public virtual void DrawTile()

cs
					batch = pass.batches[pass.batchIdx];
					batch.tiles[pass.idx] = 608 + waterAnimeIndex % 4;
					batch.matColors[pass.idx] = 104025f;
					if (((uint)(this.cell.shore / num9) & (true ? 1u : 0u)) != 0) 
					if (((uint)(this.cell.shore / num7) & (true ? 1u : 0u)) != 0) 
					{
						if (isShoreSand)
						{

public virtual void DrawTile()

cs
					batch = pass.batches[pass.batchIdx];
					batch.tiles[pass.idx] = 612 + waterAnimeIndex % 4;
					batch.matColors[pass.idx] = 104025f;
					if (((uint)(this.cell.shore / num9) & 8u) != 0) 
					if (((uint)(this.cell.shore / num7) & 8u) != 0) 
					{
						if (isShoreSand)
						{

public virtual void DrawTile()

cs
			param.z += bridgeFix.z;
			param.dir = 0;
			SourceBlock.Row row4 = sourceBridge._bridgeBlock;
			float num12 = (float)(this.cell.bridgeHeight - this.cell.height) * _heightMod.y; 
			float num10 = (float)(this.cell.bridgeHeight - this.cell.height) * _heightMod.y; 
			if (this.cell.sourceFloor.tileType == TileType.Sky)
			{
				num12 += (float)EMono._map.config.skyBlockHeight; 
				num10 += (float)EMono._map.config.skyBlockHeight; 
			}
			int num13 = (int)(num12 / heightBlockSize) + 2; 
			int num11 = (int)(num10 / heightBlockSize) + 2; 
			if (this.cell.bridgePillar != 0)
			{
				row4 = EMono.sources.blocks.rows[this.cell.bridgePillar];
				param.tile = row4._tiles[0] + ((num13 == 2) ? 32 : 0); 
				param.tile = row4._tiles[0] + ((num11 == 2) ? 32 : 0); 
				param.mat = ((sourceBridge.DefaultMaterial == row4.DefaultMaterial) ? sourceBridge.DefaultMaterial : row4.DefaultMaterial);
				param.matColor = ((row4.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, row4.colorMod));
			}

public virtual void DrawTile()

cs
			}
			param.y += ugFixBridgeTop.y;
			param.z += ugFixBridgeTop.z;
			for (int l = 0; l < num13; l++) 
			for (int l = 0; l < num11; l++) 
			{
				if (l == num13 - 1) 
				if (l == num11 - 1) 
				{
					param.y = (float)(cz - cx) * screen.tileAlign.y + (float)height * _heightMod.y + ugFixBridgeBottom.y;
					param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)height * _heightMod.z + ugFixBridgeBottom.z;

public virtual void DrawTile()

cs
	{
		snowed = false;
	}
	int num14 = 0; 
	int num12 = 0; 
	if (sourceBlock.id != 0)
	{
		this.tileType = sourceBlock.tileType;

public virtual void DrawTile()

cs
					roomHeight = 0f;
					break;
				}
				int num15 = ((this.room.data.maxHeight == 0) ? 2 : this.room.data.maxHeight); 
				roomHeight = EMono.setting.render.roomHeightMod * (float)((this.room.lot.height < num15) ? this.room.lot.height : num15) + 0.01f * (float)this.room.lot.heightFix; 
				int num13 = ((this.room.data.maxHeight == 0) ? 2 : this.room.data.maxHeight); 
				roomHeight = EMono.setting.render.roomHeightMod * (float)((this.room.lot.height < num13) ? this.room.lot.height : num13) + 0.01f * (float)this.room.lot.heightFix; 
			}
			break;
		case WallClipMode.ByLot:

public virtual void DrawTile()

cs
		}
		if (!_lowblock && (double)roomHeight > 1.2 && this.tileType.RepeatBlock)
		{
			num14 = 1; 
			num12 = 1; 
		}
		else if (lowBlock)
		{
			num14 = 2; 
			num12 = 2; 
		}
		param.mat = matBlock;
		param.dir = this.cell.blockDir;

public virtual void DrawTile()

cs
				}
				if (!_lowblock)
				{
					int num16 = ((currentRoom.data.maxHeight == 0) ? 2 : currentRoom.data.maxHeight); 
					roomHeight = EMono.setting.render.roomHeightMod * (float)((currentRoom.lot.height < num16) ? currentRoom.lot.height : num16) + 0.01f * (float)currentRoom.lot.heightFix; 
					int num14 = ((currentRoom.data.maxHeight == 0) ? 2 : currentRoom.data.maxHeight); 
					roomHeight = EMono.setting.render.roomHeightMod * (float)((currentRoom.lot.height < num14) ? currentRoom.lot.height : num14) + 0.01f * (float)currentRoom.lot.heightFix; 
				}
			}
			if (flag7)

public virtual void DrawTile()

cs
					param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco2);
					param.matColor = room.lot.colDeco2;
					float y2 = param.y;
					float num17 = param.z; 
					float num15 = param.z; 
					param.y += (float)room.lot.decoFix2 * 0.01f;
					param.z += (float)room.lot.decoFix2 * 0.01f * heightModDeco;
					rendererWallDeco.Draw(param);
					param.y = y2;
					param.z = num17; 
					param.z = num15; 
				}
			}
			room = this.cell.Right.room ?? this.cell.room;

public virtual void DrawTile()

cs
					param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco2) * -1;
					param.matColor = room.lot.colDeco2;
					float y4 = param.y;
					float num18 = param.z; 
					float num16 = param.z; 
					param.y += (float)room.lot.decoFix2 * 0.01f;
					param.z += (float)room.lot.decoFix2 * 0.01f * heightModDeco;
					rendererWallDeco.Draw(param);
					param.y = y4;
					param.z = num18; 
					param.z = num16; 
				}
			}
			break;

public virtual void DrawTile()

cs
					}
					else
					{
						int num19 = ((room4.data.maxHeight == 0) ? 2 : room4.data.maxHeight); 
						roomHeight = EMono.setting.render.roomHeightMod * (float)((room4.lot.height < num19) ? room4.lot.height : num19) + 0.01f * (float)room4.lot.heightFix; 
						int num17 = ((room4.data.maxHeight == 0) ? 2 : room4.data.maxHeight); 
						roomHeight = EMono.setting.render.roomHeightMod * (float)((room4.lot.height < num17) ? room4.lot.height : num17) + 0.01f * (float)room4.lot.heightFix; 
					}
				}
				Cell back2 = this.cell.Back;

public virtual void DrawTile()

cs
			RenderData renderData2 = sourceBlock.renderData;
			param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
			param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
			int num20 = this.cell.objDir + ((this.cell.objDir >= 7) ? this.cell.objDir : 0) + 1; 
			if (num20 == 0) 
			int num18 = this.cell.objDir + ((this.cell.objDir >= 7) ? this.cell.objDir : 0) + 1; 
			if (num18 == 0) 
			{
				renderData2.Draw(param);
			}
			else
			{
				renderData2.DrawRepeat(param, num20, sourceBlock.tileType.RepeatSize); 
				renderData2.DrawRepeat(param, num18, sourceBlock.tileType.RepeatSize); 
			}
			param.tile = renderData2.idShadow;
			SourcePref shadowPref2 = renderData2.shadowPref;
			int shadow4 = shadowPref2.shadow; 
			passShadow.AddShadow(param.x + renderData2.offsetShadow.x, param.y + renderData2.offsetShadow.y, param.z + renderData2.offsetShadow.z, ShadowData.Instance.items[shadow4], shadowPref2, 0, param.snow); 
			int shadow3 = shadowPref2.shadow; 
			passShadow.AddShadow(param.x + renderData2.offsetShadow.x, param.y + renderData2.offsetShadow.y, param.z + renderData2.offsetShadow.z, ShadowData.Instance.items[shadow3], shadowPref2, 0, param.snow); 
			break;
		}
		default:

public virtual void DrawTile()

cs
	{
		if (this.cell.room != null || !this.cell.IsRoomEdge || !showRoof)
		{
			goto IL_6f72; 
			goto IL_6f8a; 
		}
		if (this.cell._block == 0 || !this.cell.sourceBlock.tileType.RepeatBlock)
		{
			Room obj = this.cell.FrontRight.room;
			if (obj == null || !obj.HasRoof)
			{
				goto IL_6f72; 
				goto IL_6f8a; 
			}
		}
	}
	goto IL_6fd2; 
	IL_6f72: 
	goto IL_6fea; 
	IL_6f8a: 
	if (!showRoof || !roof || this.cell.room == null || this.cell.Front.room == null || this.cell.Right.room == null)
	{
		param.tile = num14; 
		param.tile = num12; 
		rendererFov.Draw(param);
	}
	goto IL_6fd2; 
	IL_7b8d: 
	goto IL_6fea; 
	IL_7ba5: 
	if (detail.things.Count == 0 && detail.charas.Count == 0)
	{
		return;
	}
	int num21 = 0; 
	int num19 = 0; 
	thingPos.x = 0f;
	thingPos.y = 0f;
	thingPos.z = 0f;

public virtual void DrawTile()

cs
	}
	Thing thing = null;
	bool shadow = liquidLv == 0;
	float num22 = 0f; 
	float num23 = 0f; 
	float num20 = 0f; 
	float num21 = 0f; 
	bool flag10 = false;
	float num24 = 0f; 
	float num22 = 0f; 
	bool flag11 = false;
	float num25 = 0f; 
	float num23 = 0f; 
	if (detail.things.Count > 0 && isSeen)
	{
		_ = zSetting.max1;
		float num26 = 0f; 
		float num24 = 0f; 
		for (int m = 0; m < detail.things.Count; m++)
		{
			Thing t = detail.things[m];

public virtual void DrawTile()

cs
			{
				pref = rendererObjDummy.shadowPref;
			}
			float num27 = ((tileType.UseMountHeight && isInstalled) ? 0f : ((pref.height < 0f) ? 0f : ((pref.height == 0f) ? 0.1f : pref.height))); 
			float num25 = ((tileType.UseMountHeight && isInstalled) ? 0f : ((pref.height < 0f) ? 0f : ((pref.height == 0f) ? 0.1f : pref.height))); 
			if (t.ignoreStackHeight)
			{
				thingPos.y -= num22; 
				thingPos.y -= num20; 
			}
			shadow = thingPos.y < 0.16f && num25 < 0.16f; 
			shadow = thingPos.y < 0.16f && num23 < 0.16f; 
			_ = pref.bypassShadow;
			param.shadowFix = 0f - thingPos.y;
			param.liquidLv = ((thingPos.y + (float)t.altitude < 0.1f) ? liquidLv : 0);

public virtual void DrawTile()

cs
				SetRoofHeight(param, this.cell, cx, cz);
				_actorPos.x = param.x;
				_actorPos.y = param.y;
				_actorPos.z = param.z + num26; 
				_actorPos.z = param.z + num24; 
				if (this.room != null)
				{
					param.color = GetRoofLight(this.room.lot);

public virtual void DrawTile()

cs
			else
			{
				param.snow = snowed;
				_actorPos.x = orgX + num23; 
				_actorPos.x = orgX + num21; 
				_actorPos.y = orgY;
				_actorPos.z = orgZ + num26 + thingPos.z; 
				_actorPos.z = orgZ + num24 + thingPos.z; 
				if (tileType.CanStack || !isInstalled)
				{
					if (thing?.id != t.id)

public virtual void DrawTile()

cs
					_actorPos.y += thingPos.y;
					if (t.trait.IgnoreLastStackHeight && (thing == null || !thing.trait.IgnoreLastStackHeight))
					{
						thingPos.y -= num22; 
						thingPos.y -= num20; 
						if (thing != null)
						{
							_actorPos.z -= 0.2f;
							thingPos.z -= 0.2f;
						}
						_actorPos.y -= num22; 
						_actorPos.y -= num20; 
					}
					_actorPos.z += renderSetting.thingZ + (float)m * -0.01f + zSetting.mod1 * thingPos.y;
				}

public virtual void DrawTile()

cs
						freePos.z += rampFix2.z;
						if (!this.cell.IsTopWater || t.altitude > 0)
						{
							num25 += rampFix2.y; 
							num23 += rampFix2.y; 
						}
						liquidLv -= (int)(rampFix2.y * 150f);
						if (liquidLv < 0)

public virtual void DrawTile()

cs
					}
					else if (!flag11 && t.trait.IsChangeFloorHeight && !t.ignoreStackHeight)
					{
						orgY += num27 + (float)t.altitude * altitudeFix.y; 
						orgY += num25 + (float)t.altitude * altitudeFix.y; 
						orgZ += (float)t.altitude * altitudeFix.z;
						freePos.y += num27 + (float)t.altitude * altitudeFix.y; 
						freePos.y += num25 + (float)t.altitude * altitudeFix.y; 
						if (!this.cell.IsTopWater || t.altitude > 0)
						{
							num25 += num27 + (float)t.altitude * altitudeFix.y; 
							num23 += num25 + (float)t.altitude * altitudeFix.y; 
						}
						_actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
						_actorPos.z += pref.z;

public virtual void DrawTile()

cs
					}
					else
					{
						thingPos.y += num27; 
						thingPos.y += num25; 
						_actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
						_actorPos.z += pref.z;
						if (pref.height >= 0f)

public virtual void DrawTile()

cs
				}
				else
				{
					thingPos.y += num27; 
					thingPos.y += num25; 
					_actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
					_actorPos.z += pref.z;
					thingPos.z += pref.z;

public virtual void DrawTile()

cs
				if (t.isFloating && isWater && !hasBridge && !flag)
				{
					flag = true;
					float num28 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
					orgY += 0.01f * floatY - num28; 
					float num26 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
					orgY += 0.01f * floatY - num26; 
					if (!t.trait.IsChangeFloorHeight)
					{
						num24 = num27; 
						num22 = num25; 
					}
					_actorPos.y += 0.01f * floatY - num28; 
					_actorPos.y += 0.01f * floatY - num26; 
					if (liquidLv > 10)
					{
						liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;

public virtual void DrawTile()

cs
					}
					param.liquidLv = liquidLv;
				}
				num22 = num27; 
				num20 = num25; 
				if (t.sourceCard.multisize && !t.trait.IsGround)
				{
					num26 += zSetting.multiZ; 
					num24 += zSetting.multiZ; 
				}
				orgZ += t.renderer.data.stackZ;
				if (param.liquidLv > 0)

public virtual void DrawTile()

cs
			{
				if (iconMode != 0)
				{
					int num29 = 0; 
					int num27 = 0; 
					switch (iconMode)
					{
					case CardIconMode.Visibility:
						if (t.isMasked)
						{
							num29 = 17; 
							num27 = 17; 
						}
						break;
					case CardIconMode.State:
						if (t.placeState == PlaceState.installed)
						{
							num29 = 18; 
							num27 = 18; 
						}
						break;
					case CardIconMode.Deconstruct:
						if (t.isDeconstructing)
						{
							num29 = 14; 
							num27 = 14; 
						}
						break;
					}
					if (t.isNPCProperty && !EMono.debug.godBuild)
					{
						num29 = 13; 
						num27 = 13; 
					}
					if (num29 != 0) 
					if (num27 != 0) 
					{
						passGuideBlock.Add(_actorPos.x, _actorPos.y, _actorPos.z - 10f, num29); 
						passGuideBlock.Add(_actorPos.x, _actorPos.y, _actorPos.z - 10f, num27); 
					}
				}
				t.SetRenderParam(param);

public virtual void DrawTile()

cs
			}
			if (isInstalled)
			{
				num23 += pref.stackX * (float)((!t.flipX) ? 1 : (-1)); 
				num21 += pref.stackX * (float)((!t.flipX) ? 1 : (-1)); 
			}
			param.x = orgX;
			param.y = orgY;

public virtual void DrawTile()

cs
			}
		}
	}
	orgY += num24; 
	orgY += num22; 
	if (detail.charas.Count <= 0)
	{
		return;
	}
	param.shadowFix = 0f - num25; 
	param.shadowFix = 0f - num23; 
	param.color += 1310720f;
	float max = zSetting.max2;
	for (int n = 0; n < detail.charas.Count; n++)

public virtual void DrawTile()

cs
				{
					Vector3 position = restrainer.owner.renderer.position;
					float defCharaHeight = EMono.setting.render.defCharaHeight;
					float num30 = getRestrainPos.y + defCharaHeight - ((chara.Pref.height == 0f) ? defCharaHeight : chara.source.pref.height); 
					float num28 = getRestrainPos.y + defCharaHeight - ((chara.Pref.height == 0f) ? defCharaHeight : chara.source.pref.height); 
					_actorPos.x = position.x + getRestrainPos.x * (float)((restrainer.owner.dir % 2 == 0) ? 1 : (-1));
					_actorPos.y = position.y + num30; 
					_actorPos.y = position.y + num28; 
					_actorPos.z = position.z + getRestrainPos.z;
					param.liquidLv = 0;
					param.shadowFix = orgY - _actorPos.y;

public virtual void DrawTile()

cs
		{
			if (chara.IsDeadOrSleeping && chara.IsPCC)
			{
				float num31 = chara.renderer.data.size.y * 0.3f; 
				float num29 = chara.renderer.data.size.y * 0.3f; 
				if (thingPos.y > max)
				{
					thingPos.y = max;
				}
				float num32 = thingPos.y + num31; 
				float num33 = (float)n * -0.01f; 
				if (num32 > zSetting.thresh1) 
				float num30 = thingPos.y + num29; 
				float num31 = (float)n * -0.01f; 
				if (num30 > zSetting.thresh1) 
				{
					num33 = zSetting.mod1; 
					num31 = zSetting.mod1; 
				}
				_actorPos.x += thingPos.x;
				_actorPos.y += thingPos.y;
				_actorPos.z += renderSetting.laydownZ + num33; 
				_actorPos.z += renderSetting.laydownZ + num31; 
				param.liquidLv = ((thingPos.y == 0f && liquidLv > 0) ? 90 : 0);
				thingPos.y += num31 * 0.8f; 
				thingPos.y += num29 * 0.8f; 
				chara.renderer.Draw(param, ref _actorPos, liquidLv == 0);
			}
			else

public virtual void DrawTile()

cs
				{
					if (chara.Pref.FloatUnderwater)
					{
						float num34 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
						float num35 = floatYs[chara.uid % 10] + 10f + (float)(chara.uid % 30); 
						orgY += 0.01f * num35 - num34; 
						_actorPos.y += 0.01f * num35 - num34; 
						param.shadowFix -= 0.01f * num35 - num34; 
						float num32 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
						float num33 = floatYs[chara.uid % 10] + 10f + (float)(chara.uid % 30); 
						orgY += 0.01f * num33 - num32; 
						_actorPos.y += 0.01f * num33 - num32; 
						param.shadowFix -= 0.01f * num33 - num32; 
					}
				}
				else if (liquidLv > 0)

public virtual void DrawTile()

cs
					{
						if (liquidLv > 20)
						{
							float num36 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
							orgY += 0.01f * floatY - num36; 
							_actorPos.y += 0.01f * floatY - num36; 
							int num37 = TileType.FloorWaterShallow.LiquidLV * 10; 
							num37 -= (int)(floatY * 0.5f); 
							param.liquidLv = num37; 
							float num34 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight); 
							orgY += 0.01f * floatY - num34; 
							_actorPos.y += 0.01f * floatY - num34; 
							int num35 = TileType.FloorWaterShallow.LiquidLV * 10; 
							num35 -= (int)(floatY * 0.5f); 
							param.liquidLv = num35; 
						}
						else
						{

public virtual void DrawTile()

cs
				}
				if (!chara.IsPC && !chara.renderer.IsMoving && detail.charas.Count > 1 && (detail.charas.Count != 2 || !detail.charas[0].IsDeadOrSleeping || !detail.charas[0].IsPCC))
				{
					_actorPos += renderSetting.charaPos[1 + ((num21 < 4) ? num21 : 3)]; 
					_actorPos += renderSetting.charaPos[1 + ((num19 < 4) ? num19 : 3)]; 
				}
				_actorPos.z += 0.01f * (float)n + renderSetting.charaZ;
				num21++; 
				num19++; 
				if (flag10)
				{
					_actorPos.z += chara.renderer.data.hangedFixZ;

public virtual void DrawTile()

cs
		param.y = orgY;
		param.z = orgZ;
	}
	return; 
	IL_6fea: 
	if (isSnowCovered && (sourceBlock.id != 0 || this.cell.hasDoor) && !snowed && !this.cell.isClearSnow && ((!this.cell.Front.HasRoof && !this.cell.Front.HasBlock) || (!this.cell.Right.HasRoof && !this.cell.Right.HasBlock))) 
	{ 
		snowed = true; 
	} 
	if (this.cell.effect != null) 
	{ 
		if (this.cell.effect.IsLiquid) 
		{ 
			SourceCellEffect.Row sourceEffect = this.cell.sourceEffect; 
			SourceMaterial.Row defaultMaterial = sourceEffect.DefaultMaterial; 
			tile = 4 + Rand.bytes[index % Rand.MaxBytes] % 4; 
			param.tile = tile + this.cell.sourceEffect._tiles[0]; 
			param.mat = defaultMaterial; 
			param.matColor = ((this.cell.effect.color == 0) ? GetColorInt(ref defaultMaterial.matColor, sourceEffect.colorMod) : this.cell.effect.color); 
			sourceEffect.renderData.Draw(param); 
		} 
		else
		{ 
			param.tile = this.cell.effect.source._tiles[0]; 
			SourceCellEffect.Row sourceEffect2 = this.cell.sourceEffect; 
			if (sourceEffect2.anime.Length != 0) 
			{ 
				if (sourceEffect2.anime.Length > 2) 
				{ 
					float num36 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[2]; 
					if (!(num36 >= (float)sourceEffect2.anime[0])) 
					{ 
						param.tile += num36; 
					} 
				} 
				else
				{ 
					float num37 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[0]; 
					param.tile += num37; 
				} 
			} 
			if (this.cell.effect.IsFire) 
			{ 
				rendererEffect.Draw(param); 
			} 
			else
			{ 
				this.cell.effect.source.renderData.Draw(param); 
			} 
		} 
	} 
	param.color = floorLight; 
	if (this.cell.critter != null) 
	{ 
		Critter critter = this.cell.critter; 
		int snowTile = critter.tile; 
		if (snowed && critter.SnowTile != 0) 
		{ 
			critter.x = 0.06f; 
			critter.y = -0.06f; 
			snowTile = critter.SnowTile; 
		} 
		else
		{ 
			critter.Update(); 
		} 
		pass = passObjSS; 
		batch = pass.batches[pass.batchIdx]; 
		batch.matrices[pass.idx].m03 = param.x + (float)(int)(critter.x * 100f) * 0.01f; 
		batch.matrices[pass.idx].m13 = param.y + (float)(int)(critter.y * 100f) * 0.01f; 
		batch.matrices[pass.idx].m23 = param.z; 
		batch.tiles[pass.idx] = snowTile * ((!critter.reverse) ? 1 : (-1)); 
		batch.colors[pass.idx] = floorLight; 
		pass.idx++; 
		if (pass.idx == pass.batchSize) 
		{ 
			pass.NextBatch(); 
		} 
	} 
	if (detail != null) 
	{ 
		TransAnime anime3 = detail.anime; 
		if (anime3 != null && !anime3.animeBlock) 
		{ 
			TransAnime anime4 = detail.anime; 
			param.x += anime4.v.x; 
			param.y += anime4.v.y; 
			param.z += anime4.v.z; 
		} 
	} 
	if (this.cell.obj != 0 && !this.cell.sourceObj.renderData.SkipOnMap) 
	{ 
		SourceObj.Row sourceObj = this.cell.sourceObj; 
		if (!snowed || sourceObj.snowTile <= 0) 
		{ 
			param.snow = snowed; 
			param.mat = this.cell.matObj; 
			orgY = param.y; 
			if (param.liquidLv > 0) 
			{ 
				if (sourceObj.pref.Float) 
				{ 
					param.y += 0.01f * floatY; 
					if (liquidLv > 10) 
					{ 
						liquidLv = TileType.FloorWaterShallow.LiquidLV * 10; 
					} 
					liquidLv -= (int)(floatY * 0.5f); 
					param.liquidLv = liquidLv; 
				} 
				if (sourceObj.tileType.IsWaterTop) 
				{ 
					param.liquidLv = 0; 
				} 
				else
				{ 
					param.liquidLv += sourceObj.pref.liquidMod; 
					if (param.liquidLv < 1) 
					{ 
						param.liquid = 1f; 
					} 
					else if (param.liquidLv > 99 + sourceObj.pref.liquidModMax) 
					{ 
						param.liquidLv = 99 + sourceObj.pref.liquidModMax; 
					} 
				} 
			} 
			if (sourceObj.useAltColor) 
			{ 
				param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, sourceObj.colorMod)); 
			} 
			else
			{ 
				param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, sourceObj.colorMod)); 
			} 
			if (sourceObj.HasGrowth) 
			{ 
				this.cell.growth.OnRenderTileMap(param); 
				if (this.cell.obj == 118 && Core.fixedFrame % 10f == 0f && sourceObj.growth.IsMature) 
				{ 
					EMono.scene.psFey.transform.position = new Vector3(param.x, param.y, param.z - 2f); 
					EMono.scene.psFey.Emit(1); 
				} 
			} 
			else
			{ 
				if (this.cell.autotileObj != 0) 
				{ 
					param.tile = sourceObj._tiles[0] + this.cell.autotileObj; 
				} 
				else if (sourceObj.tileType.IsUseBlockDir) 
				{ 
					param.tile = sourceObj._tiles[this.cell.blockDir % sourceObj._tiles.Length]; 
				} 
				else
				{ 
					param.tile = sourceObj._tiles[this.cell.objDir % sourceObj._tiles.Length]; 
				} 
				if (_lowblock && sourceObj.tileType.IsSkipLowBlock) 
				{ 
					param.tile += ((param.tile > 0f) ? 1 : (-1)) * 3000000; 
				} 
				orgY = param.y; 
				orgZ = param.z; 
				param.y += sourceObj.pref.y; 
				param.z += sourceObj.pref.z; 
				sourceObj.renderData.Draw(param); 
				param.y = orgY; 
				param.z = orgZ; 
				int shadow4 = sourceObj.pref.shadow; 
				if (shadow4 > 1 && !this.cell.ignoreObjShadow) 
				{ 
					passShadow.AddShadow(param.x + sourceObj.renderData.offsetShadow.x, param.y + sourceObj.renderData.offsetShadow.y, param.z + sourceObj.renderData.offsetShadow.z, ShadowData.Instance.items[shadow4], sourceObj.pref, 0, param.snow); 
				} 
				param.y = orgY; 
			} 
		} 
	} 
	if (this.cell.decal != 0 && sourceFloor.tileType.AllowBlood) 
	{ 
		passDecal.Add(param, (int)this.cell.decal, floorLight); 
	} 
	if (highlightCells) 
	{ 
		switch (ActionMode.FlagCell.mode) 
		{ 
		case AM_FlagCell.Mode.flagWallPillar: 
			if (this.cell.isToggleWallPillar) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagSnow: 
			if (this.cell.isClearSnow) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagFloat: 
			if (this.cell.isForceFloat) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		case AM_FlagCell.Mode.flagClear: 
			if (this.cell.isClearArea) 
			{ 
				passArea.Add(param, 34f, 0f); 
			} 
			break; 
		} 
	} 
	if (detail == null) 
	{ 
		return; 
	} 
	if (highlightArea && detail.area != null) 
	{ 
		passArea.Add(param, (int)detail.area.GetTile(index) - ((!subtleHighlightArea) ? 1 : 0), 0f); 
	} 
	if (detail.footmark != null && sourceFloor.id != 0) 
	{ 
		param.tile = detail.footmark.tile; 
		param.mat = matFloor; 
		param.matColor = 104025f; 
		renderFootmark.Draw(param); 
	} 
	goto IL_7ba5; 
	void Draw(int tile)
	{
		pass = passEdge;

Card

private void _OnSerializing(StreamingContext context)

cs
		_ints[0] = _bits1.ToInt();
		_ints[2] = _bits2.ToInt();
		_placeState = placeState;
		version = 2; 
		OnSerializing();
	}

protected virtual void OnSerializing()

cs
[OnDeserialized]
private void _OnDeserialized(StreamingContext context)
{
	if (version < 2) 
	if (version < 2 && sockets != null) 
	{
		if (sockets != null) 
		for (int i = 0; i < sockets.Count; i++) 
		{
			for (int i = 0; i < sockets.Count; i++) 
			{ 
				sockets[i] = sockets[i] / 100 * 1000 + sockets[i] % 100; 
			} 
			sockets[i] = sockets[i] / 100 * 1000 + sockets[i] % 100; 
		}
		version = 2; 
	}
	_bits1.SetInt(_ints[0]);
	_bits2.SetInt(_ints[2]);

private void _OnDeserialized(StreamingContext context)

cs
		{
			isDestroyed = true;
		}
		if (version < 3) 
		{ 
			if (version < 3 && isChara && HasElement(1210)) 
			{ 
				elements.ModBase(960, -5 * Evalue(1210)); 
			} 
			version = 3; 
		} 
	}

	protected virtual void OnDeserialized()

public void Create(string _id, int _idMat = -1, int genLv = -1)

cs
	EClass.game.cards.AssignUID(this);
	this.genLv = genLv;
	isNew = true;
	version = 3; 
	SetSource();
	OnBeforeCreate();
	if (sourceCard.quality != 0)

public void PurgeDuplicateArtifact(Thing af)

cs
		}
	}

	public void PurgeEythArtifact() 
	{ 
		if (!EClass.pc.IsEyth || !EClass.pc.HasElement(1228)) 
		{ 
			return; 
		} 
		List<Chara> list = new List<Chara>(); 
		foreach (FactionBranch child in EClass.pc.faction.GetChildren()) 
		{ 
			foreach (Chara member in child.members) 
			{ 
				list.Add(member); 
			} 
		} 
		foreach (Chara chara in EClass._map.charas) 
		{ 
			list.Add(chara); 
		} 
		foreach (Chara item in list) 
		{ 
			if (item.IsPCFactionOrMinion) 
			{ 
				Thing thing = item.things.Find((Thing t) => t.HasTag(CTAG.godArtifact) && t.c_idDeity == "eyth"); 
				if (thing != null) 
				{ 
					PurgeDuplicateArtifact(thing); 
				} 
				break; 
			} 
		} 
	} 
	public void RemoveThings()
	{
		for (int num = things.Count - 1; num >= 0; num--)

public void DamageHP(long dmg, int ele, int eleP = 100, AttackSource attackSourc

cs
			}
			foreach (Chara chara5 in EClass._map.charas)
			{
				if (Chara.IsFriendOrAbove(chara5) && chara5.HasElement(1408) && chara5.faith == EClass.game.religions.Healing && EClass.world.date.GetRawDay() != chara5.GetInt(58) && (!chara5.IsPCFaction || IsPCFaction)) 
				if (Chara.IsFriendOrAbove(chara5) && chara5.HasElement(1408) && chara5.faith == EClass.game.religions.Healing && EClass.world.date.GetRawDay() != chara5.GetInt(58) && (!chara5.IsPCFaction || IsPCFaction) && (chara5.memberType != FactionMemberType.Livestock || Chara.memberType == FactionMemberType.Livestock)) 
				{
					Msg.alwaysVisible = true;
					Msg.Say("layhand", chara5, this);

Chara

public class Chara : Card, IPathfindWalker

cs

	public bool visibleWithTelepathy;

	public bool isWeakToSunlight; 
	public SpriteReplacer spriteReplacer;

	private Faction _faction;

public void Refresh(bool calledRecursive = false)

cs
	isWet = false;
	_isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
	canSeeInvisible = HasElement(416);
	isWeakToSunlight = HasElement(1250) && !HasElement(431); 
	base.isHidden = HasElement(415);
	foreach (Condition condition in conditions)
	{

public void TickConditions()

cs
		}
		break;
	}
	case 5:
	case 30:
		if (isWeakToSunlight && pos.IsSunLit) 
		{ 
			AddCondition<ConBurning>(1000, force: true); 
		} 
		break; 
	}
	if (turn % 200 == 0)
	{

public void Sleep(Thing bed = null, Thing pillow = null, bool pickup = false, It

cs

	public void OnSleep(Thing bed = null, int days = 1)
	{
		bool isSunLit = pos.IsSunLit; 
		TraitPillow traitPillow = pos.FindThing<TraitPillow>();
		int num = bed?.Power ?? 20;
		if (traitPillow != null)

public void OnSleep(Thing bed = null, int days = 1)

cs
		if (bed != null)
		{
			num += bed.Evalue(750) * 5;
			if (bed.trait is TraitBedCoffin) 
			{ 
				isSunLit = false; 
			} 
		}
		OnSleep(num, days); 
		OnSleep(num, days, isSunLit); 
	}

	public void OnSleep(int power, int days = 1) 
	public void OnSleep(int power, int days = 1, bool isSunLit = false) 
	{
		if (days < 1)
		{

public void OnSleep(int power, int days = 1)

cs
	{
		stamina.Set(1);
	}
	HealHP(num); 
	stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100); 
	mana.Mod(num); 
	if (isWeakToSunlight && isSunLit) 
	{ 
		base.hp = 0; 
		if (mana.value > 0) 
		{ 
			mana.Set(0); 
		} 
		AddCondition<ConBurning>(1000, force: true); 
	} 
	else
	{ 
		HealHP(num); 
		stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100); 
		mana.Mod(num); 
	} 
	if (IsPCFaction)
	{
		hunger.Mod(20);

ConSleep

public static void SuccubusVisit(Chara tg)

cs
		chara.SetAI(new AI_Fuck
		{
			target = tg,
			succubus = true
			variation = AI_Fuck.Variation.Succubus 
		});
	}
}

ConTransmute

public class ConTransmute : BaseBuff

cs
{
	public override bool IsToggle => true;

	public override bool ShouldRefresh => true; 
	public override void Tick()
	{
		if (owner.host == null && owner.conSleep == null && (EClass.pc.conSleep == null || EClass.pc.conSleep.pcSleep == 0))

ConTransmuteBat

public class ConTransmuteBat : ConTransmute

cs
public class ConTransmuteBat : ConTransmute
{
	public override bool HasDuration => false; 
	public override RendererReplacer GetRendererReplacer()
	{
		return RendererReplacer.CreateFrom("bat_vampire"); 
		return RendererReplacer.CreateFrom("bat"); 
	} 
	public override void Tick() 
	{ 
	}
}

ContentConfigTest

public class ContentConfigTest : ContentConfig

cs

	public Slider sliderBrightness;

	public Slider sliderExtraHeight; 
	public override void OnInstantiate()
	{
		List<SkinRootStatic> mainSkins = EClass.ui.skins.mainSkins;

public override void OnInstantiate()

cs
			}
			return Lang.Get("brightnessNight") + "(" + (int)(a + 100f) + "%)";
		});
		SetSlider(sliderExtraHeight, base.config.test.screenExtraHeight, delegate(float a) 
		{ 
			base.config.test.screenExtraHeight = (int)a; 
			base.config.ApplyGrading(); 
			return Lang.Get("screenExtraHeight") + "(" + (int)a + ")"; 
		}); 
	}
}

CoreConfig

public class Test

cs

		public int extraToneMTP;

		public int screenExtraWidth; 
		public int screenExtraHeight; 
		public bool showNumbers;

		public bool stackNumbers;

CoreDebug

public void UpdateInput()

cs
		Chara targetChara = EClass.scene.mouseTarget.TargetChara;
		if (targetChara != null)
		{
			EClass.pc.Pick(CraftUtil.MakeLoveLunch(targetChara)); 
			EClass.pc.Pick(CraftUtil.MakeDarkSoup()); 
			EClass.pc.Pick(targetChara.MakeMilk()); 
			EClass.pc.Pick(targetChara.MakeGene()); 
			EClass.pc.Pick(targetChara.MakeBraineCell()); 
			EClass.pc.Pick(targetChara.MakeEgg(effect: true, 10)); 
			targetChara.ModAffinity(EClass.pc, 10000); 
			EClass.pc.Pick(CraftUtil.MakeBloodMeal(EClass.pc, targetChara)); 
		}
		targetChara.ScaleByPrincipal();
		if (EClass.game.quests.Get<QuestDebt>() == null)

CraftUtil

public static void MakeDish(Thing food, int lv, Chara crafter = null)

cs
		}
	}

	public static Thing MakeBloodMeal(Chara sucker, Chara feeder) 
	{ 
		int lV = feeder.LV; 
		lV = lV / 10 * 10 + 10; 
		Rand.SetSeed(EClass.game.seed + feeder.uid); 
		Thing thing = ThingGen.CreateFromCategory("meal", lV); 
		sucker.Say("food_blood", thing); 
		Rand.SetSeed(EClass.game.seed + feeder.uid); 
		MakeDish(thing, lV); 
		Rand.SetSeed(); 
		if (thing.HasElement(708)) 
		{ 
			thing.elements.Remove(708); 
		} 
		thing.elements.ModBase(710, 1); 
		return thing; 
	} 
	public static Thing MakeDarkSoup()
	{
		Thing thing = ThingGen.Create("soup_dark");

DNA

void AddAction()

cs
		if (model.ability.list.items.Count != 0)
		{
			ActList.Item a = model.ability.list.items.RandomItem();
			if (!(a.act.source.category != "ability")) 
			if (!(a.act.source.category != "ability") && a.act.source.geneSlot >= 0) 
			{
				AddVal(a.act.source.id, a.chance * ((!a.pt) ? 1 : (-1)), allowStack: false, (int v) => 8 + a.act.source.cost[0] / 10 * 2);
				action++;

DOMAIN

``

cs

public class DOMAIN
{
	public const int domComm = 805; 
	public const int domElement = 806; 
	public const int domFaith = 802; 

	public const int domSurvival = 801;

	public const int domTest = 800;

	public const int domArcane = 804; 
	public const int domFaith = 802; 
	public const int domElement = 806; 

	public const int domMiracle = 803;

	public const int domArcane = 804; 
	public const int domComm = 805; 
	public const int domWind = 807;

	public const int domHarvest = 808;

public class DOMAIN

cs

	public static readonly int[] IDS = new int[16]
	{
		805, 806, 801, 800, 804, 802, 803, 807, 808, 810, 
		802, 801, 800, 806, 803, 804, 805, 807, 808, 810, 
		811, 812, 813, 814, 815, 809
	};
}

ELEMENT

public class ELEMENT

cs

	public const int _void = 0;

	public const int poison = 20; 
	public const int old_antidote = 25; 
	public const int piety = 85; 

	public const int race = 29;

	public const int piety = 85; 
	public const int cure = 26; 

	public const int old_heal = 24;

public class ELEMENT

cs

	public const int heat = 16;

	public const int cure = 26; 
	public const int water = 15; 
	public const int poison = 20; 

	public const int hardness = 13; 
	public const int growth = 14; 

	public const int size = 12; 
	public const int lv = 1; 

	public const int weight = 11; 
	public const int water = 15; 

	public const int nutrition = 10; 
	public const int d = 3; 

	public const int socket = 5;

	public const int d = 3; 
	public const int quality = 2;

	public const int lv = 1; 
	public const int weight = 11; 

	public const int growth = 14; 
	public const int size = 12; 

	public const int old_antidote = 25; 
	public const int hardness = 13; 
	public const int nutrition = 10; 

	public static readonly int[] IDS = new int[36]
	{
		752, 753, 754, 755, 756, 762, 760, 761, 763, 765,
		751, 759, 750, 0, 20, 29, 85, 24, 23, 22, 
		21, 18, 17, 16, 26, 15, 13, 12, 11, 10, 
		5, 3, 2, 1, 14, 25
		751, 759, 750, 0, 25, 85, 29, 26, 24, 23, 
		22, 21, 18, 17, 16, 20, 14, 1, 15, 3, 
		5, 2, 11, 12, 13, 10
	};
}
public class Element : EClass

public int GetSortVal(UIList.SortMode m)

cs
			}
			return id;
		default:
			return source.id; 
			if (source.sort == 0) 
			{ 
				return source.id; 
			} 
			return source.sort; 
		}
	}

ENC

public class ENC

cs
public class ENC
{
	public const int innocence = 418; 
	public const int encTail = 419; 
	public const int negateBlind = 421; 

	public const int negateParalysis = 422; 
	public const int invisibility = 415; 

	public const int seeInvisible = 416;

	public const int invisibility = 415; 
	public const int loving = 417; 

	public const int negatePoison = 420; 
	public const int innocence = 418; 

	public const int encHit = 414;

	public const int loving = 417; 
	public const int encTail = 419; 

	public const int encRagnarok = 667; 
	public const int negatePoison = 420; 

	public const int absorbHP = 660; 
	public const int negateParalysis = 422; 
	public const int negateSleep = 424; 
	public const int meleeDistance = 666; 

	public const int planter = 665;

public class ENC

cs

	public const int slowCorruption = 412;

	public const int permaCurse = 656; 
	public const int absorbHP = 660; 

	public const int meleeDistance = 666; 
	public const int encRagnarok = 667; 

	public const int encSpell = 411;

	public const int redirect_blaser = 383; 
	public const int negateTeleport = 400; 

	public const int corruption = 409;

	public const int negateBlind = 421; 
	public const int negateFear = 423; 

	public const int convertImpact = 865;

public class ENC

cs

	public const int rusher = 382;

	public const int onlyPet = 655; 
	public const int redirect_blaser = 383; 

	public const int negateTeleport = 400; 
	public const int permaCurse = 656; 

	public const int levitation = 401;

public class ENC

cs

	public const int throwReturn = 410;

	public const int noDamage = 654; 
	public const int onlyPet = 655; 

	public const int convertFire = 850;

	public const int eco = 652; 
	public const int sustain_MAG = 446; 
	public const int living = 653; 

	public const int sustain_CHA = 447;

public class ENC

cs

	public const int bane_fish = 467;

	public const int strongStomach = 480; 
	public const int bane_all = 468; 

	public const int revealFaith = 481; 
	public const int strongStomach = 480; 

	public const int force_weapon = 482;

	public const int optimizeMana = 483;

	public const int sustain_WIL = 445; 
	public const int slot_rune = 484;

	public const int sustain_LER = 444; 
	public const int sustain_MAG = 446; 

	public const int sustain_DEX = 442; 
	public const int nonLethal = 485; 

	public const int living = 653; 
	public const int sustain_WIL = 445; 

	public const int negateSleep = 424; 
	public const int sustain_PER = 443; 

	public const int negateConfusion = 425; 
	public const int noDamage = 654; 

	public const int negateSteal = 426;

public class ENC

cs

	public const int negateShockwave = 430;

	public const int negateSunburn = 431; 
	public const int defense_range = 435;

	public const int guts = 436;

public class ENC

cs

	public const int sustain_END = 441;

	public const int sustain_PER = 443; 
	public const int nonLethal = 485; 
	public const int bane_all = 468; 
	public const int sustain_DEX = 442; 

	public const int mod_splash = 608; 
	public const int sustain_LER = 444; 

	public const int mod_feint = 623; 
	public const int safetyMeasure = 486; 

	public const int mod_cleave = 622; 
	public const int revealFaith = 481; 

	public const int mod_flurry = 621; 
	public const int deathagony = 488; 

	public const int mod_chaser = 620; 
	public const int negateConfusion = 425; 

	public const int mod_talisman = 609; 
	public const int mod_frustration = 624; 

	public const int negateFear = 423; 
	public const int r_life = 640; 

	public const int r_mana = 641;

	public const int r_DV = 650;

	public const int safetyMeasure = 486; 
	public const int r_PV = 651; 

	public const int mod_frustration = 624; 
	public const int creativeChef = 487; 

	public const int mod_scatter = 607; 
	public const int mod_flurry = 621; 

	public const int mod_drill = 606; 
	public const int mod_chaser = 620; 

	public const int r_life = 640; 
	public const int mod_talisman = 609; 

	public const int mod_ammo_recover = 604; 
	public const int mod_cleave = 622; 

	public const int creativeChef = 487; 
	public const int mod_scatter = 607; 

	public const int mod_ammo_knockback = 603; 
	public const int mod_splash = 608; 

	public const int mod_rapid = 602; 
	public const int mod_feint = 623; 

	public const int deathagony = 488; 
	public const int mod_precision = 605; 

	public const int music_drunk = 489;

	public const int mod_ammo_recover = 604; 
	public const int mod_ammo_knockback = 603; 
	public const int mod_ammo = 600;

	public const int mod_reload = 601;

	public const int r_PV = 651; 
	public const int eco = 652; 

	public const int mod_precision = 605; 
	public const int mod_drill = 606; 
	public const int mod_rapid = 602; 

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

FACTION

``

cs

public class FACTION
{
	public const int bfLandmark4 = 3783; 
	public const int bfLandmark5 = 3784; 

	public const int bfLandmark2 = 3781; 
	public const int bfLandmark3 = 3782; 

	public const int fRation = 2207; 
	public const int bfLandmark2 = 3781; 

	public const int bfLandmark1 = 3780;

	public const int bfBreed = 3710;

	public const int bfBasin = 3709; 
	public const int bfMonster = 3707; 

	public const int bfFreshAir = 3708;

	public const int bfMonster = 3707; 
	public const int bfLandmark4 = 3783; 

	public const int bfFish = 3706; 
	public const int bfBasin = 3709; 

	public const int bfLandmark3 = 3782; 
	public const int fTaxEvasion = 2119; 

	public const int fFood = 2204; 
	public const int fAdmin = 2115; 

	public const int fEducation = 2116;

	public const int fAdmin = 2115; 
	public const int fLoyal = 2117;

	public const int fLuck = 2118;

	public const int fTaxEvasion = 2119; 
	public const int fHeirloom = 2120;

	public const int fSoil = 2200;

	public const int fElec = 2201;

	public const int fAttraction = 2206; 
	public const int fPromo = 2202;

	public const int fMoral = 2203; 
	public const int fRation = 2207; 

	public const int fSafety = 2205; 
	public const int fMoral = 2203; 

	public const int bfLandmark5 = 3784; 
	public const int fFood = 2204; 

	public const int fConstruction = 2003; 
	public const int fAttraction = 2206; 

	public const int bfCoal = 3800;

	public const int bfIce = 3804; 
	public const int fSafety = 2205; 

	public const int bfSilica = 3802; 
	public const int fConstruction = 2003; 

	public const int bfMushroom = 3801;

	public const int bfChitin = 3805; 
	public const int bfGum = 3803; 
	public const int bfSilica = 3802; 
	public const int bfPlain = 3600;

	public const int bfForest = 3601;

public class FACTION

cs

	public const int bfUndersea = 3606;

	public const int bfCave = 3500; 
	public const int actBuildInspect = 4006; 
	public const int bfFish = 3706; 

	public const int actBuildRecipe = 4005; 
	public const int bfIce = 3804; 

	public const int actBuildCollect = 4004; 
	public const int bfHunt = 3705; 

	public const int actBuildAnywhere = 4003; 
	public const int bfStart = 3900; 

	public const int actBuildTerrain = 4002; 
	public const int actBuildCut = 4000; 

	public const int actBuildMine = 4001;

	public const int actBuildCut = 4000; 
	public const int actBuildTerrain = 4002; 

	public const int bfStart = 3900; 
	public const int bfCave = 3500; 

	public const int bfChitin = 3805; 
	public const int actBuildCollect = 4004; 

	public const int bfHunt = 3705; 
	public const int actBuildRecipe = 4005; 

	public const int bfGum = 3803; 
	public const int actBuildInspect = 4006; 
	public const int actBuildAnywhere = 4003; 

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

FEAT

``

cs

public class FEAT
{
	public const int featDEX = 1621; 
	public const int featEND = 1622; 
	public const int featPER = 1623; 
	public const int featSTR = 1620; 

	public const int featLER = 1624; 
	public const int featLuck = 1628; 

	public const int featSPD = 1629; 
	public const int featCHA = 1627; 

	public const int featWIL = 1626;

	public const int featCHA = 1627; 
	public const int featMAG = 1625; 

	public const int featLuck = 1628; 
	public const int featLER = 1624; 

	public const int featSTR = 1620; 
	public const int featPER = 1623; 

	public const int featMAG = 1625; 
	public const int featEND = 1622; 

	public const int featHardy = 1630;

	public const int featDEX = 1621; 
	public const int featSPD = 1629; 
	public const int featWhiteVixen = 1414;

	public const int featMana = 1611;

public class FEAT

cs

	public const int featEarthStrength = 1411;

	public const int featCosmicHorror = 1233; 
	public const int featHeavyEater = 1234; 

	public const int featBoost = 1409;

public class FEAT

cs

	public const int featBaby = 1232;

	public const int featHeavyEater = 1234; 
	public const int featCosmicHorror = 1233; 

	public const int featLightEater = 1235;

public class FEAT

cs

	public const int featGeneSlot = 1242;

	public const int featLittleOne = 1229; 
	public const int featEternalYouth = 1243;

	public const int featReboot = 1410;

	public const int featSevenSense = 1245; 
	public const int featPegasus = 1246;

	public const int featLibra = 1247;

public class FEAT

cs

	public const int featBloodBond = 1249;

	public const int featVampire = 1250; 
	public const int featGoodKarma = 1270;

	public const int featBadKarma = 1271;

public class FEAT

cs

	public const int featGod_element1 = 1300;

	public const int featLittleOne = 1229; 
	public const int featCentaur = 1244; 

	public const int featDemigod = 1228; 
	public const int featGod_earth1 = 1305; 

	public const int featServant = 1227; 
	public const int featDemigod = 1228; 

	public const int featUnderground = 1226;

public class FEAT

cs

	public const int featSnail = 1211;

	public const int featGod_earth1 = 1305; 
	public const int featServant = 1227; 

	public const int featFairyResist = 1212;

public class FEAT

cs

	public const int featGod_wind1 = 1310;

	public const int featCentaur = 1244; 
	public const int featSevenSense = 1245; 

	public const int featGod_healing1 = 1320;

	public const int featPaladin = 1407; 
	public const int featTourist = 1406;

	public const int featPianist = 1405;

public class FEAT

cs

	public const int featThief = 1401;

	public const int featWarrior = 1400; 
	public const int featPaladin2 = 1408; 

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

	public const int featGod_moonshadow1 = 1350;

public class FEAT

cs

	public const int featGod_harvest1 = 1325;

	public const int featPaladin = 1407; 
	public const int featPaladin2 = 1408; 
	public const int featGod_strife1 = 1355; 

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

public List<string> Apply(int a, ElementContainer owner, bool hint = false)

cs
		ModBase(958, a * 5, hide: false);
		ModBase(956, a * 10, hide: false);
		ModBase(950, a * -5, hide: false);
		ModBase(960, a * -5, hide: false); 
		break;
	case 1290:
		ModBase(418, a * 100, hide: false);

public List<string> Apply(int a, ElementContainer owner, bool hint = false)

cs
	case 1216:
		ModBase(6020, a, hide: false);
		break;
	case 1250:
		ModBase(950, a * -10, hide: false); 
		ModBase(951, a * 5, hide: false); 
		ModBase(961, a * 5, hide: false); 
		ModBase(8793, a, hide: false); 
		ModBase(6607, a, hide: false); 
		break; 
	case 1415:
		ModBase(60, a * 15, hide: false);
		ModBase(79, a * 5, hide: false);

FOOD

public class FOOD

cs

	public const int food_god = 758;

	public const int justcooked = 757; 
	public const int food_CHA = 700;

	public const int food_cat = 701;

	public const int food_love = 703; 
	public const int food_poison = 702; 

	public const int food_bug = 704;

	public const int gainWeight = 705;

	public const int food_poison = 702; 
	public const int food_love = 703; 

	public const int kirimi = 707;

public class FOOD

cs

	public const int food_undead = 709;

	public const int justcooked = 757; 
	public const int food_blood = 710; 

	public const int loseWeight = 706;

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

FoodEffect

public static void Proc(Chara c, Thing food, bool consume = true)

cs
		if (flag2)
		{
			num5 *= 2f;
			num2 *= 1.5f; 
			num2 *= 1.3f; 
		}
		else
		{

public static void Proc(Chara c, Thing food, bool consume = true)

cs
		num5 = 0f;
		num2 *= 0.5f;
	}
	if (c.HasElement(1250)) 
	{ 
		if (food.HasElement(710)) 
		{ 
			num2 *= 4f; 
		} 
		else
		{ 
			num3 /= 10; 
		} 
	} 
	if (c.HasElement(1200))
	{
		num2 *= 1f + (float)c.Evalue(1200) + 0.25f; 
		num2 *= 1f + (float)c.Evalue(1200) * 0.25f; 
	}
	if (!c.IsPC)
	{

public static void Proc(Chara c, Thing food, bool consume = true)

cs
				{
					break;
				}
				goto IL_0f19; 
				goto IL_0f4b; 
			case "love":
				ActEffect.LoveMiracle(c, EClass.pc, value.Value * 10);
				break;

public static void Proc(Chara c, Thing food, bool consume = true)

cs
	{
		food.trait.OnDrink(c);
	}
	goto IL_0f19; 
	IL_0f19: 
	goto IL_0f4b; 
	IL_0f4b: 
	if (!consume)
	{
		return;

HotItemNoItem

public static bool _TrySetAct(ActPlan p)

cs
					EClass.player.RefreshCurrentHotItem();
					ActionMode.Adv.planRight.Update(ActionMode.Adv.mouseTarget);
					EClass.pc.renderer.Refresh();
					HotItemHeld.disableTool = true; 
					if (!(EClass.pc.held.trait is TraitShackle)) 
					{ 
						HotItemHeld.disableTool = true; 
					} 
				}
			}
			return true;

MUTATION

public class MUTATION

cs
public class MUTATION
{
	public const int mutationRegen = 1516; 
	public const int mutationDexN = 1515; 

	public const int mutationSkin = 1510;

public class MUTATION

cs

	public const int mutationDex = 1514;

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

	public const int mutationEyeN = 1513;

	public const int mutationSpeedN = 1519; 
	public const int mutationSpeed = 1518; 

	public const int etherPoisonHand = 1565;

public class MUTATION

cs

	public const int etherRain = 1558;

	public const int mutationSpeed = 1518; 
	public const int etherHead = 1557; 

	public const int etherViolence = 1556; 
	public const int mutationRegenN = 1517; 

	public const int etherNeck = 1555;

public class MUTATION

cs

	public const int etherUgly = 1551;

	public const int etherHead = 1557; 
	public const int etherViolence = 1556; 

	public const int mutationHairN = 1533;

	public const int mutationSpeedN = 1519; 
	public const int etherGravity = 1550;

	public const int mutationStrN = 1521;

public class MUTATION

cs

	public const int mutationBrainN = 1525;

	public const int mutationCold = 1526; 
	public const int mutationStr = 1520;

	public const int mutationColdN = 1527; 
	public const int mutationLightning = 1528;

	public const int mutationLightningN = 1529;

public class MUTATION

cs

	public const int mutationHair = 1532;

	public const int mutationColdN = 1527; 
	public const int mutationCold = 1526; 

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

POLICY

``

cs

public class POLICY
{
	public const int store_ripoff = 2816; 
	public const int store_premium = 2817;

	public const int license_food = 2818;

public class POLICY

cs

	public const int legendary_heirloom = 2821;

	public const int license_stolen = 2824; 
	public const int legendary_exhibition = 2823; 
	public const int celeb = 2822; 

	public const int milk_fan = 2825;

	public const int license_stolen = 2824; 
	public const int egg_fan = 2826;

	public const int breed_season = 2827;

	public const int license_slaver = 2828;

	public const int platinum_ticket = 2815; 
	public const int store_ripoff = 2816; 

	public const int celeb = 2822; 
	public const int legendary_exhibition = 2823; 

	public const int mass_exhibition = 2814; 
	public const int platinum_ticket = 2815; 

	public const int food_for_people = 2502; 
	public const int faith_tax = 2501; 

	public const int bed_quality = 2812; 
	public const int suite_room = 2813; 
	public const int stop_growth = 2515; 

	public const int taxfree = 2514;

public class POLICY

cs

	public const int vaccination = 2509;

	public const int stop_growth = 2515; 
	public const int nocturnal_life = 2508;

	public const int inquisition = 2507; 
	public const int human_right = 2506;

	public const int legal_drug = 2505;

public class POLICY

cs

	public const int wealth_tax = 2500;

	public const int suite_room = 2813; 
	public const int inquisition = 2507; 
	public const int mass_exhibition = 2814; 

	public const int speed_growth = 2516;

	public const int faith_tax = 2501; 
	public const int energy_conservation = 2700; 

	public const int trash_sort = 2701; 
	public const int food_for_people = 2502; 
	public const int trash_no = 2702; 
	public const int bed_quality = 2812; 

	public const int tourist_safety = 2811;

public class POLICY

cs

	public const int home_discount = 2800;

	public const int livestock_priv = 2715; 
	public const int trash_sort = 2701; 

	public const int energy_conservation = 2700; 
	public const int forcePanty = 2712; 

	public const int incomeTransfer = 2711;

	public const int noMother = 2710; 
	public const int livestock_priv = 2715; 

	public const int forcePanty = 2712; 
	public const int noAnimal = 2709; 

	public const int noDM = 2708;

public class POLICY

cs

	public const int weed_no = 2703;

	public const int trash_no = 2702; 
	public const int noAnimal = 2709; 
	public const int noMother = 2710; 

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

Player

public void CreateEquip()

cs
	c.EQ_ID("shirt").c_IDTState = 0;
	c.AddCard(ThingGen.CreateCurrency(1 + EClass.rnd(5)));
	bool firstSpellbook = true;
	switch (EClass.pc.job.id) 
	switch (c.job.id) 
	{
	case "paladin":
		c.AddCard(SetSpellbook(ThingGen.CreateSpellbook(8400), 2));

public void CreateEquip()

cs
		c.AddCard(ThingGen.Create("tool_talisman"));
		break;
	}
	switch (EClass.pc.job.id) 
	switch (c.job.id) 
	{
	case "wizard":
	case "warmage":

public void CreateEquip()

cs
		c.AddCard(ThingGen.Create("bandage").SetNum(6 + EClass.rnd(3)));
		break;
	}
	if (c.race.id == "vampire") 
	{ 
		c.AddCard(ThingGen.CreateRecipe("bloodpack")); 
		if (EClass.debug.enable) 
		{ 
			c.AddCard(ThingGen.Create("mixer")); 
			c.AddCard(ThingGen.Create("bloodpack").SetNum(3)); 
		} 
	} 
	Thing SetSpellbook(Thing t, int charge)
	{
		if (firstSpellbook)

Point

public bool HasFence

cs
		}
	}

	public bool IsSunLit 
	{ 
		get 
		{ 
			if (EClass._map.IsIndoor || EClass.world.date.IsNight || cell.HasRoof) 
			{ 
				return Map.sunMap.Contains(index); 
			} 
			return true; 
		} 
	} 
	public bool HasNonWallBlock
	{
		get

Recipe

public bool IsValidIngredient(Thing t)

cs
		{
			return true;
		}
		Debug.Log(t.Name + "/" + tag + "/" + t.material.tag); 
		if (!tag.IsEmpty() && !t.material.tag.Contains(tag))
		{
			return false;

Religion

public bool TryGetGift()

cs

	public bool IsValidArtifact(string id)
	{
		if (giftRank < 2) 
		{ 
			return false; 
		} 
		return id switch
		{
			"gun_mani" => this == EClass.game.religions.Machine,

public static Thing Reforge(string id, Point pos = null, bool first = true)

cs
			break;
		}
	}
	if (EClass.pc.IsEyth && EClass.pc.HasElement(1228)) 
	{ 
		thing.c_idDeity = EClass.game.religions.Eyth.id; 
	} 
	EClass._zone.AddCard(thing, pos);
	pos.PlayEffect("aura_heaven");
	if (first)

public void JoinFaith(Chara c, ConvertType type = ConvertType.Default)

cs
				EClass.screen.RefreshWeather();
			}
		}
		EClass.pc.PurgeEythArtifact(); 
	}

	public void LeaveFaith(Chara c, Religion newFaith, ConvertType type)

SKILL

public class SKILL

cs

	public const int music = 241;

	public const int weaponPolearm = 106; 
	public const int climbing = 242;

	public const int weaponPolearm = 106; 
	public const int evasionPlus = 151;

	public const int weaponGun = 105;

	public const int PER = 73; 
	public const int DEX = 72; 

	public const int weaponStaff = 103;

public class SKILL

cs

	public const int mana = 61;

	public const int DV = 64; 
	public const int vigor = 62; 

	public const int PV = 65;

public class SKILL

cs

	public const int weaponBow = 104;

	public const int DEX = 72; 
	public const int fishing = 245; 

	public const int LER = 74;

public class SKILL

cs

	public const int weaponAxe = 102;

	public const int fishing = 245; 
	public const int PER = 73; 

	public const int gathering = 250;

	public const int vigor = 62; 
	public const int DV = 64; 

	public const int blacksmith = 256;

public class SKILL

cs

	public const int resHoly = 960;

	public const int resMagic = 961; 
	public const int resCurse = 972;

	public const int resMagic = 961; 
	public const int resEther = 962;

	public const int resAcid = 963;

public class SKILL

cs
{
	134, 133, 132, 131, 130, 123, 108, 120, 111, 110,
	109, 135, 107, 122, 150, 226, 152, 200, 207, 210,
	220, 225, 227, 230, 235, 237, 240, 241, 106, 242, 
	151, 105, 73, 103, 50, 51, 55, 56, 57, 60, 
	61, 64, 65, 66, 67, 68, 70, 71, 104, 72, 
	220, 225, 227, 230, 235, 237, 240, 241, 242, 106, 
	151, 105, 72, 103, 50, 51, 55, 56, 57, 60, 
	61, 62, 65, 66, 67, 68, 70, 71, 104, 245, 
	74, 75, 76, 77, 78, 79, 80, 90, 91, 92,
	93, 100, 101, 102, 245, 250, 62, 256, 916, 917, 
	93, 100, 101, 102, 73, 250, 64, 256, 916, 917, 
	918, 920, 921, 922, 923, 924, 925, 926, 950, 951,
	952, 953, 915, 954, 956, 957, 958, 959, 960, 961, 
	972, 962, 963, 964, 965, 970, 971, 255, 955, 914, 
	952, 953, 915, 954, 956, 957, 958, 959, 960, 972, 
	961, 962, 963, 964, 965, 970, 971, 255, 955, 914, 
	919, 912, 257, 258, 259, 260, 261, 280, 281, 285,
	286, 287, 913, 289, 290, 291, 292, 288, 300, 911,
	910, 293, 312, 311, 310, 313, 306, 305, 304, 303,

SLOT

public class SLOT

cs

	public const int range = 41;

	public const int ammo = 42; 
	public const int token = 43;

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

SPELL

public class SPELL

cs
public class SPELL
{
	public const int puddle_Holy = 50909; 
	public const int bit_Sound = 51107; 
	public const int flare_Sound = 51207; 
	public const int ball_Nerve = 50108; 
	public const int sword_Mind = 51004; 
	public const int sword_Nerve = 51008; 

	public const int sword_Void = 51016; 
	public const int puddle_Nerve = 50908; 

	public const int bolt_Nerve = 50308; 
	public const int weapon_Nerve = 50808; 

	public const int hand_Nerve = 50408; 
	public const int miasma_Nerve = 50708; 

	public const int puddle_Mind = 50904; 
	public const int funnel_Nerve = 50608; 

	public const int arrow_Nerve = 50508;

	public const int funnel_Nerve = 50608; 
	public const int miasma_Nerve = 50708; 
	public const int bit_Nerve = 51108; 

	public const int weapon_Nerve = 50808; 
	public const int hand_Nerve = 50408; 

	public const int puddle_Nerve = 50908; 
	public const int sword_Void = 51016; 

	public const int flare_Holy = 51209; 
	public const int bolt_Nerve = 50308; 

	public const int sword_Nerve = 51008; 
	public const int flare_Mind = 51204; 

	public const int sword_Sound = 51007; 
	public const int bit_Mind = 51104; 

	public const int flare_Nerve = 51208;

	public const int ball_Holy = 50109;

	public const int weapon_Mind = 50804; 
	public const int sword_Mind = 51004; 

	public const int bolt_Holy = 50309;

	public const int miasma_Mind = 50704; 
	public const int hand_Holy = 50409;

	public const int bit_Holy = 51109; 
	public const int puddle_Mind = 50904; 

	public const int arrow_Holy = 50509;

	public const int weapon_Mind = 50804; 
	public const int funnel_Holy = 50609;

	public const int miasma_Holy = 50709;

	public const int weapon_Holy = 50809;

	public const int puddle_Holy = 50909; 
	public const int sword_Holy = 51009;

	public const int bit_Nerve = 51108; 
	public const int bit_Holy = 51109; 

	public const int puddle_Sound = 50907; 
	public const int flare_Holy = 51209; 

	public const int bit_Mind = 51104; 
	public const int ball_Nerve = 50108; 

	public const int miasma_Poison = 50705; 
	public const int flare_Sound = 51207; 

	public const int weapon_Poison = 50805; 
	public const int sword_Sound = 51007; 
	public const int miasma_Poison = 50705; 

	public const int puddle_Poison = 50905;

public class SPELL

cs

	public const int bit_Poison = 51105;

	public const int arrow_Poison = 50505; 
	public const int flare_Poison = 51205;

	public const int ball_Nether = 50106;

	public const int hand_Poison = 50405; 
	public const int funnel_Poison = 50605; 

	public const int bolt_Nether = 50306;

	public const int hand_Nether = 50406;

	public const int bolt_Poison = 50305; 
	public const int arrow_Nether = 50506;

	public const int arrow_Poison = 50505; 
	public const int funnel_Nether = 50606;

	public const int miasma_Nether = 50706;

public class SPELL

cs

	public const int sword_Nether = 51006;

	public const int hand_Poison = 50405; 
	public const int bit_Nether = 51106;

	public const int flare_Nether = 51206;

	public const int ball_Sound = 50107;

	public const int ball_Chaos = 50110; 
	public const int bolt_Poison = 50305; 

	public const int bolt_Sound = 50307;

	public const int ball_Poison = 50105; 
	public const int hand_Sound = 50407;

	public const int ball_Chaos = 50110; 
	public const int arrow_Sound = 50507;

	public const int funnel_Sound = 50607;

	public const int miasma_Sound = 50707;

	public const int flare_Mind = 51204; 
	public const int weapon_Sound = 50807;

	public const int funnel_Poison = 50605; 
	public const int puddle_Sound = 50907; 

	public const int ball_Acid = 50113; 
	public const int ball_Poison = 50105; 
	public const int bit_Sound = 51107; 
	public const int weapon_Poison = 50805; 
	public const int flare_Ether = 51212; 

	public const int hand_Chaos = 50410;

public class SPELL

cs

	public const int funnel_Impact = 50615;

	public const int funnel_Mind = 50604; 
	public const int miasma_Mind = 50704; 

	public const int puddle_Void = 50916;

public class SPELL

cs

	public const int bolt_Acid = 50313;

	public const int flare_Ether = 51212; 
	public const int ball_Acid = 50113; 

	public const int bit_Ether = 51112;

public class SPELL

cs

	public const int bit_Magic = 51111;

	public const int arrow_Mind = 50504; 
	public const int funnel_Mind = 50604; 

	public const int SpIncognito = 8780;

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

	public const int SpWisdom = 8503;

public class SPELL

cs

	public const int SpIdentify = 8230;

	public const int hand_Mind = 50404; 
	public const int arrow_Mind = 50504; 

	public const int SpTransmuteBat = 8793; 
	public const int SpDarkness = 8800; 

	public const int SpWeb = 8801; 
	public const int SpSummon = 9000; 
	public const int funnel_Lightning = 50602; 

	public const int arrow_Lightning = 50502;

public class SPELL

cs

	public const int bolt_Cold = 50301;

	public const int ball_Cold = 50101; 
	public const int miasma_Lightning = 50702; 

	public const int funnel_Lightning = 50602; 
	public const int ball_Cold = 50101; 

	public const int flare_Fire = 51200; 
	public const int weapon_Lightning = 50802; 

	public const int miasma_Lightning = 50702; 
	public const int sword_Lightning = 51002; 

	public const int puddle_Lightning = 50902; 
	public const int bolt_Mind = 50304; 

	public const int ball_Mind = 50104;

public class SPELL

cs

	public const int bit_Lightning = 51102;

	public const int sword_Lightning = 51002; 
	public const int puddle_Lightning = 50902; 

	public const int weapon_Lightning = 50802; 
	public const int SpWeb = 8801; 

	public const int SpDarkness = 8800; 
	public const int flare_Fire = 51200; 

	public const int bit_Fire = 51100; 
	public const int sword_Fire = 51000; 

	public const int puddle_Fire = 50900; 
	public const int SpSummonDragon = 9054; 

	public const int SpSummonMachine = 9053;

public class SPELL

cs

	public const int SpSummonUndeadSister = 9001;

	public const int SpSummon = 9000; 
	public const int SpMeteor = 9150; 

	public const int SpSummonDragon = 9054; 
	public const int bit_Fire = 51100; 

	public const int sword_Fire = 51000; 
	public const int SpEarthquake = 9151; 

	public const int SpMeteor = 9150; 
	public const int SpMoonArrow = 9156; 

	public const int SpMoonSpear = 9155; 
	public const int puddle_Fire = 50900; 

	public const int weapon_Fire = 50800;

public class SPELL

cs

	public const int SpExterminate = 9160;

	public const int SpMoonArrow = 9156; 
	public const int SpEarthquake = 9151; 
	public const int SpMoonSpear = 9155; 

	public const int flare_Void = 51216;

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

SerializedCards

public class Data : EClass

cs
		public int[] ints = new int[30];

		[JsonProperty]
		public string[] strs = new string[10]; 
		public string[] strs = new string[20]; 

		[JsonProperty]
		public Dictionary<int, object> obj;

public int encLv

cs
			}
		}

		public int idtState 
		{ 
			get 
			{ 
				return ints[23]; 
			} 
			set 
			{ 
				ints[23] = value; 
			} 
		} 
		public string id
		{
			get

public string cNote

cs
			}
		}

		public string idRefName 
		{ 
			get 
			{ 
				return strs[10]; 
			} 
			set 
			{ 
				strs[10] = value; 
			} 
		} 
		public string idTeleport 
		{ 
			get 
			{ 
				return strs[11]; 
			} 
			set 
			{ 
				strs[11] = value; 
			} 
		} 
		public bool isDead
		{
			get

public void Add(Card c)

cs
		isEmpty = (c.things.Count == 0 && c.c_lockLv == 0),
		encLv = c.encLV,
		cText = c.c_refText,
		cNote = c.c_note 
		cNote = c.c_note, 
		idtState = c.c_IDTState, 
		idRefName = c.c_idRefName, 
		idTeleport = c.GetStr(31) 
	};
	if (c.c_idBacker != 0)
	{

public void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial = nu

cs
			{
				card2.SetEncLv(card4.encLv);
			}
			if (card4.strs.Length > 10) 
			{ 
				if (!card4.idRefName.IsEmpty()) 
				{ 
					card2.c_idRefName = card4.idRefName; 
				} 
				if (!card4.idTeleport.IsEmpty()) 
				{ 
					card2.SetStr(31, card4.idTeleport); 
				} 
			} 
			card2.c_IDTState = card4.idtState; 
		}
		if (card2.isChara)
		{

SourceThing

public class Row : CardRow

cs

		public bool ignoreAltFix;

		public bool animeNoSync; 
		[NonSerialized]
		public string name_L;

public override void SetTiles()

cs
					_altTiles[i] = altTiles[i] / 100 * (int)renderData.pass.pmesh.tiling.x + altTiles[i] % 100 + num;
				}
			}
			animeNoSync = tag.Contains("animeNoSync"); 
		}

		public override string GetName(SourceMaterial.Row mat, int sum)

Thing

public override void SetRenderParam(RenderParam p)

cs
		}
		break;
	default:
	{ 
		if (source._altTiles.Length != 0 && trait.UseAltTiles)
		{
			p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));

public override void SetRenderParam(RenderParam p)

cs
		{
			p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
		}
		float time = Time.realtimeSinceStartup; 
		if (source.animeNoSync) 
		{ 
			Rand.UseSeed(base.uid, delegate
			{ 
				time += EClass.rnd(1000); 
			}); 
		} 
		if (source.anime.Length == 0 || !trait.IsAnimeOn)
		{
			break;
		}
		if (source.anime.Length > 2)
		{
			float num = Time.realtimeSinceStartup * 1000f / (float)source.anime[1] % (float)source.anime[2]; 
			float num = time * 1000f / (float)source.anime[1] % (float)source.anime[2]; 
			if ((int)num == source.anime[0] - 1 && source.anime.Length > 3)
			{
				PlaySound("anime_sound" + source.anime[3]);

public override void SetRenderParam(RenderParam p)

cs
		}
		else
		{
			float num2 = Time.realtimeSinceStartup * 1000f / (float)source.anime[1] % (float)source.anime[0]; 
			float num2 = time * 1000f / (float)source.anime[1] % (float)source.anime[0]; 
			p.tile += num2 * (float)((!(p.tile < 0f)) ? 1 : (-1));
		}
		break;
	}
	} 
	if (trait.IdSkin != 0 && sourceCard.skins.Length != 0)
	{
		int num6 = sourceCard.skins.TryGet(trait.IdSkin - 1);

TraitAltar

public class TraitAltar : Trait

cs

	public bool IsEyth => idDeity == "eyth";

	public override void OnSetOwner() 
	{ 
		if (idDeity == "void") 
		{ 
			owner.c_idDeity = "eyth"; 
		} 
	} 
	public override void OnCreate(int lv)
	{
		SetDeity(GetParam(1) ?? EClass.game.religions.GetRandomReligion().id);

public override void TrySetAct(ActPlan p)

cs

	public override bool CanOffer(Card c)
	{
		if (c != null && c.HasTag(CTAG.godArtifact) && (c.c_idDeity == Deity.id || (EClass.pc.IsEyth && EClass.pc.HasElement(1228) && Deity == EClass.game.religions.Eyth))) 
		if (c != null && c.HasTag(CTAG.godArtifact)) 
		{
			return true; 
			if (EClass.pc.IsEyth && EClass.pc.HasElement(1228)) 
			{ 
				if (IsEyth || Deity.IsValidArtifact(c.id)) 
				{ 
					return true; 
				} 
			} 
			else if (c.c_idDeity == Deity.id) 
			{ 
				return true; 
			} 
		}
		if (base.CanOffer(c) && (EClass.pc.faith.GetOfferingValue(c as Thing) > 0 || c.id == "water") && !c.isCopy)
		{

public void OnOffer(Chara c, Thing t)

cs
	{
		Msg.Say("nothingHappens");
	}
	else if (IsEyth) 
	else if (IsEyth && !EClass.pc.HasElement(1228)) 
	{
		if (EClass.pc.IsEyth)
		{

public void OnOffer(Chara c, Thing t)

cs
			_ = t.encLV;
			t.Destroy();
			Thing thing = Religion.Reforge(t.id);
			if (EClass.pc.IsEyth && EClass.pc.HasElement(1228) && IsEyth) 
			{ 
				thing.c_idDeity = EClass.game.religions.Eyth.id; 
			} 
			thing.SetEncLv(t.encLV);
			thing.SetBlessedState(t.blessedState);
			if (t.IsIdentified)

public void OnOffer(Chara c, Thing t)

cs
			Msg.Say("nothingHappens");
			return;
		}
		if (Deity != EClass.pc.faith) 
		if (Deity.id != EClass.pc.faith.id) 
		{
			bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200);
			if (GetParam(1) != null || EClass.pc.IsEyth)

TraitMapBoard

public override void TrySetAct(ActPlan p)

cs
	}
	p.TrySetAct("actChangeHomeIcon", delegate
	{
		UIContextMenu uIContextMenu4 = EClass.ui.CreateContextMenuInteraction(); 
		GridLayoutGroup parent = uIContextMenu4.AddGridLayout(); 
		UIContextMenu uIContextMenu5 = EClass.ui.CreateContextMenuInteraction(); 
		GridLayoutGroup parent = uIContextMenu5.AddGridLayout(); 
		HashSet<int> hashSet = new HashSet<int>();
		foreach (Spatial value in EClass.game.spatials.map.Values)
		{

public override void TrySetAct(ActPlan p)

cs
				EClass.scene.elomap.SetZone(EClass._zone.x, EClass._zone.y, EClass._zone, updateMesh: true);
			});
		}
		uIContextMenu4.Show(); 
		uIContextMenu5.Show(); 
		return false;
	}, owner);
	p.TrySetAct("actChangeBlockHeight", delegate
	{
		UIContextMenu uIContextMenu3 = EClass.ui.CreateContextMenuInteraction(); 
		uIContextMenu3.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.blockHeight * 10f, delegate(float b) 
		UIContextMenu uIContextMenu4 = EClass.ui.CreateContextMenuInteraction(); 
		uIContextMenu4.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.blockHeight * 10f, delegate(float b) 
		{
			EClass._map.config.blockHeight = b * 0.1f;
		}, 0f, 40f, isInt: true, hideOther: false);
		uIContextMenu3.Show(); 
		uIContextMenu4.Show(); 
		return false;
	}, owner);
	if (EClass._zone.IsSkyLevel)
	{
		p.TrySetAct("actChangeSkyBlockHeight", delegate
		{
			UIContextMenu uIContextMenu2 = EClass.ui.CreateContextMenuInteraction(); 
			uIContextMenu2.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.skyBlockHeight, delegate(float b) 
			UIContextMenu uIContextMenu3 = EClass.ui.CreateContextMenuInteraction(); 
			uIContextMenu3.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.skyBlockHeight, delegate(float b) 
			{
				EClass._map.config.skyBlockHeight = (int)b;
			}, 1f, 20f, isInt: true, hideOther: false);
			uIContextMenu2.Show(); 
			uIContextMenu3.Show(); 
			return false;
		}, owner);
	}

public override void TrySetAct(ActPlan p)

cs
	}, owner);
	p.TrySetAct("actChangeShadowStrength", delegate
	{
		UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction(); 
		uIContextMenu.AddSlider("adjustment", (float a) => a + "%", EClass._map.config.shadowStrength * 100f, delegate(float b) 
		UIContextMenu uIContextMenu2 = EClass.ui.CreateContextMenuInteraction(); 
		uIContextMenu2.AddSlider("adjustment", (float a) => a + "%", EClass._map.config.shadowStrength * 100f, delegate(float b) 
		{
			EClass._map.config.shadowStrength = b * 0.01f;
			EClass.screen.RefreshAll();
		}, 0f, 400f, isInt: true, hideOther: false);
		uIContextMenu2.Show(); 
		return false; 
	}, owner); 
	p.TrySetAct("actChangeHeightShadowStrength", delegate
	{ 
		UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction(); 
		uIContextMenu.AddSlider("adjustment", (float a) => a + "%", EClass._map.config.heightLightMod * 1000f, delegate(float b) 
		{ 
			EClass._map.config.heightLightMod = b * 0.001f; 
		}, 0f, 100f, isInt: true, hideOther: false); 
		uIContextMenu.Show();
		return false;
	}, owner);

WidgetManager

public void Hide()

cs

	public void Reset(bool toggleTheme)
	{
		if (WidgetMainText.Instance.box.isShowingLog) 
		{ 
			WidgetMainText.Instance._ToggleLog(); 
		} 
		MsgBox msgBox = null; 
		if ((bool)WidgetMainText.Instance)
		{
			(WidgetMainText.boxBk = WidgetMainText.Instance.box).transform.SetParent(base.transform.parent, worldPositionStays: false); 
			if (WidgetMainText.Instance.box.isShowingLog) 
			{ 
				WidgetMainText.Instance._ToggleLog(); 
			} 
			msgBox = (WidgetMainText.boxBk = WidgetMainText.Instance.box); 
			msgBox.transform.SetParent(base.transform.parent, worldPositionStays: false); 
		}
		KillWidgets();
		if (toggleTheme)

public void Reset(bool toggleTheme)

cs
		OnGameInstantiated();
		OnActivateZone();
		OnChangeActionMode();
		if (!WidgetMainText.Instance && (bool)msgBox) 
		{ 
			UnityEngine.Object.Destroy(msgBox.gameObject); 
		} 
	}

	public void DialogSave(Action onSave = null)