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)