Skip to content

EA 23.235 Nightly Patch 1

November 17, 2025

21 files modified. 2 new files created.

Important Changes

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

CraftUtil (1)

cs
public static void MakeDish(Thing food, int lv, Chara crafter = null) 
public static void MakeDish(Thing food, int lv, Chara crafter = null, int seed = -1) 

AI_Fuck

public override IEnumerable<Status> Run()

cs
	Chara tc = (sell ? owner : target);
	int destDist = ((Type == FuckType.fuck) ? 1 : 1);
	yield return DoGoto(target.pos, destDist);
	cc.Say(Type.ToString() + "_start", cc, tc); 
	cc.Say((variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start"), cc, tc); 
	isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;
	if (Type == FuckType.tame)
	{

public void Finish()

cs
			int value = chara.hunger.value;
			Thing food = CraftUtil.MakeBloodMeal(chara, chara2);
			FoodEffect.Proc(chara, food, consume: false);
			chara2.AddCondition<ConBleed>(EClass.rndHalf(value * 20)); 
			chara2.AddCondition<ConBleed>(EClass.rndHalf(value * 10)); 
		}
		else
		{

ActEffect

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

cs
			case "dragon":
				chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_dragon", (SourceChara.Row r) => r.race == "dragon" || r.race == "drake" || r.race == "wyvern"), power / 5);
				break;
			case "undead":
				chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_undead", (SourceChara.Row r) => r.HasTag(CTAG.undead) || (EClass.sources.races.map.TryGetValue(r.race)?.IsUndead ?? false)), power / 5); 
				break; 
			case "pawn":
				chara = CharaGen.CreateFromFilter("c_pawn", power / 10);
				break;

CardRenderer

public virtual void Refresh()

cs

	public SourcePref GetPref()
	{
		if (owner.IsPCC || (owner.HasHost && owner.Chara.host.ride == owner)) 
		if ((owner.IsPCC && replacer == null) || (owner.HasHost && owner.Chara.host.ride == owner)) 
		{
			return EClass.core.refs.prefs.pcc;
		}

Chara

public class Chara : Card, IPathfindWalker

cs

	public ConSuspend conSuspend;

	public ConTransmute conTrans; 
	public Emo2 emoIcon;

	public int happiness;

public override SourcePref Pref

cs
{
	get
	{
		if (renderer.replacer != null) 
		{ 
			return renderer.replacer.pref; 
		} 
		if (spriteReplacer != null)
		{
			return spriteReplacer.data?.pref ?? EClass.core.refs.prefs.replacer1;

public void Refresh(bool calledRecursive = false)

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

CharaRenderer

public override void OnEnterScreen()

cs
public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
{
	base.Draw(p, ref v, drawShadow);
	if ((Zone.sourceHat != null || owner.hat != null) && owner.Pref.hatY != 0f && owner.host == null) 
	if ((Zone.sourceHat != null || owner.hat != null) && owner.host == null) 
	{
		DrawHat();
	}

public void DrawHat()

cs
		}
		CardRow cardRow = Zone.sourceHat ?? owner.hat;
		SourcePref pref = GetPref();
		bool flag = currentDir == 1 || currentDir == 3; 
		int liquidLv = RenderObject.currentParam.liquidLv; 
		float num = ((replacer != null) ? replacer.pref.hatY : pref.hatY); 
		if (pccData != null) 
		if (pref.hatY != 0f) 
		{
			num += RenderObject.renderSetting.hatPos[actor.GetFrame()].y; 
			bool flag = currentDir == 1 || currentDir == 3; 
			int liquidLv = RenderObject.currentParam.liquidLv; 
			float num = ((replacer != null) ? replacer.pref.hatY : pref.hatY); 
			if (pccData != null) 
			{ 
				num += RenderObject.renderSetting.hatPos[actor.GetFrame()].y; 
			} 
			RenderObject.currentParam.liquidLv = 0; 
			RenderObject.currentParam.x += 0.01f * (float)pref.equipX; 
			RenderObject.currentParam.y += num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY); 
			RenderObject.currentParam.z += -0.09f; 
			RenderObject.currentParam.tile = cardRow._tiles[owner.uid % cardRow._tiles.Length] * ((!flag) ? 1 : (-1)); 
			RenderObject.currentParam.mat = cardRow.DefaultMaterial; 
			RenderObject.currentParam.matColor = cardRow.GetColorInt(RenderObject.currentParam.mat); 
			cardRow.renderData.Draw(RenderObject.currentParam); 
			RenderObject.currentParam.x -= 0.01f * (float)pref.equipX; 
			RenderObject.currentParam.y -= num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY); 
			RenderObject.currentParam.z -= -0.09f; 
			RenderObject.currentParam.liquidLv = liquidLv; 
		}
		RenderObject.currentParam.liquidLv = 0; 
		RenderObject.currentParam.x += 0.01f * (float)pref.equipX; 
		RenderObject.currentParam.y += num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY); 
		RenderObject.currentParam.z += -0.09f; 
		RenderObject.currentParam.tile = cardRow._tiles[owner.uid % cardRow._tiles.Length] * ((!flag) ? 1 : (-1)); 
		RenderObject.currentParam.mat = cardRow.DefaultMaterial; 
		RenderObject.currentParam.matColor = cardRow.GetColorInt(RenderObject.currentParam.mat); 
		cardRow.renderData.Draw(RenderObject.currentParam); 
		RenderObject.currentParam.x -= 0.01f * (float)pref.equipX; 
		RenderObject.currentParam.y -= num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY); 
		RenderObject.currentParam.z -= -0.09f; 
		RenderObject.currentParam.liquidLv = liquidLv; 
	}

	public override void DrawHeld()

ConTransmute

public override void Tick()

cs

	public override void OnStart()
	{
		owner.conTrans = this; 
		owner._CreateRenderer();
		if (owner.IsPCParty)
		{

public override void OnStart()

cs

	public override void OnRemoved()
	{
		owner.conTrans = null; 
		owner._CreateRenderer();
		if (owner.IsPCParty)
		{

CraftUtil

public static void AddRandomFoodEnc(Thing t)

cs
		}
	}

	public static void MakeDish(Thing food, int lv, Chara crafter = null) 
	public static void MakeDish(Thing food, int lv, Chara crafter = null, int seed = -1) 
	{
		RecipeManager.BuildList();
		List<Thing> list = new List<Thing>();
		RecipeSource recipeSource = RecipeManager.Get(food.id);
		Debug.Log(recipeSource); 
		if (recipeSource == null)
		{
			return;
		}
		SetSeed(); 
		int num = Mathf.Min(EClass.rnd(lv), 50);
		foreach (Recipe.Ingredient ingredient in recipeSource.GetIngredients())
		{
			SetSeed(); 
			Thing thing = ThingGen.Create(ingredient.id, -1, lv);
			if (thing.id == "deadbody")
			{
				thing = ThingGen.Create("_meat");
			}
			SetSeed(); 
			thing = thing.TryMakeRandomItem(lv, TryMakeRandomItemSource.Cooking, crafter);
			SetSeed(); 
			TraitSeed.LevelSeed(thing, null, EClass.rnd(lv / 4) + 1);
			thing.SetEncLv(thing.encLV / 2);
			if (num > 0 && EClass.rnd(3) == 0)

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

cs
				food.elements.Remove(708);
			}
		}
		if (seed != -1) 
		{ 
			Rand.SetSeed(); 
		} 
		void SetSeed() 
		{ 
			if (seed != -1) 
			{ 
				Rand.SetSeed(seed); 
				seed++; 
			} 
		} 
	}

	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); 
		Thing thing = ThingGen.CreateFromCategory("meal", 100); 
		sucker.Say("food_blood", thing);
		Rand.SetSeed(EClass.game.seed + feeder.uid); 
		MakeDish(thing, lV); 
		Rand.SetSeed(); 
		MakeDish(thing, 100, null, EClass.game.seed + feeder.uid); 
		if (thing.HasElement(709)) 
		{ 
			thing.elements.Remove(709); 
		} 
		if (thing.HasElement(708))
		{
			thing.elements.Remove(708);
		}
		thing.elements.ModBase(710, 1); 
		if (thing.HasElement(701)) 
		{ 
			thing.elements.Remove(701); 
		} 
		thing.elements.ModBase(710, 30); 
		thing.elements.SetTo(2, Mathf.Min(EClass.curve(feeder.LV, 30, 10, 60), 200)); 
		return thing;
	}

	public static Thing MakeBloodSample(Chara sucker, Chara feeder) 
	{ 
		Thing thing = MakeBloodMeal(sucker, feeder); 
		Thing thing2 = ThingGen.Create("bloodsample"); 
		foreach (Element value in thing.elements.dict.Values) 
		{ 
			thing2.elements.SetTo(value.id, value.Value); 
		} 
		thing2.elements.SetTo(10, 0); 
		thing2.MakeRefFrom(feeder); 
		thing2.c_idRefCard = thing.id; 
		return thing2; 
	} 
	public static Thing MakeDarkSoup()
	{
		Thing thing = ThingGen.Create("soup_dark");

DOMAIN

public class DOMAIN

cs

	public const int domWind = 807;

	public const int domHarvest = 808; 
	public const int domMachine = 809; 

	public const int domLuck = 810;

public class DOMAIN

cs

	public const int domHarmony = 815;

	public const int domMachine = 809; 
	public const int domHarvest = 808; 

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

ENC

public class ENC

cs

	public const int convertLightning = 852;

	public const int convertCold = 851; 
	public const int convertFire = 850; 

	public const int counter = 380;

public class ENC

cs

	public const int onlyPet = 655;

	public const int convertFire = 850; 
	public const int convertCold = 851; 

	public const int living = 653;

public class ENC

cs

	public const int mod_splash = 608;

	public const int mod_feint = 623; 
	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 eco = 652; 

	public const int mod_ammo = 600;

	public const int mod_reload = 601;

	public const int eco = 652; 
	public const int mod_rapid = 602; 

	public const int mod_drill = 606;

	public const int mod_rapid = 602; 
	public const int mod_feint = 623; 
	public const int mod_ammo_knockback = 603; 
	public const int mod_ammo_recover = 604; 

	public static readonly int[] IDS = new int[104]
	{
		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, 
		400, 409, 423, 865, 852, 850, 380, 381, 382, 383, 
		656, 401, 402, 403, 404, 405, 406, 407, 408, 410,
		655, 850, 653, 447, 450, 460, 461, 462, 463, 464, 
		655, 851, 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
		609, 622, 607, 608, 605, 489, 652, 600, 601, 602, 
		606, 623, 603, 604
	};
}

FACTION

``

cs

public class FACTION
{
	public const int bfLandmark5 = 3784; 
	public const int bfLandmark3 = 3782; 
	public const int bfLandmark2 = 3781;

	public const int bfLandmark1 = 3780; 
	public const int bfBreed = 3710;

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

	public const int bfFreshAir = 3708;

	public const int bfLandmark4 = 3783; 
	public const int bfBasin = 3709;

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

	public const int fAdmin = 2115;

public class FACTION

cs

	public const int bfMushroom = 3801;

	public const int bfChitin = 3805; 
	public const int bfIce = 3804; 

	public const int bfGum = 3803;

public class FACTION

cs

	public const int bfFish = 3706;

	public const int bfIce = 3804; 
	public const int bfChitin = 3805; 

	public const int bfHunt = 3705;

public class FACTION

cs

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

FEAT

``

cs

public class FEAT
{
	public const int featSTR = 1620; 
	public const int featStamina = 1612; 

	public const int featLuck = 1628;

public class FEAT

cs

	public const int featEND = 1622;

	public const int featDEX = 1621; 
	public const int featHardy = 1630;

	public const int featDEX = 1621; 
	public const int featSTR = 1620; 

	public const int featSPD = 1629;

	public const int featWhiteVixen = 1414;

	public const int featMana = 1611; 
	public const int featLife = 1610;

	public const int featHealer = 1422;

public class FEAT

cs

	public const int featFairysan = 1413;

	public const int featStamina = 1612; 
	public const int featLuckyCat = 1412; 
	public const int featMana = 1611; 

	public const int featEvade = 1632;

public class FEAT

cs

	public const int featNegotiate = 1634;

	public const int featLuckyCat = 1412; 
	public const int featEarthStrength = 1411; 

	public const int featGoldenFinger = 1662;

public class FEAT

cs

	public const int featSpotting = 1633;

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

	public const int featHeavyEater = 1234;

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

	public const int featAdam = 1230;

public class FEAT

cs

	public const int featEternalYouth = 1243;

	public const int featReboot = 1410; 
	public const int featBoost = 1409; 

	public const int featPegasus = 1246;

public class FEAT

cs

	public const int featVampire = 1250;

	public const int featAshborn = 1251; 
	public const int featGoodKarma = 1270;

	public const int featBadKarma = 1271;

public class FEAT

cs

	public const int featGoddess = 1290;

	public const int featGod_element1 = 1300; 
	public const int featCentaur = 1244;

	public const int featGod_earth1 = 1305; 
	public const int featGod_element1 = 1300; 

	public const int featDemigod = 1228;

public class FEAT

cs

	public const int featElea = 1213;

	public const int featGod_wind1 = 1310; 
	public const int featGod_earth1 = 1305; 

	public const int featSevenSense = 1245;

	public const int featGod_healing1 = 1320; 
	public const int featPaladin = 1407; 
	public const int featGod_machine1 = 1315; 

	public const int featTourist = 1406;

public class FEAT

cs

	public const int featThief = 1401;

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

	public const int featGod_moonshadow1 = 1350; 
	public const int featPaladin = 1407; 

	public const int featGod_machine1 = 1315; 
	public const int featGod_strife1 = 1355; 

	public const int featGod_trickery1 = 1345;

	public const int featGod_wind1 = 1310; 
	public const int featGod_oblivion1 = 1340;

	public const int featGod_harmony1 = 1335;

public class FEAT

cs

	public const int featGod_harvest1 = 1325;

	public const int featGod_strife1 = 1355; 
	public const int featGod_healing1 = 1320; 
	public const int featGod_moonshadow1 = 1350; 

	public static readonly int[] IDS = new int[134] 
	public static readonly int[] IDS = new int[135] 
	{
		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, 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
		1612, 1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1630, 
		1620, 1629, 1414, 1610, 1422, 1421, 1420, 1419, 1418, 1417, 
		1416, 1415, 1631, 1413, 1412, 1611, 1632, 1648, 1634, 1411, 
		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, 1410, 1234, 1408, 1230, 1231, 
		1232, 1233, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 
		1229, 1243, 1409, 1246, 1247, 1248, 1249, 1250, 1251, 1270, 
		1271, 1272, 1273, 1290, 1244, 1300, 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, 1305, 1245, 1315, 1406, 1405, 
		1404, 1403, 1402, 1401, 1400, 1407, 1355, 1345, 1310, 1340, 
		1335, 1330, 1325, 1320, 1350
	};
}
public class Feat : Element

FoodEffect

public static bool IsLeftoverable(Thing food)

cs

	public static void Proc(Chara c, Thing food, bool consume = true)
	{
		if (food.id == "bloodsample") 
		{ 
			food.ModNum(-1); 
			return; 
		} 
		food.CheckJustCooked();
		bool flag = EClass._zone.IsPCFaction && c.IsInSpot<TraitSpotDining>();
		int num = (food.isCrafted ? ((EClass.pc.Evalue(1650) >= 3) ? 5 : 0) : 0);

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

cs
	{
		if (food.HasElement(710))
		{
			num2 *= 4f; 
			num2 = num2 * 0.1f * (float)(food.Evalue(710) + 10); 
		}
		else
		{

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

cs
				{
					break;
				}
				goto IL_0f4b; 
				goto IL_0f76; 
			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_0f4b; 
	IL_0f4b: 
	goto IL_0f76; 
	IL_0f76: 
	if (!consume)
	{
		return;

Religion

public int GetOfferingValue(Thing t, int num = -1)

cs
	{
		num = t.Num;
	}
	int v = 0; 
	long v = 0L; 
	if (t.source._origin == "meat")
	{
		v = Mathf.Clamp(t.SelfWeight / 10, 1, 1000);
		if (t.refCard == null)
		{
			v /= 10; 
			v /= 10L; 
		}
	}
	else if (GetOfferingMtp(t) > 0)

public int GetOfferingValue(Thing t, int num = -1)

cs
			}
		}
	}
	if (v == 0) 
	if (v == 0L) 
	{
		return 0;
	}
	if (t.IsDecayed)
	{
		v /= 10; 
		v /= 10L; 
	}
	v = v * (100 + Mathf.Min(t.LV * 2, 100) + (t.HasElement(757) ? 50 : 0)) / 100;
	v = Mathf.Max(v, 1) * num; 
	return v; 
	v = (int)Mathf.Clamp(Mathf.Max(v, 1f) * (float)num, 1f, 214748370f); 
	return (int)v; 
	void SetValue(SourceCategory.Row cat, int mtp)
	{
		v = Mathf.Clamp(t.SelfWeight / 10, 50, 1000);

SKILL

public class SKILL

cs

	public const int mana = 61;

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

	public const int PV = 65;

public class SKILL

cs

	public const int gathering = 250;

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

	public const int blacksmith = 256;

public class SKILL

cs

	public const int resHoly = 960;

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

	public const int resCurse = 972; 
	public const int resEther = 962;

	public const int resAcid = 963;

public class SKILL

cs
	109, 135, 107, 122, 150, 226, 152, 200, 207, 210,
	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, 
	61, 64, 65, 66, 67, 68, 70, 71, 104, 245, 
	74, 75, 76, 77, 78, 79, 80, 90, 91, 92,
	93, 100, 101, 102, 73, 250, 64, 256, 916, 917, 
	93, 100, 101, 102, 73, 250, 62, 256, 916, 917, 
	918, 920, 921, 922, 923, 924, 925, 926, 950, 951,
	952, 953, 915, 954, 956, 957, 958, 959, 960, 972, 
	961, 962, 963, 964, 965, 970, 971, 255, 955, 914, 
	952, 953, 915, 954, 956, 957, 958, 959, 960, 961, 
	972, 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 neck = 31;

	public const int head = 30; 
	public const int range = 41; 

	public const int finger = 36;

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

	public const int head = 30; 
	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, 43, 42
		31, 41, 36, 43, 30, 42
	};
}

SPELL

public class SPELL

cs
public class SPELL
{
	public const int sword_Nerve = 51008; 
	public const int puddle_Nerve = 50908;

	public const int weapon_Nerve = 50808;

public class SPELL

cs

	public const int arrow_Nerve = 50508;

	public const int bit_Nerve = 51108; 
	public const int sword_Mind = 51004; 

	public const int hand_Nerve = 50408;

	public const int sword_Void = 51016; 
	public const int bolt_Nerve = 50308;

	public const int flare_Mind = 51204; 
	public const int sword_Void = 51016; 

	public const int bit_Mind = 51104;

	public const int flare_Nerve = 51208; 
	public const int ball_Nerve = 50108; 
	public const int sword_Nerve = 51008; 
	public const int bit_Nerve = 51108; 

	public const int ball_Holy = 50109;

	public const int sword_Mind = 51004; 
	public const int flare_Sound = 51207; 
	public const int puddle_Mind = 50904; 

	public const int bolt_Holy = 50309;

	public const int hand_Holy = 50409; 
	public const int weapon_Mind = 50804; 

	public const int puddle_Mind = 50904; 
	public const int hand_Holy = 50409; 

	public const int arrow_Holy = 50509;

	public const int weapon_Mind = 50804; 
	public const int miasma_Mind = 50704; 

	public const int funnel_Holy = 50609;

public class SPELL

cs

	public const int flare_Holy = 51209;

	public const int ball_Nerve = 50108; 
	public const int flare_Nerve = 51208; 

	public const int flare_Sound = 51207; 
	public const int bit_Sound = 51107; 

	public const int sword_Sound = 51007;

	public const int miasma_Poison = 50705; 
	public const int puddle_Sound = 50907; 
	public const int weapon_Poison = 50805; 

	public const int puddle_Poison = 50905;

public class SPELL

cs

	public const int ball_Nether = 50106;

	public const int funnel_Poison = 50605; 
	public const int arrow_Poison = 50505; 

	public const int bolt_Nether = 50306;

	public const int hand_Nether = 50406;

	public const int arrow_Nether = 50506; 
	public const int hand_Poison = 50405; 

	public const int arrow_Poison = 50505; 
	public const int arrow_Nether = 50506; 

	public const int funnel_Nether = 50606;

public class SPELL

cs

	public const int puddle_Nether = 50906;

	public const int sword_Nether = 51006; 
	public const int bolt_Poison = 50305; 

	public const int hand_Poison = 50405; 
	public const int sword_Nether = 51006; 

	public const int bit_Nether = 51106;

public class SPELL

cs

	public const int ball_Sound = 50107;

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

	public const int bolt_Sound = 50307;

	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 weapon_Sound = 50807; 
	public const int ball_Poison = 50105; 

	public const int puddle_Sound = 50907; 
	public const int weapon_Sound = 50807; 

	public const int ball_Poison = 50105; 
	public const int flare_Mind = 51204; 

	public const int bit_Sound = 51107; 
	public const int funnel_Poison = 50605; 

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

	public const int flare_Ether = 51212;

public class SPELL

cs

	public const int funnel_Impact = 50615;

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

	public const int puddle_Void = 50916;

public class SPELL

cs

	public const int bit_Magic = 51111;

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

	public const int SpIncognito = 8780; 
	public const int SpTransmuteBroom = 8790; 

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

	public const int SpWisdom = 8503;

public class SPELL

cs

	public const int SpTransmutePutit = 8791;

	public const int SpTransmuteBroom = 8790; 
	public const int SpIncognito = 8780; 

	public const int SpSeeInvisible = 8776;

public class SPELL

cs

	public const int SpIdentify = 8230;

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

	public const int SpDarkness = 8800;

	public const int SpSummon = 9000;

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

	public const int hand_Lightning = 50402;

public class SPELL

cs

	public const int bolt_Cold = 50301;

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

	public const int weapon_Lightning = 50802; 
	public const int funnel_Lightning = 50602; 

	public const int sword_Lightning = 51002; 
	public const int flare_Fire = 51200; 

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

	public const int ball_Mind = 50104;

public class SPELL

cs

	public const int bit_Lightning = 51102;

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

	public const int SpWeb = 8801;

	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 class SPELL

cs

	public const int SpSummonUndeadSister = 9001;

	public const int SpMeteor = 9150; 
	public const int SpSummonUndead = 9055; 

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

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

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

	public const int weapon_Fire = 50800;

public class SPELL

cs

	public const int SpExterminate = 9160;

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

	public const int flare_Void = 51216;

	public static readonly int[] IDS = new int[289] 
	public static readonly int[] IDS = new int[290] 
	{
		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, 
		50908, 50808, 50708, 50608, 50508, 51004, 50408, 50308, 51016, 51104, 
		50108, 51008, 51108, 50109, 51207, 50904, 50309, 50804, 50409, 50509, 
		50704, 50609, 50709, 50809, 50909, 51009, 51109, 51209, 51208, 51107, 
		51007, 50907, 50805, 50905, 51005, 51105, 51205, 50106, 50505, 50306, 
		50406, 50405, 50506, 50606, 50706, 50806, 50906, 50305, 51006, 51106, 
		51206, 50107, 50110, 50307, 50407, 50507, 50607, 50707, 50105, 50807, 
		51204, 50605, 50705, 51212, 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, 50113, 51112, 51012, 50912, 50812, 
		50712, 50612, 50512, 50412, 50312, 50112, 51111, 50504, 8790, 50304, 
		8503, 8502, 8501, 8500, 8491, 8490, 8480, 8471, 8470, 8450, 
		8430, 8406, 8405, 8404, 8403, 8504, 8402, 8506, 8510, 8791, 
		8780, 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, 8800, 9000, 50502, 50402, 50302, 50102, 
		51201, 51101, 51001, 50901, 50801, 50701, 50601, 50501, 50401, 50301,
		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
		50101, 50602, 51200, 50702, 50902, 50104, 51203, 51103, 51003, 50903, 
		50803, 50703, 50603, 50503, 50403, 50303, 50103, 51202, 51102, 51002, 
		50802, 8801, 51100, 50900, 9054, 9053, 9052, 9051, 9050, 9010, 
		9009, 9008, 9007, 9006, 9005, 9004, 9003, 9002, 9001, 9055, 
		51000, 9150, 9155, 50800, 50700, 50600, 50500, 50400, 50300, 50100, 
		9503, 9502, 9501, 9500, 9210, 9200, 9160, 9156, 9151, 51216
	};
}
public class Spell : Ability

Thing

public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
				{
					return s;
				}
				int num4 = e.Value; 
				int num3 = e.Value; 
				if (e.source.IsWeaponEnc && (!e.source.tag.Contains("modRanged") || e.id == 609) && isEquipped && root.isChara)
				{
					num4 = num4 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara)) / 100; 
					num3 = num3 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara)) / 100; 
				}
				string text16 = " (" + e.Value + ((e.Value == num4) ? "" : (" → " + num4)) + ")"; 
				string text17 = "_bracketLeft3".lang() + e.Name + "_bracketRight3".lang(); 
				return s + text16 + " " + text17; 
				string text12 = " (" + e.Value + ((e.Value == num3) ? "" : (" → " + num3)) + ")"; 
				string text13 = "_bracketLeft3".lang() + e.Name + "_bracketRight3".lang(); 
				return s + text12 + " " + text13; 
			});
		}
		if (sockets != null)

public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
	{
		if (showTraits)
		{
			elements.AddNote(n, (Element e) => listTrait.Contains(e), null, ElementContainer.NoteMode.BonusTrait, addRaceFeat: false, delegate(Element e, string s) 
			{ 
				string text13 = s; 
				string text14 = e.source.GetText("textExtra"); 
				if (!text14.IsEmpty()) 
				{ 
					string text15 = ""; 
					if (e.id == 2 && mode == IInspect.NoteMode.Product) 
					{ 
						int num2 = recipe.GetQualityBonus() / 10; 
						if (num2 >= 0) 
						{ 
							num2++; 
						} 
						text15 = "qualityLimit".lang(num2.ToString() ?? ""); 
					} 
					int num3 = e.Value / 10; 
					num3 = ((e.Value < 0) ? (num3 - 1) : (num3 + 1)); 
					text14 = "Lv." + num3 + text15 + " " + text14; 
					if (infoMode && e.IsFoodTraitMain) 
					{ 
						text14 += "traitAdditive".lang(); 
					} 
					text13 += (" <size=12>" + text14 + "</size>").TagColor(FontColor.Passive); 
				} 
				return text13; 
			}, delegate
			elements.AddNote(n, (Element e) => listTrait.Contains(e), null, ElementContainer.NoteMode.BonusTrait, addRaceFeat: false, (Element e, string s) => s + GetTextTrait(e), delegate
			{
			});
			if (listTrait.Count != list.Count)

public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
		if (base.c_mixedFoodData != null)
		{
			n.AddHeader("isMixedFood");
			foreach (string text18 in base.c_mixedFoodData.texts) 
			foreach (string text14 in base.c_mixedFoodData.texts) 
			{
				AddText("_bullet".lang() + text18 + text2, FontColor.Default); 
				AddText("_bullet".lang() + text14 + text2, FontColor.Default); 
			}
		}
	}

public override void WriteNote(UINote n, Action<UINote> onWriteNote = null, IIns

cs
		n.AddHeader("HeaderAdditionalTrait", "additional_trait");
		foreach (Element item in ListCraftBonusTraits())
		{
			item.AddEncNote(n, this, ElementContainer.NoteMode.BonusTrait, delegate(Element e, string s) 
			{ 
				string text10 = s; 
				string text11 = e.source.GetText("textExtra"); 
				if (!text11.IsEmpty()) 
				{ 
					string text12 = ""; 
					int num = e.Value / 10; 
					num = ((e.Value < 0) ? (num - 1) : (num + 1)); 
					text11 = "Lv." + num + text12 + " " + text11; 
					if (infoMode && e.IsFoodTraitMain) 
					{ 
						text11 += "traitAdditive".lang(); 
					} 
					text10 += (" <size=12>" + text11 + "</size>").TagColor(FontColor.Passive); 
				} 
				return text10; 
			}); 
			item.AddEncNote(n, this, ElementContainer.NoteMode.BonusTrait, (Element e, string s) => s + GetTextTrait(e)); 
		}
	}
	if (EClass.debug.showExtra)

void AddTextWithIcon(string text, Sprite sprite, FontColor col)

cs
			uIItem2.image1.SetActive(enable: true);
			uIItem2.image1.sprite = sprite;
		}
		string GetTextTrait(Element e) 
		{ 
			string text10 = e.source.GetText("textExtra"); 
			if (text10.IsEmpty()) 
			{ 
				return ""; 
			} 
			if (e.id == 710) 
			{ 
				text10 = text10.Replace("#1", $"{0.1f * (float)(e.Value + 10):F1}"); 
			} 
			string text11 = ""; 
			if (e.id == 2 && mode == IInspect.NoteMode.Product) 
			{ 
				int num = recipe.GetQualityBonus() / 10; 
				if (num >= 0) 
				{ 
					num++; 
				} 
				text11 = "qualityLimit".lang(num.ToString() ?? ""); 
			} 
			int num2 = e.Value / 10; 
			num2 = ((e.Value < 0) ? (num2 - 1) : (num2 + 1)); 
			text10 = "Lv." + num2 + text11 + " " + text10; 
			if (infoMode && e.IsFoodTraitMain) 
			{ 
				text10 += "traitAdditive".lang(); 
			} 
			return (" <size=12>" + text10 + "</size>").TagColor(FontColor.Passive); 
		} 
	}

	public static void AddAttackEvaluation(UINote n, Chara chara, Thing current = null)

Trait

public void OnBarter(bool reroll = false)

cs
				Add("stethoscope", 1, 0);
				Add("whip_love", 1, 0);
				Add("whip_interest", 1, 0);
				Add("syringe_blood", 20, 0); 
				if (EClass.game.IsSurvival)
				{
					Add("chest_tax", 1, 0);

+TraitBloodSample

File Created
cs
public class TraitBloodSample : TraitFoodMeal
{
	public override void SetName(ref string s)
	{
		if (!owner.c_idRefCard.IsEmpty())
		{
			s = s + Lang.space + "_flavor".lang(EClass.sources.cards.map.TryGetValue(owner.c_idRefCard, "fail_dish").GetName().ToTitleCase(wholeText: true));
		}
	}
}

+TraitSyringeBlood

File Created
cs
public class TraitSyringeBlood : TraitTicketChampagne.TraitSyringe
{
	public override void TrySetHeldAct(ActPlan p)
	{
		p.pos.Charas.ForEach(delegate(Chara c)
		{
			p.TrySetAct("actInject".lang("", c.Name), delegate
			{
				EClass.pc.PlaySound("syringe");
				EClass.pc.Say("syringe", EClass.pc, c, owner.NameOne);
				c.PlayEffect("blood").SetParticleColor(EClass.Colors.matColors[c.material.alias].main).Emit(20);
				c.AddBlood(2 + EClass.rnd(2));
				EClass.pc.PickOrDrop(EClass.pc.pos, CraftUtil.MakeBloodSample(EClass.pc, c));
				owner.ModNum(-1);
				return false;
			}, c);
		});
	}
}

TraitSyringeGene

public class TraitSyringeGene : Trait

cs
public class TraitSyringeGene : Trait
public class TraitSyringeGene : TraitTicketChampagne.TraitSyringe
{
	public override bool CanChangeHeight => false; 
	public override void TrySetHeldAct(ActPlan p)
	{
		p.pos.Charas.ForEach(delegate(Chara c)

public override void TrySetHeldAct(ActPlan p)

cs
		p.TrySetAct("actInject".lang("", c.Name), delegate
		{
			EClass.pc.PlaySound("syringe");
			EClass.pc.Say("syringe", EClass.pc, owner.NameOne, c.Name); 
			EClass.pc.Say("syringe", EClass.pc, c, owner.NameOne); 
			c.PlayEffect("blood").SetParticleColor(EClass.Colors.matColors[c.material.alias].main).Emit(20);
			c.AddBlood(2 + EClass.rnd(2));
			c.AddCondition<ConHallucination>(50);

TraitSyringeHeaven

public class TraitSyringeHeaven : Trait

cs
public class TraitSyringeHeaven : Trait
public class TraitSyringeHeaven : TraitTicketChampagne.TraitSyringe
{
	public override bool CanChangeHeight => false; 
	public override void TrySetHeldAct(ActPlan p)
	{
		p.pos.Charas.ForEach(delegate(Chara c)

public override void TrySetHeldAct(ActPlan p)

cs
		p.TrySetAct("actInject".lang("", c.Name), delegate
		{
			EClass.pc.PlaySound("syringe");
			EClass.pc.Say("syringe", EClass.pc, owner.NameOne, c.Name); 
			EClass.pc.Say("syringe", EClass.pc, c, owner.NameOne); 
			c.PlayEffect("blood").SetParticleColor(EClass.Colors.matColors[c.material.alias].main).Emit(20);
			c.AddBlood(2 + EClass.rnd(2));
			c.AddCondition<ConHallucination>(50);

TraitTicketChampagne

public class TraitTicketChampagne : TraitTicketMassage

cs
public class TraitTicketChampagne : TraitTicketMassage
{
	public class TraitSyringe : Trait
	{ 
		public override bool CanChangeHeight => false; 
	} 
}