Skip to content

EA 23.334 Nightly

August 8, 2026

28 files modified. 2 new files created. 2 files removed.

Important Changes

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

Religion (1)

cs
public virtual void Revelation(string idTalk, int chance = 100) 
public virtual void Revelation(string idTalk, Card c, int chance = 100) 

Steam (1)

cs
private void CreateUserContent2(UgcQuery query) 
public static void QueryAllMyPublished(Action<List<WorkshopItem>> onComplete, Action<string> onFail = null, float timeout = 10f) 

SurvivalManager (1)

cs
public void SetGateZone() 
public void RefreshGateZones() 

Trait (1)

cs
public virtual bool CanOffer(Card tg) 
public virtual bool CanOffer(Chara cc, Card tg) 

TraitAltar (2)

cs
public override bool CanOffer(Card c) 
public override bool CanOffer(Chara cc, Card c) 
cs
public void TakeOver() 
public void TakeOver(Chara c) 

ABILITY

public override int GetPower(Card c)

cs
a = EClass.curve(a, 400, 100);
if (this is Song)
{
	a = a * Mathf.Max(100 + c.Evalue(411) / 3, 1) / 100 * Mathf.Clamp(50 + EClass.curve(c.Evalue(241), 50, 10, 50) * 2, 1, 300) / 100 * (100 + c.Evalue(1294) * 25) / 100; 
	a = a * Mathf.Max(100 + c.Evalue(411) / 3, 1) / 100 * Mathf.Clamp(50 + EClass.curve(c.Evalue(241), 50, 10, 50) * 2, 1, 300) / 100 * (100 + c.Evalue(1294) * 20) / 100; 
}
else if (this is Spell)
{

AI_Haul

public static Thing GetThingToClean(Chara c = null)

cs
_list.Clear();
foreach (Thing thing in EClass._map.things)
{
	if (thing.placeState == PlaceState.roaming && !thing.isMasked && (thing.id == "731" || thing.id == "_egg" || thing.id == "egg_fertilized" || thing.id == "_milk")) 
	if (thing.placeState == PlaceState.roaming && !thing.isMasked && (thing.id == "731" || thing.id == "_egg" || thing.id == "egg_fertilized" || thing.id == "_milk") && thing.Dist(EClass.pc) > 1) 
	{
		_list.Add(thing);
	}

AI_Offer

public bool IsValidTarget(Card c)

cs
{
	if (altar != null)
	{
		return altar.trait.CanOffer(c); 
		return altar.trait.CanOffer(owner, c); 
	}
	return false;
}

ActPray

public static void Pray(Chara c, bool passive)

cs
if (!passive)
{
	c.Say("pray_answer", c, Act.CC.faith.Name);
	c.faith.Revelation((EClass.rnd(2) == 0) ? "random" : "chat"); 
	c.faith.Revelation((EClass.rnd(2) == 0) ? "random" : "chat", c); 
}
foreach (Chara member in EClass.pc.party.members)
{

Card

public void SpawnLoot(Card origin)

cs
bool isUserZone = EClass._zone.IsUserZone;
bool flag = EClass._zone is Zone_Music;
List<Card> list = new List<Card>();
if (!IsPCFaction && !isUserZone && sourceCard.idActor.IsEmpty()) 
if (!IsPCFactionOrMinion && !isUserZone && sourceCard.idActor.IsEmpty()) 
{
	int i2 = 500;
	if (this.rarity >= Rarity.Legendary) 
	{ 
		i2 = ((!EClass.player.codex.DroppedCard(id)) ? 1 : 10); 
		EClass.player.codex.MarkCardDrop(id); 
	} 
	if (trait is TraitAdventurerBacker)
	{
		i2 = 10;
	}
	if (this.rarity >= Rarity.Legendary) 
	{ 
		if (!EClass.player.codex.DroppedCard(id)) 
		{ 
			i2 = 0; 
			EClass.player.codex.MarkCardDrop(id); 
		} 
		else
		{ 
			i2 = 10; 
		} 
	} 
	if (chance(i2))
	{
		Thing thing = ThingGen.Create("figure");

public void SpawnLoot(Card origin)

cs
bool chance(int i)
{
	i = i * 100 / (100 + EClass.player.codex.GetOrCreate(id).BonusDropLv * 10);
	if (i < 1) 
	{ 
		i = 1; 
	} 
	if (IsMinion)
	{
		i *= 5;
	}
	if (i < 1) 
	{ 
		i = 1; 
	} 
	if (EClass.rnd(i) == 0)
	{
		return true;

Chara

public override void Die(Element e = null, Card origin = null, AttackSource atta…)

cs
}
if (origin == EClass.pc)
{
	EClass.pc.faith.Revelation("kill", 10); 
	EClass.pc.faith.Revelation("kill", EClass.pc, 10); 
}
else if (origin.IsPCFaction)
{

ContentConfigOther

public override void OnInstantiate()

cs
{
	base.config.other.disableMods = on;
});
toggleExceptionPopup.SetToggle(base.config.other.exceptionPopup, delegate(bool on) 
toggleExceptionPopup.SetToggle(base.config.other.exceptionPopup2, delegate(bool on) 
{
	base.config.other.exceptionPopup = on; 
	base.config.other.exceptionPopup2 = on; 
});
toggleNoCensor.SetToggle(base.config.other.noCensor, delegate(bool on)
{

CoreConfig

public class OtherSetting

cs
	public bool disableMods;

	public bool exceptionPopup; 
	public bool exceptionPopup2 = true; 
}

[Serializable]

DramaCustomSequence

public void Build(Chara c)

cs
	}).SetCondition(() => c.interest > 0);
}
bool flag4 = false;
if (!c.IsPCFaction && c.affinity.CanInvite() && !EClass._zone.IsInstance && c.c_bossType == BossType.none) 
if (!c.IsPCFaction && c.affinity.CanInvite() && !EClass._zone.IsInstance && c.c_bossType == BossType.none && !EClass.game.IsSurvival) 
{
	if ((c.trait.IsUnique || c.IsGlobal) && c.GetInt(111) == 0 && !c.IsPCFaction && c.trait.NeedBoutToJoin)
	{

public void Build(Chara c)

cs
{
	if (EClass.pc.HasElement(1232) || EClass.pc.HasElement(1291))
	{
		goto IL_0971; 
		goto IL_0980; 
	}
	num2 = EClass.pc.HasCondition<StanceMama>();
}

public void Build(Chara c)

cs
		}
		if (num2)
		{
			goto IL_0971; 
			goto IL_0980; 
		}
		goto IL_0982; 
		goto IL_0991; 
	}
	if (c.isDrunk || c.HasElement(1275) || EClass.debug.enable)
	{
		Choice2(flag2 ? "daBird" : "daTail", "_tail");
	}
}
goto IL_0d9b; 
IL_09c1: 
Choice2("daBaby", "_baby"); 
goto IL_09d2; 
IL_0971: 
Choice2("daMama", "_mama"); 
goto IL_0982; 
IL_0d9b: 
goto IL_0daa; 
IL_0daa: 
if (c.IsHomeMember())
{
	if (c.IsMaid)

void Invest(bool quick)

cs
Step("_end");
End();
return;
IL_09d2: 
IL_09d0: 
Choice2("daBaby", "_baby"); 
goto IL_09e1; 
IL_0980: 
Choice2("daMama", "_mama"); 
goto IL_0991; 
IL_0991: 
ConTransmuteHuman condition2 = c.GetCondition<ConTransmuteHuman>(); 
bool num3; 
if (condition2 == null) 
{ 
	if (c.HasElement(1232)) 
	{ 
		goto IL_09d0; 
	} 
	num3 = c.HasElement(1291); 
} 
else
{ 
	num3 = condition2.IsBaby; 
} 
if (num3) 
{ 
	goto IL_09d0; 
} 
goto IL_09e1; 
IL_09e1: 
if (c.trait.CanRevive)
{
	Choice2("daRevive", "_revive").DisableSound();

void Invest(bool quick)

cs
{
	Choice2("daBlessing", "_blessing");
}
goto IL_0d9b; 
IL_0982: 
ConTransmuteHuman condition2 = c.GetCondition<ConTransmuteHuman>(); 
bool num3; 
if (condition2 == null) 
{ 
	if (c.HasElement(1232)) 
	{ 
		goto IL_09c1; 
	} 
	num3 = c.HasElement(1291); 
} 
else
{ 
	num3 = condition2.IsBaby; 
} 
if (num3) 
{ 
	goto IL_09c1; 
} 
goto IL_09d2; 
goto IL_0daa; 
void BackChill()
{
	Method(RumorChill, null, StepDefault);

InvOwnerOffering

public InvOwnerOffering(Card owner = null, Card container = null, CurrencyType _…)

cs
public override bool ShouldShowGuide(Thing t)
{
	return altar.CanOffer(t); 
	return altar.CanOffer(EClass.pc, t); 
}

public override void _OnProcess(Thing t)

InvOwnerRecycle

public override void _OnProcess(Thing t)

cs
}
if (a != 0)
{
	EClass.pc.Pick(ThingGen.Create("ecopo").SetNum(a / 10 + 1)); 
	EClass.pc.Pick(ThingGen.Create((recycle is TraitSkyIncinerator) ? "ticket_sky" : "ecopo").SetNum(a / 10 + 1)); 
}
switch (t.id)
{

LayerSleep

public void Sleep(int _hours, Thing _bed, Thing _pillow = null)

cs
	pillow = _pillow;
	maxMin = hours * 60;
	InvokeRepeating("Advance", repeatRate, repeatRate);
	ELayer.pc.faith.Revelation("sleep"); 
	ELayer.pc.faith.Revelation("sleep", ELayer.pc); 
	ELayer.player.stats.slept++;
}

RecipeManager

public static RecipeSource GetUnlearnedRecipe(int lvBonus, string cat, bool only…)

cs
List<RecipeSource> list = new List<RecipeSource>();
foreach (RecipeSource item in RecipeManager.list)
{
	if (!item.alwaysKnown && !item.noRandomRecipe && (item.NeedFactory || item.IsQuickCraft) && (cat == null || item.row.Category.IsChildOf(cat)) && (!onlyUnlearned || !EClass.player.recipes.knownRecipes.ContainsKey(item.id)) && EClass.pc.Evalue(item.GetReqSkill().id) + 5 + lvBonus >= item.row.LV && !item.row.ContainsTag("hiddenRecipe")) 
	if (!item.alwaysKnown && !item.noRandomRecipe && (item.NeedFactory || item.IsQuickCraft) && (EClass.game.IsSurvival || !item.row.tag.Contains("oneblock_only")) && (cat == null || item.row.Category.IsChildOf(cat)) && (!onlyUnlearned || !EClass.player.recipes.knownRecipes.ContainsKey(item.id)) && EClass.pc.Evalue(item.GetReqSkill().id) + 5 + lvBonus >= item.row.LV && !item.row.ContainsTag("hiddenRecipe")) 
	{
		list.Add(item);
	}

Religion

public virtual string GetTextTemper(int _temper = -99999)

cs
	return list[6].ToTitleCase().TagColor(FontColor.Good);
}

public virtual void Revelation(string idTalk, int chance = 100) 
public virtual void Revelation(string idTalk, Card c, int chance = 100) 
{
	if (!IsEyth && EClass.rnd(100) <= chance)
	{
		Talk(idTalk, EClass.pc); 
		Talk(idTalk, c); 
	}
}

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

cs
}
if (type != ConvertType.Campaign)
{
	EClass.pc.c_daysWithGod = 0; 
	c.c_daysWithGod = 0; 
}
Msg.Say("worship", Name);
Talk("worship", c);

public void DoPunish(Chara c, PunishType type)

cs
		p = 200;
		break;
	}
	thing.ChangeWeight(EClass.pc.WeightLimit / 4 + 1000); 
	thing.ChangeWeight(c.WeightLimit / 4 + 1000); 
	c.AddThing(thing);
	c.AddCondition<ConWrath>(p);
}

Scene

public void Init(Mode newMode)

cs
EMono.player.flags.OnEnterZone();
if (EMono._zone == EMono.pc.homeZone)
{
	EMono.pc.faith.Revelation("welcome"); 
	EMono.pc.faith.Revelation("welcome", EMono.pc); 
}
if (EMono._zone.Boss != null && EMono._zone.Boss.ExistsOnMap)
{

SourceZone

public class Row : BaseRow

cs
public string[] tag;

public int costSkyTravel; 
public int cost;

public int dev;

public class Row : BaseRow

cs
	["idGen"] = 12,
	["idPlaylist"] = 13,
	["tag"] = 14,
	["cost"] = 15, 
	["dev"] = 16, 
	["image"] = 17, 
	["pos"] = 18, 
	["questTag"] = 19, 
	["textFlavor_JP"] = 20, 
	["textFlavor"] = 21, 
	["detail_JP"] = 22, 
	["detail"] = 23
	["costSkyTravel"] = 15, 
	["cost"] = 16, 
	["dev"] = 17, 
	["image"] = 18, 
	["pos"] = 19, 
	["questTag"] = 20, 
	["textFlavor_JP"] = 21, 
	["textFlavor"] = 22, 
	["detail_JP"] = 23, 
	["detail"] = 24
};

public static readonly IReadOnlyDictionary<string, string> TypeMapping = new Dictionary<string, string>

public class Row : BaseRow

cs
["idGen"] = "string",
["idPlaylist"] = "string",
["tag"] = "string[]",
["costSkyTravel"] = "int", 
["cost"] = "int",
["dev"] = "int",
["image"] = "string",

public override Row CreateRow()

cs
		idGen = SourceData.GetString(12),
		idPlaylist = SourceData.GetString(13),
		tag = SourceData.GetStringArray(14),
		cost = SourceData.GetInt(15), 
		dev = SourceData.GetInt(16), 
		image = SourceData.GetString(17), 
		pos = SourceData.GetIntArray(18), 
		questTag = SourceData.GetStringArray(19), 
		textFlavor_JP = SourceData.GetString(20), 
		textFlavor = SourceData.GetString(21), 
		detail_JP = SourceData.GetString(22), 
		detail = SourceData.GetString(23) 
		costSkyTravel = SourceData.GetInt(15), 
		cost = SourceData.GetInt(16), 
		dev = SourceData.GetInt(17), 
		image = SourceData.GetString(18), 
		pos = SourceData.GetIntArray(19), 
		questTag = SourceData.GetStringArray(20), 
		textFlavor_JP = SourceData.GetString(21), 
		textFlavor = SourceData.GetString(22), 
		detail_JP = SourceData.GetString(23), 
		detail = SourceData.GetString(24) 
	};
}

public override Row CreateRowByMapping(IReadOnlyDictionary<string, int> mapping)

cs
idGen = SourceData.GetString(mapping["idGen"]),
idPlaylist = SourceData.GetString(mapping["idPlaylist"]),
tag = SourceData.GetStringArray(mapping["tag"]),
costSkyTravel = SourceData.GetInt(mapping["costSkyTravel"]), 
cost = SourceData.GetInt(mapping["cost"]),
dev = SourceData.GetInt(mapping["dev"]),
image = SourceData.GetString(mapping["image"]),

SpatialManager

public List<Zone> ListReturnLocations()

cs
	return list;
}
List<Zone> list2 = (from a in map.Values.OfType<Zone>()
	where a != EClass._zone && a.IsReturnLocation && a.GetTopZone().visitCount > 0 && (a.GetTopZone().FindDeepestZone() == a || EClass.pc.homeZone == a) 
	where a != EClass._zone && a.IsReturnLocation && a.GetTopZone().visitCount > 0 && (a.GetTopZone().FindDeepestZone() == a || EClass.pc.homeZone == a) && (!EClass.game.IsSurvival || a.IsNefia) 
	select a).ToList();
list2.Sort((Zone a, Zone b) => a.GetSortVal() - b.GetSortVal());
return list2;

StanceSongPebble

public override void TickSong()

cs
		}
		else
		{
			item.GetCondition<ConSongPebble>()?.SetValue(10, owner.Evalue(1294)); 
			item.GetCondition<ConSongPebble>()?.SetValue(10 + owner.Evalue(1294) * 2, owner.Evalue(1294)); 
		}
	}
}

StanceSongValor

public override void TickSong()

cs
		}
		else
		{
			item.GetCondition<ConSongValor>()?.SetValue(10); 
			item.GetCondition<ConSongValor>()?.SetValue(10 + owner.Evalue(1294) * 2, owner.Evalue(1294)); 
		}
	}
}

Steam

using System;

cs
using System;
using System.Collections; 
using System.Collections.Generic; 
using System.IO;
using System.Linq;
using HeathenEngineering.SteamworksIntegration;

public void CreateUserContent(BaseModPackage p)

cs
	};
	p.UpdateMeta(updateOnly: true);
	currentPackage = p;
	UgcQuery myPublished = UgcQuery.GetMyPublished(); 
	myPublished.SetReturnKeyValueTags(tags: true); 
	myPublished.Execute(CreateUserContent2); 
	QueryAllMyPublished(CreateOrUpdateUserContent, delegate(string error) 
	{ 
		LayerProgress.completed = true; 
		Debug.LogError(error); 
		Dialog.Ok("mod_publish_error"); 
	}); 
}

private void CreateUserContent2(UgcQuery query) 
public static void QueryAllMyPublished(Action<List<WorkshopItem>> onComplete, Action<string> onFail = null, float timeout = 10f) 
{
	Debug.Log("Creating Content2"); 
	BaseModPackage baseModPackage = currentPackage; 
	if (query.ResultsList != null) 
	List<WorkshopItem> results = new List<WorkshopItem>(); 
	HashSet<PublishedFileId_t> ids = new HashSet<PublishedFileId_t>(); 
	uint page = 1u; 
	bool done = false; 
	UgcQuery query = UgcQuery.GetMyPublished(); 
	ExecutePage(); 
	if (!done && (bool)Instance) 
	{ 
		Instance.StartCoroutine(Timeout()); 
	} 
	void ExecutePage() 
	{ 
		query.SetReturnKeyValueTags(tags: true); 
		if (!query.Execute(HandleResults)) 
		{ 
			ReportError("UgcQuery.Execute failed at page " + page); 
		} 
	} 
	void HandleResults(UgcQuery q) 
	{ 
		if (!done) 
		{ 
			results.AddRange(q.ResultsList.Where((WorkshopItem r) => ids.Add(r.FileId))); 
			if (q.ResultsList.Count == 0 || page >= q.pageCount) 
			{ 
				done = true; 
				query.Dispose(); 
				onComplete?.Invoke(results); 
			} 
			else
			{ 
				query.SetPage(++page); 
				ExecutePage(); 
			} 
		} 
	} 
	void ReportError(string error) 
	{
		Debug.Log(query.ResultsList.Count); 
		if (!done) 
		{ 
			done = true; 
			query.Dispose(); 
			if (onFail != null) 
			{ 
				onFail(error); 
			} 
			else
			{ 
				Debug.LogError(error); 
			} 
		} 
	}
	foreach (WorkshopItem results in query.ResultsList) 
	IEnumerator Timeout() 
	{ 
		uint lastPage = page; 
		float time = Time.realtimeSinceStartup; 
		while (!done) 
		{ 
			if (lastPage != page) 
			{ 
				lastPage = page; 
				time = Time.realtimeSinceStartup; 
			} 
			if (Time.realtimeSinceStartup - time > timeout) 
			{ 
				ReportError("UgcQuery timed out at page " + page + " (" + results.Count + " items fetched)"); 
				break; 
			} 
			yield return null; 
		} 
	} 
} 
private void CreateOrUpdateUserContent(List<WorkshopItem> items) 
{ 
	Debug.Log("Creating Content2"); 
	BaseModPackage baseModPackage = currentPackage; 
	Debug.Log(items.Count); 
	foreach (WorkshopItem item in items) 
	{
		if (results.keyValueTags == null) 
		if (item.keyValueTags.IsEmpty()) 
		{
			continue;
		}
		StringKeyValuePair[] keyValueTags = results.keyValueTags; 
		StringKeyValuePair[] keyValueTags = item.keyValueTags; 
		for (int i = 0; i < keyValueTags.Length; i++)
		{
			StringKeyValuePair stringKeyValuePair = keyValueTags[i];
			if (stringKeyValuePair.key == "id" && stringKeyValuePair.value == baseModPackage.id && results.Owner.id == User.Client.Id) 
			if (stringKeyValuePair.key == "id" && stringKeyValuePair.value == baseModPackage.id && item.Owner.IsMe) 
			{
				Debug.Log("Updating Content");
				UpdateUserContent(results.FileId); 
				UpdateUserContent(item.FileId); 
				return;
			}
		}

SurvivalManager

public bool gotGaragara

cs
	}
}

public bool gotPortal 
public bool gotSkyWorkbench 
{
	get
	{
		return bits[3]; 
		return bits[4]; 
	}
	set
	{
		bits[3] = value; 
		bits[4] = value; 
	}
}

private void _OnDeserialized(StreamingContext context)

cs
[JsonProperty]
public Zone gateZone;

[JsonProperty] 
public List<Zone> listGateZone = new List<Zone>(); 
public bool IsInRaid => GetRaidEvent() != null;

public ZoneEventRaid GetRaidEvent()

public void OnAdvanceHour()

cs
	}
	if (EClass.world.date.hour == 0 || EClass.debug.enable)
	{
		SetGateZone(); 
		RefreshGateZones(); 
	}
}

public void SetGateZone() 
public void RefreshGateZones() 
{
	if (EClass.rnd(3) == 0) 
	listGateZone.ForeachReverse(delegate(Zone z) 
	{
		IEnumerable<Spatial> ie = EClass.game.spatials.map.Values.Where((Spatial z) => z.source.tag.Contains("oneblock")); 
		gateZone = ie.RandomItem() as Zone; 
		if (z == null || z.destryoed) 
		{ 
			listGateZone.Remove(z); 
		} 
	}); 
	if (listGateZone.Count == 0) 
	{ 
		for (int i = 0; i < 3; i++) 
		{ 
			if (EClass.rnd(4) == 0) 
			{ 
				IEnumerable<Spatial> enumerable = EClass.game.spatials.map.Values.Where((Spatial a) => a.source.costSkyTravel > 0 && !listGateZone.Contains(a) && a != gateZone); 
				if (enumerable.Count() > 0) 
				{ 
					listGateZone.Add(enumerable.RandomItem() as Zone); 
				} 
			} 
			else
			{ 
				Zone item = EClass.world.region.CreateRandomSite(new Point(1, 1), (EClass.rnd(5) == 0) ? "dungeon_water" : null, updateMesh: false); 
				listGateZone.Add(item); 
			} 
		} 
	}
	else
	foreach (Zone item2 in listGateZone) 
	{
		gateZone = EClass.world.region.CreateRandomSite(new Point(1, 1), (EClass.rnd(5) == 0) ? "dungeon_water" : null, updateMesh: false); 
		if (item2.dateExpire > 0) 
		{ 
			item2.dateExpire = EClass.world.date.GetRaw() + 10080; 
		} 
	}
}

bool Next()

cs
	MeteorThing(pos2, "rolling_fortune", install: true);
	flags.gotGaragara = true;
}
else if (EClass.player.stats.days > 1 && !flags.gotPortal) 
else if (EClass.player.stats.days > 1 && !flags.gotSkyWorkbench) 
{
	MeteorThing(pos2, "teleporter_gate", install: true); 
	flags.gotPortal = true; 
	MeteorThing(pos2, ThingGen.CreateRecipe("workbench_sky")); 
	flags.gotSkyWorkbench = true; 
}
NextObj();
return true;

ThingGen

public static void CreateTreasureContent(Thing t, int lv, TreasureType type, boo…)

cs
t.Add("medal", EClass.rndHalf(8));
t.Add("book_skill", 1, lv);
t.Add("book_skill", 1, lv);
t.Add("ticket_sky", 25 + EClass.rnd(10)); 
t.c_lockLv /= 3;
TryAddScrubber(2);
break;

public static void CreateTreasureContent(Thing t, int lv, TreasureType type, boo…)

cs
	TryAddScrubber(30);
	break;
}
if (EClass.game.IsSurvival && type != TreasureType.SurvivalRaid && EClass.rnd(3) == 0) 
{ 
	t.Add("ticket_sky", 5 + EClass.rnd(10)); 
} 
if (type == TreasureType.RandomChest && EClass.rnd(2) == 0)
{
	t.AddCard(CreateFromCategory("junk", lv));

Trait

public void CookProgress()

cs
	}
}

public virtual bool CanOffer(Card tg) 
public virtual bool CanOffer(Chara cc, Card tg) 
{
	if (tg == null || tg.isChara || tg.trait.CanOnlyCarry)
	{

public void OfferProcess(Chara cc)

cs
}
foreach (Card item in owner.pos.ListCards())
{
	if (CanOffer(item)) 
	if (CanOffer(cc, item)) 
	{
		item.renderer.PlayAnime(AnimeID.Shiver);
	}

public void Offer(Chara cc)

cs
}
foreach (Card item in owner.pos.ListCards())
{
	if (CanOffer(item)) 
	if (CanOffer(cc, item)) 
	{
		item.Destroy();
		cc.depression.Mod(100);

TraitAltar

public override void TrySetAct(ActPlan p)

cs
	}
}

public override bool CanOffer(Card c) 
public override bool CanOffer(Chara cc, Card c) 
{
	if (c != null && c.HasTag(CTAG.godArtifact))
	{
		if (EClass.pc.IsEyth && EClass.pc.HasElement(1228)) 
		if (cc.IsEyth && cc.HasElement(1228)) 
		{
			if (IsEyth || Deity.IsValidArtifact(c.id))
			{

public override bool CanOffer(Card c)

cs
		return true;
	}
}
if (base.CanOffer(c) && (EClass.pc.faith.GetOfferingValue(c as Thing) > 0 || c.id == "water") && !c.isCopy) 
if (base.CanOffer(cc, c) && (cc.faith.GetOfferingValue(c as Thing) > 0 || c.id == "water") && !c.isCopy) 
{
	return !c.HasElement(764);
}

public void OnOffer(Chara c, Thing t)

cs
}
if (t.id == "water")
{
	if (Deity != EClass.pc.faith) 
	if (Deity != c.faith) 
	{
		if (t.blessedState == BlessedState.Cursed)
		{

public void OnOffer(Chara c, Thing t)

cs
		return;
	}
	Msg.Say("waterCurse", t);
	EClass.pc.PlayEffect("curse"); 
	EClass.pc.PlaySound("curse3"); 
	c.PlayEffect("curse"); 
	c.PlaySound("curse3"); 
	t.SetBlessedState(BlessedState.Cursed);
}
else if (t.blessedState == BlessedState.Blessed)

public void OnOffer(Chara c, Thing t)

cs
	else
	{
		Msg.Say("waterBless", t);
		EClass.pc.PlayEffect("revive"); 
		EClass.pc.PlaySound("revive"); 
		c.PlayEffect("revive"); 
		c.PlaySound("revive"); 
		t.SetBlessedState(BlessedState.Blessed);
	}
	return;
}
if (t.HasElement(766) && !Deity.IsEyth)
{
	Deity.PunishTakeOver(EClass.pc); 
	Deity.PunishTakeOver(c); 
	return;
}
if (!IsBranchAltar && EClass.pc.IsEyth && !EClass.pc.HasElement(1228)) 
if (!IsBranchAltar && c.IsEyth && !c.HasElement(1228)) 
{
	EClass.pc.Say("god_offerEyth", owner, t); 
	c.Say("god_offerEyth", owner, t); 
	return;
}
EClass.pc.Say("god_offer", owner, t, Deity.Name); 
if (!CanOffer(t)) 
c.Say("god_offer", owner, t, Deity.Name); 
if (!CanOffer(c, t)) 
{
	EClass.pc.Say("nothingHappens", owner, t); 
	c.Say("nothingHappens", owner, t); 
	return;
}
Effect.Get("debuff").Play(owner.pos);
EClass.pc.PlaySound("offering"); 
c.PlaySound("offering"); 
if (IsBranchAltar)
{
	Msg.Say("nothingHappens");
}
else if (IsEyth && !EClass.pc.HasElement(1228)) 
else if (IsEyth && !c.HasElement(1228)) 
{
	if (EClass.pc.IsEyth) 
	if (c.IsEyth) 
	{
		Msg.Say("nothingHappens");
	}
	else
	{
		Msg.Say("takeover_empty", EClass.pc.faith.Name); 
		TakeOver(); 
		Msg.Say("takeover_empty", c.faith.Name); 
		TakeOver(c); 
		_OnOffer(c, t, 2);
	}
}
else
{
	if (t.HasTag(CTAG.godArtifact) && (t.c_idDeity == Deity.id || (EClass.pc.IsEyth && EClass.pc.HasElement(1228)))) 
	if (t.HasTag(CTAG.godArtifact) && (t.c_idDeity == Deity.id || (c.IsEyth && c.HasElement(1228)))) 
	{
		_ = t.encLV;
		t.Destroy();
		Thing thing = EClass.game.religions.Reforge(t.id);
		if (EClass.pc.IsEyth && EClass.pc.HasElement(1228) && IsEyth) 
		if (c.IsEyth && c.HasElement(1228) && IsEyth) 
		{
			thing.c_idDeity = EClass.game.religions.Eyth.id;
		}

public void OnOffer(Chara c, Thing t)

cs
	}
	return;
}
if (EClass.pc.IsEyth && !EClass.pc.HasElement(1228)) 
if (c.IsEyth && !c.HasElement(1228)) 
{
	Msg.Say("nothingHappens");
	return;
}
if (Deity.id != EClass.pc.faith.id) 
if (Deity.id != c.faith.id) 
{
	bool flag = EClass.rnd(EClass.pc.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200) || IsEyth; 
	if (GetParam(1) != null || EClass.pc.IsEyth) 
	bool flag = EClass.rnd(c.faith.GetOfferingValue(t, t.Num)) > EClass.rnd(200) || IsEyth; 
	if (GetParam(1) != null || c.IsEyth) 
	{
		Msg.Say("nothingHappens");
		return;
	}
	Msg.Say("takeover_versus", EClass.pc.faith.Name, Deity.Name); 
	Msg.Say("takeover_versus", c.faith.Name, Deity.Name); 
	if (flag)
	{
		Msg.Say("takeover_success", EClass.pc.faith.TextGodGender); 
		Msg.Say("takeover_success2", EClass.pc.faith.Name); 
		TakeOver(); 
		Msg.Say("takeover_success", c.faith.TextGodGender); 
		Msg.Say("takeover_success2", c.faith.Name); 
		TakeOver(c); 
		_OnOffer(c, t, 5);
	}
	else
	{
		Msg.Say("takeover_fail", Deity.Name);
		Deity.PunishTakeOver(EClass.pc); 
		Deity.PunishTakeOver(c); 
	}
}
else

public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)

cs
if (offeringValue >= 200)
{
	Msg.Say("god_offer1", t);
	EClass.pc.faith.Talk("offer"); 
	c.faith.Talk("offer"); 
}
else if (offeringValue >= 100)
{

public void _OnOffer(Chara c, Thing t, int takeoverMod = 0)

cs
		{
			c.faith.Talk("like");
		}
		if (@bool) 
		if (@bool && c.IsPC) 
		{
			EClass.player.ModKarma(-1);
		}
	}

	public void TakeOver() 
	public void TakeOver(Chara c) 
	{
		SetDeity(EClass.pc.faith.id); 
		EClass.pc.faith.Talk("takeover"); 
		EClass.pc.PlayEffect("revive"); 
		SetDeity(c.faith.id); 
		c.faith.Talk("takeover"); 
		c.PlayEffect("revive"); 
		owner.PlayEffect("aura_heaven");
	}
}

TraitContainer

using UnityEngine;

cs
using UnityEngine; 
public class TraitContainer : TraitBaseContainer
{
	public override bool CanStack => false;

public virtual void Open()

cs
}
else if (LayerInventory.CreateContainer(owner.Thing) != null)
{
	TooltipManager.Instance.HideTooltips(immediate: true); 
	Debug.Log("a"); 
	if (InvStyle.sound != null)
	{
		InvStyle.sound.Play();

TraitLandingPortal

public class TraitLandingPortal : TraitItem

cs
public class TraitLandingPortal : TraitItem
{
	public override bool CanBeDestroyed => false; 
	public override bool CanOnlyCarry => true; 
	public override bool CanPutAway => false; 
	public override bool IsAnimeOn => IsOn;

	public override bool UseAltTiles => IsOn;

	public override bool CanUseFromInventory => false;

	public override bool IsOn => EClass.game.survival?.gateZone != null; 
	public override bool IsOn
	{ 
		get
		{ 
			if (EClass.game.IsSurvival && EClass.game.survival.gateZone != null && !EClass.game.survival.gateZone.destryoed && owner.IsInstalled) 
			{ 
				return EClass._zone.IsPCFaction; 
			} 
			return false; 
		} 
	} 

	public override bool CanUse(Chara c)
	{

public override bool CanUse(Chara c)

cs
public override bool OnUse(Chara c)
{
	if (!EClass.game.IsSurvival) 
	{ 
		Msg.SayNothingHappen(); 
		return false; 
	} 
	Zone gateZone = EClass.game.survival.gateZone;
	if (gateZone == null || gateZone.destryoed || gateZone == EClass.game.activeZone || EClass.game.activeZone.IsRegion)
	{

+TraitSkyHelm

File Created
cs
using UnityEngine;

public class TraitSkyHelm : TraitItem
{
	public override bool OnUse(Chara c)
	{
		if (!EClass.game.IsSurvival)
		{
			Msg.SayNothingHappen();
			return false;
		}
		EClass.game.survival.RefreshGateZones();
		int ticket = EClass.pc.GetCurrency("ticket_sky");
		EClass.ui.AddLayer<LayerList>().ManualList(delegate(UIList list, LayerList l)
		{
			list.moldItem = Resources.Load<ButtonElement>("UI/Element/Button/ButtonSkyTravel").transform;
			list.callbacks = new UIList.Callback<Zone, ButtonElement>
			{
				onClick = delegate(Zone a, ButtonElement b)
				{
					int costSkyTravel = a.GetCostSkyTravel();
					if (costSkyTravel > 0 && costSkyTravel > ticket)
					{
						if (EClass.debug.enable)
						{
							EClass.pc.ModCurrency(costSkyTravel * 2, "ticket_sky");
						}
						SE.Beep();
					}
					else
					{
						EClass.ui.FlashCover(1f, 0.5f, 1f, null, null, Color.black);
						EClass.pc.ModCurrency(-costSkyTravel, "ticket_sky");
						EClass.game.survival.gateZone = a;
						SE.Play("ship_bell");
						EClass.game.survival.listGateZone.Clear();
						EClass.ui.CloseLayers();
						EClass.pc.pos.TalkWitnesses(EClass.pc, "ahoy", 6, WitnessType.everyone, (Chara c) => true);
					}
				},
				onRedraw = delegate(Zone a, ButtonElement b, int i)
				{
					int cost = a.GetCostSkyTravel();
					b.mainText.text = a.NameWithDangerLevel;
					b.subText2.text = ((cost == 0) ? "-" : (cost.ToString() ?? "")).TagColor(() => ticket >= cost || cost == 0);
					b.RebuildLayout();
				},
				onInstantiate = delegate
				{
				},
				onList = delegate
				{
					foreach (Zone item in EClass.game.survival.listGateZone)
					{
						list.Add(item);
					}
				}
			};
		}).SetSize()
			.SetTitles("wSkyTravel")
			.windows[0].AttachCurrency().Build(new UICurrency.Options
		{
			ticketSky = true
		});
		return false;
	}
}

+TraitSkyIncinerator

File Created
cs
public class TraitSkyIncinerator : TraitRecycle
{
}

-TraitStarHelm

File Removed
cs
public class TraitStarHelm : TraitItem
{
}

-TraitStarIncinerator

File Removed
cs
public class TraitStarIncinerator : TraitRecycle
{
}

UICurrency

public class Options

cs
	public bool casino;

	public bool weight;
	public bool ticketSky; 
}

public class Item

public void Build()

cs
{
	Add(EMono.sources.cards.map["ecopo"].GetSprite(), "ecopo", () => EMono.pc.GetCurrency("ecopo").ToString("#,0") ?? "");
}
if (options.ticketSky) 
{ 
	Add(EMono.sources.cards.map["ticket_sky"].GetSprite(), "ticket_sky", () => EMono.pc.GetCurrency("ticket_sky").ToString("#,0") ?? ""); 
} 
if (options.influence)
{
	Add(icons[3], "influence", () => EMono._zone.influence.ToString() ?? "");

Zone

public int GetDeepestLv(ref int max)

cs
	return max;
}

public int GetCostSkyTravel() 
{ 
	if (base.source.costSkyTravel > 0) 
	{ 
		return base.source.costSkyTravel; 
	} 
	if (EClass.game.IsSurvival) 
	{ 
		return Mathf.Clamp(10 + EClass.curve(DangerLv, 50, 10), 1, 200); 
	} 
	return 0; 
} 
public List<Element> ListLandFeats()
{
	if (landFeats == null)