Skip to content

EA 23.275 Nightly

February 23, 2026

14 files modified. 4 new files created.

Important Changes

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

Quest (1)

cs
public static Quest Create(string _id, string _idPerson = null, Chara c = null) 
public static Quest Create(string _id, string _idPerson = null, Chara c = null, bool assignQuest = true) 

AI_Sleep

public override void OnProgressComplete()

cs
		{
			owner._Move(base.target.pos);
		}
		owner.Sleep(base.target); 
		owner.Sleep(base.target, base.target.pos.FindThing<TraitPillow>()?.owner as Thing); 
	}
}

ActEffect

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

cs
					tc.elements.ModBase(64, -Mathf.Clamp(orCreateElement.vBase * power / 1000, 1, 5));
				}
			}
			cc.Say("lighten_curse", cc, tc); 
			cc.Say("lighten_curse", tc); 
		}
		else
		{

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

cs
					tc.elements.ModBase(64, Mathf.Clamp(orCreateElement.vBase * power / 1000, 1, 5));
				}
			}
			cc.Say("lighten", cc, tc); 
			cc.Say("lighten", tc); 
		}
		tc.c_weight = num5;
		tc.SetDirtyWeight();

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

cs
		}
		cc.PlaySound("mutation");
		cc.PlayEffect("identify");
		cc.Say("reconstruct", cc, tc); 
		cc.Say("reconstruct", tc); 
		EClass.game.cards.uidNext += EClass.rnd(30);
		int num6 = Mathf.Max(tc.genLv, tc.LV, EClass.player.stats.deepest);
		CardBlueprint.Set(new CardBlueprint

Chara

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
			}
			if (newPoint.cell.CanSuffocate())
			{
				AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true); 
				bool flag = HasElement(1252); 
				if (!flag) 
				{ 
					AddCondition<ConSuffocation>((Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true); 
				} 
				int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
				if (num4 >= 2)
				{

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
				}
				if (!isDead && !HasElement(429))
				{
					ModExp(200, 1 + num4 * 12); 
					ModExp(200, ((!flag) ? 1 : 10) + num4 * 12); 
				}
			}
			EClass.player.regionMoveWarned = false;

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
	Chara chara = ((ride == null) ? this : ride);
	if (!EClass._zone.IsRegion || chara.IsPC)
	{
		bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215)); 
		bool flag2 = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215)); 
		if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
		{
			flag = true; 
			flag2 = true; 
		}
		if (flag && newPoint.Distance(pos) <= 1) 
		if (flag2 && newPoint.Distance(pos) <= 1) 
		{
			Point randomNeighbor = pos.GetRandomNeighbor();
			if (CanMoveTo(randomNeighbor, allowDestroyPath: false))

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
	}
	Cell cell = newPoint.cell;
	Cell cell2 = pos.cell;
	bool flag2 = cell.HasLiquid && !IsLevitating; 
	bool flag3 = cell.HasLiquid && !IsLevitating; 
	bool hasBridge = cell.HasBridge;
	bool hasRamp = cell.HasRamp;
	bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow; 
	bool flag4 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow; 
	TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
	SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
	bool flag4 = cell.IsTopWater && !cell.isFloating; 
	bool flag5 = cell.IsTopWater && !cell.isFloating; 
	if (!EClass._zone.IsRegion)
	{
		if (cell.hasDoorBoat)
		{
			tileRow = FLOOR.sourceWood;
			row = MATERIAL.sourceOak;
			flag4 = false; 
			flag5 = false; 
		}
		else if (flag3 && !tileRow.ignoreSnow) 
		else if (flag4 && !tileRow.ignoreSnow) 
		{
			if (tileRow.tileType.IsWater)
			{

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
				tileRow = FLOOR.sourceSnow;
				row = MATERIAL.sourceSnow;
			}
			flag4 = false; 
			flag5 = false; 
		}
	}
	if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
	}
	if (isSynced)
	{
		string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default"))); 
		string text = ((flag3 || flag5) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default"))); 
		if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
		{
			text = cell.matObj.soundFoot;

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
			SoundManager.altLastData = IsPC;
			PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
		}
		if (!flag4) 
		if (!flag5) 
		{
			Scene scene = EClass.scene;
			PCOrbit pcOrbit = EClass.screen.pcOrbit;
			bool flag5 = scene.actionMode.gameSpeed > 1f; 
			bool flag6 = scene.actionMode.gameSpeed > 1f; 
			scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
			scene.psFoot.startColor = row.matColor;
			scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2)); 
			if (flag5 && IsPC) 
			scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag6) ? 1 : 2)); 
			if (flag6 && IsPC) 
			{
				scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
				scene.psSmoke.Emit(pcOrbit.emitSmoke);
			}
		}
		if (flag2 || flag4) 
		if (flag3 || flag5) 
		{
			Effect.Get("ripple").Play(newPoint);
		}

public override MoveResult _Move(Point newPoint, MoveType type = MoveType.Walk)

cs
			EClass.pc.SetPCCState(PCCState.ShoesOff);
		}
	}
	bool flag6 = flag4 || EClass._zone.IsUnderwater; 
	if (wasInWater != flag6) 
	bool flag7 = flag5 || EClass._zone.IsUnderwater; 
	if (wasInWater != flag7) 
	{
		wasInWater = flag6; 
		wasInWater = flag7; 
		RefreshSpeed();
	}
	hasMovedThisTurn = true;

public override void Tick()

cs
			hygiene.Mod(2);
		}
	}
	if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode) 
	if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode && !HasElement(1252)) 
	{
		AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
	}

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
	int i = 1;
	int num4 = 0;
	bool flag = a.IsTargetHostileParty();
	bool flag2 = ability.Has(a.id); 
	if (IsPC && HasCondition<StanceManaCost>())
	{
		num4 = Evalue(1657);

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
			});
		}
	}
	if (a is Spell && IsPC && a.vPotential < i) 
	if (a is Spell && IsPC && a.vPotential < i && !flag2) 
	{
		i = 1;
		_pts.Clear();

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
	{
		num3 = 1 + Evalue(1648);
	}
	if (IsPC && cost.cost > 0 && a.Value == 0 && !ability.Has(a.id)) 
	if (IsPC && cost.cost > 0 && a.Value == 0 && !flag2) 
	{
		Msg.SayNothingHappen();
		return false;

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
		if (IsPC)
		{
			_ = (i + 1) / 2;
			bool flag2 = ability.Has(a.id); 
			if (a.vPotential < i && !flag2)
			{
				Msg.Say("noSpellStock");

public bool UseAbility(Act a, Card tc = null, Point pos = null, bool pt = false)

cs
	}
	if (flag3 && !isDead)
	{
		if (IsPC && flag2 && a.vBase == 0 && a.PotentialAsStock) 
		{ 
			elements.ModBase(a.id, 1); 
		} 
		if (cost.cost > 0 && a.source.lvFactor > 0)
		{
			ModExp(a.id, spellExp);

CoreDebug

public void UpdateInput()

cs
	}
	if (Input.GetKeyDown(KeyCode.F3))
	{
		for (int i = 0; i < 10; i++) 
		{ 
			Thing thing = ThingGen.Create("egg_fertilized"); 
			thing.TryMakeRandomItem(40); 
			thing.SetEncLv(200); 
			EClass.pc.Pick(thing); 
		} 
		foreach (Chara deadChara in EClass._map.deadCharas) 
		{ 
			Debug.Log(deadChara); 
		} 
		EClass.core.steam.CheckUpdate(); 
		EClass.player.flags.loytelMartLv++; 
		Msg.Say("loytelmart:" + EClass.player.flags.loytelMartLv); 
		Guild.Fighter.relation.rank = 20; 
		Guild.Mage.relation.rank = 20; 
		Guild.Thief.relation.rank = 20; 
		Guild.Merchant.relation.rank = 20; 
		if (EClass.Branch != null) 
		{ 
			EClass.Branch.ModExp(EClass.Branch.GetNextExp()); 
		} 
		foreach (Chara item in EClass._map.charas.ToList()) 
		{ 
			item.AddExp(item.ExpToNext); 
			item.Vomit(); 
		} 
		EClass.pc.PlayEffect("boost"); 
		EClass.pc.PlaySound("boost"); 
		EClass.pc.elements.SetBase(306, 100); 
		EClass.pc.elements.SetBase(85, 100); 
		EClass.pc.feat += 10; 
		EClass.player.totalFeat += 10; 
		EClass.ui.Say("dawedadwwdaadwawdawd"); 
		EClass.ui.Say("fsefsefsefesf", EClass.core.refs.spriteNoIng); 
		return;
	}
	if (Input.GetKeyDown(KeyCode.F4))

public void UpdateInput()

cs
		if (Input.GetKey(KeyCode.F9))
		{
			EClass.scene.paused = false;
			for (int j = 0; j < advanceMin; j++) 
			for (int i = 0; i < advanceMin; i++) 
			{
				EClass.game.updater.FixedUpdate();
			}

public void UpdateInput()

cs
	{
		if (Input.GetMouseButtonDown(0))
		{
			foreach (Card item2 in list) 
			foreach (Card item in list) 
			{
				Debug.Log(item2.Name + "/" + item2.dir + "/" + item2.flipX + "/" + item2.angle); 
				Debug.Log(item.Name + "/" + item.dir + "/" + item.flipX + "/" + item.angle); 
			}
		}
		if (Input.GetMouseButtonDown(1))

public void UpdateInput()

cs
		}
		if (key)
		{
			foreach (Card item3 in EClass._map.Roaming.all) 
			foreach (Card item2 in EClass._map.Roaming.all) 
			{
				EClass._zone.RemoveCard(item3); 
				EClass._zone.RemoveCard(item2); 
			}
		}
		else if (hitPoint.detail != null)

public void UpdateInput()

cs
	{
		for (int num4 = hitPoint.detail.things.Count - 1; num4 >= 0; num4--)
		{
			Thing thing2 = hitPoint.detail.things[num4]; 
			Debug.Log(thing2.id + "/" + thing2.Pref.height + "/" + thing2.trait?.ToString() + "/" + thing2.source.tileType.CanStack + "/" + thing2.source.tileType?.ToString() + "/" + thing2.isSynced + "/" + RenderObject.syncList.Contains(thing2.renderer)); 
			Thing thing = hitPoint.detail.things[num4]; 
			Debug.Log(thing.id + "/" + thing.Pref.height + "/" + thing.trait?.ToString() + "/" + thing.source.tileType.CanStack + "/" + thing.source.tileType?.ToString() + "/" + thing.isSynced + "/" + RenderObject.syncList.Contains(thing.renderer)); 
		}
	}
	if (!Application.isEditor)

public void UpdateInput()

cs
		{
			break;
		}
		foreach (Card item4 in hitPoint.ListCards()) 
		foreach (Card item3 in hitPoint.ListCards()) 
		{
			item4.renderer.PlayAnime(num5.ToEnum<AnimeID>()); 
			item3.renderer.PlayAnime(num5.ToEnum<AnimeID>()); 
		}
		Debug.Log(num5.ToEnum<AnimeID>());
		break;

public void UpdateInput()

cs
	case DebugHotkey.Item:
		if (Input.GetKeyDown(KeyCode.Alpha1))
		{
			Thing thing3 = ThingGen.Create("stairsDown_cave"); 
			Thing thing2 = ThingGen.Create("stairsDown_cave"); 
			EClass._zone.AddCard(thing2, EClass.pc.pos); 
			thing2.SetPlaceState(PlaceState.installed); 
		} 
		if (Input.GetKeyDown(KeyCode.Alpha2)) 
		{ 
			Thing thing3 = ThingGen.Create("stairs"); 
			EClass._zone.AddCard(thing3, EClass.pc.pos);
			thing3.SetPlaceState(PlaceState.installed);
		}
		if (Input.GetKeyDown(KeyCode.Alpha2)) 
		if (Input.GetKeyDown(KeyCode.Alpha3)) 
		{
			Thing thing4 = ThingGen.Create("stairs"); 
			EClass._zone.AddCard(thing4, EClass.pc.pos); 
			Thing thing4 = ThingGen.Create("sign"); 
			EClass._zone.AddCard(thing4, hitPoint); 
			thing4.SetPlaceState(PlaceState.installed);
		}
		if (Input.GetKeyDown(KeyCode.Alpha3)) 
		if (Input.GetKeyDown(KeyCode.Alpha4)) 
		{
			Thing thing5 = ThingGen.Create("sign"); 
			Thing thing5 = ThingGen.Create("sign2"); 
			EClass._zone.AddCard(thing5, hitPoint);
			thing5.SetPlaceState(PlaceState.installed);
		}
		if (Input.GetKeyDown(KeyCode.Alpha4)) 
		if (Input.GetKeyDown(KeyCode.Alpha5)) 
		{
			Thing thing6 = ThingGen.Create("sign2"); 
			Thing thing6 = ThingGen.Create("well"); 
			EClass._zone.AddCard(thing6, hitPoint);
			thing6.SetPlaceState(PlaceState.installed);
		}
		if (Input.GetKeyDown(KeyCode.Alpha5)) 
		if (Input.GetKeyDown(KeyCode.Alpha6)) 
		{
			Thing thing7 = ThingGen.Create("well"); 
			Thing thing7 = ThingGen.Create("altar"); 
			EClass._zone.AddCard(thing7, hitPoint);
			thing7.SetPlaceState(PlaceState.installed);
		}
		if (Input.GetKeyDown(KeyCode.Alpha6)) 
		{ 
			Thing thing8 = ThingGen.Create("altar"); 
			EClass._zone.AddCard(thing8, hitPoint); 
			thing8.SetPlaceState(PlaceState.installed); 
		} 
		if (Input.GetKeyDown(KeyCode.Alpha7))
		{
			Thing t = ThingGen.Create("torch");

DramaCustomSequence

public void Build(Chara c)

cs
	}
	Step("_factionOther");
	Talk("what", StepDefault);
	if (!c.IsMarried) 
	{ 
		foreach (Thing item5 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement"))) 
		{ 
			Thing _t3 = item5; 
			Choice("daMarry".lang(item5.Name), "_marry").SetOnClick(delegate
			{ 
				destThing = _t3; 
			}); 
		} 
	} 
	if (c.IsMarried && EClass.debug.enable) 
	{ 
		Choice("daWed", "_wed"); 
	} 
	if (c.trait is TraitLoytel)
	{
		QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();

public void Build(Chara c)

cs
	{
		Choice("disableMove", "_disableMove");
	}
	if (!c.IsMarried) 
	{ 
		foreach (Thing item5 in EClass.pc.things.List((Thing a) => !a.c_isImportant && !a.isEquipped && a.c_uidAttune == 0 && (a.id == "amulet_engagement" || a.id == "ring_engagement"))) 
		{ 
			Thing _t3 = item5; 
			Choice("daMarry".lang(item5.Name), "_marry").SetOnClick(delegate
			{ 
				destThing = _t3; 
			}); 
		} 
	} 
	Choice((c.GetInt(123) == 0) ? "daSleepBeside" : "daSleepBeside2", "_sleepBeside");
	if (c.HasElement(1225))
	{

public void Build(Chara c)

cs
	_Talk("tg", GetTopic(c, "questAccept"));
	Method(delegate
	{
		Zone z2 = c.quest.CreateInstanceZone(c); 
		EClass.pc.MoveZone(z2, ZoneTransition.EnterState.Center); 
		Zone z3 = c.quest.CreateInstanceZone(c); 
		EClass.pc.MoveZone(z3, ZoneTransition.EnterState.Center); 
	}, null, StepEnd);
	Step("_questFull");
	_Talk("tg", GetTopic(c, "questFull"), text);

public void Build(Chara c)

cs
		});
	});
	End();
	Step("_wed"); 
	Method(delegate
	{ 
		TempTalkTopic(c.IsMarried ? "tail4" : (bird + "1"), null); 
		Choice("yes2", delegate
		{ 
			TempTalkTopic(bird + "2", "_wed2"); 
		}); 
		Choice("no2", StepDefault, cancel: true).SetOnClick(RumorChill); 
	}); 
	Step("_wed2"); 
	Method(delegate
	{ 
		Quest quest = Quest.Create("wedding", null, c, assignQuest: false); 
		EClass.game.quests.Start(quest); 
		Zone z2 = quest.CreateInstanceZone(c); 
		EClass.pc.MoveZone(z2, ZoneTransition.EnterState.Center); 
		LayerDrama.Activate("_adv", "general", "wedding", c); 
	}); 
	End(); 
	Step("_disableLoyal");
	Method(delegate
	{

DramaManager

public void ParseLine(Dictionary<string, string> item)

cs
			});
		});
		break;
	case "moveZone":
		AddEvent(delegate
		{ 
			EMono.player.MoveZone(EMono.pc.currentZone); 
		}); 
		break; 
	case "save":
		AddEvent(delegate
		{

FoodEffect

using System.Collections.Generic;

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

public class FoodEffect : EClass

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

cs
	case DNA.Type.Inferior:
		if (genes != null)
		{
			RemoveOldestDNA(); 
			RemoveDNA(fromOldest: false); 
		}
		return;
	case DNA.Type.Brain:
		if (genes != null) 
		{ 
			genes.items.Shuffle(); 
			Msg.Say("reconstruct", c2); 
			c2.Say("food_mind", c2); 
			c2.AddCondition<ConHallucination>(); 
		} 
		return;
	}
	if (excess > 0)
	{
		while (excess > 0 && genes != null && genes.items.Count != 0)
		{
			RemoveOldestDNA(); 
			RemoveDNA(fromOldest: true); 
		}
	}
	c_DNA.Apply(c2);

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

cs
	c2.PlaySound("ding_potential");
	SE.Play("mutation");
	c2.PlayEffect("identify");
	void RemoveOldestDNA() 
	void RemoveDNA(bool fromOldest) 
	{
		DNA dNA = genes.items[0]; 
		DNA dNA = (fromOldest ? genes.items[0] : genes.items.Last()); 
		CharaGenes.Remove(c2, dNA);
		excess -= dNA.slot;
	}

ID_Achievement

public enum ID_Achievement

cs
	FIAMA_CHEST,
	NERUN,
	PUTIT,
	ASHLAND_PIE 
	ASHLAND_PIE, 
	JURE_WATER, 
	WINDOW_CHARM 
}

InvOwner

public bool Process(bool startTransaction = false)

cs
			destInv.owner.Chara.Talk("tooHeavy");
			return false;
		}
		if (thing2.c_isImportant && destInv != inv && !destInv.owner.IsPC && destInv.DenyImportant) 
		if (thing2.c_isImportant && destInv != inv && !destInv.owner.IsPC && destInv.DenyImportant && thing2.c_uidAttune != destInv.owner.uid) 
		{
			Msg.Say("markedImportant");
			return false;

Quest

public virtual string RefDrama3

cs

	public virtual string NameDeliver => "";

	public static Quest Create(string _id, string _idPerson = null, Chara c = null) 
	public static Quest Create(string _id, string _idPerson = null, Chara c = null, bool assignQuest = true) 
	{
		Quest quest = ClassCache.Create<Quest>(EClass.sources.quests.map[_id].type.IsEmpty("Quest"), "Elin");
		quest.id = _id;

public static Quest Create(string _id, string _idPerson = null, Chara c = null)

cs
	}
	if (c != null)
	{
		quest.SetClient(c); 
		quest.SetClient(c, assignQuest); 
	}
	quest.Init();
	return quest;

+QuestWedding

File Created
cs
using Newtonsoft.Json;

public class QuestWedding : QuestInstance
{
	[JsonProperty]
	public int score;

	[JsonProperty]
	public int destScore = 10;

	[JsonProperty]
	public int sumMoney;

	public override DifficultyType difficultyType => DifficultyType.Music;

	public override string IdZone => "instance_wedding";

	public override string RewardSuffix => "Music";

	public override string RefDrama2 => destScore.ToString() ?? "";

	public override int KarmaOnFail => 0;

	public override ZoneEventQuest CreateEvent()
	{
		return new ZoneEventWedding();
	}

	public override ZoneInstanceRandomQuest CreateInstance()
	{
		return new ZoneInstanceWedding();
	}

	public override string GetTextProgress()
	{
		return "progressMusic".lang(score.ToString() ?? "", destScore.ToString() ?? "");
	}

	public override int GetRewardPlat(int money)
	{
		return difficulty + EClass.rnd(2);
	}

	public override void OnInit()
	{
		destScore = difficulty * 150;
		destScore += EClass.rnd(destScore / 5);
	}
}

Steam

using System;

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

public static bool HasDLC(ID_DLC id)

cs

	public static void GetAchievement(ID_Achievement id)
	{
		foreach (AchievementObject achievement in Instance.steamworks.settings.achievements) 
		try
		{
			if (achievement.Id == id.ToString()) 
			foreach (AchievementObject achievement in Instance.steamworks.settings.achievements) 
			{
				if (!achievement.IsAchieved) 
				if (achievement.Id == id.ToString()) 
				{
					achievement.Unlock(); 
					EClass.ui.Say("sys_acv".lang(achievement.Name), Resources.Load<Sprite>("Media/Graphics/Icon/Achievement/acv_" + id)); 
					SE.Play("achievement"); 
					achievement.Store(); 
					if (achievement.IsAchieved) 
					{ 
						return; 
					} 
					try
					{ 
						achievement.Unlock(); 
						EClass.ui.Say("sys_acv".lang(achievement.Name), Resources.Load<Sprite>("Media/Graphics/Icon/Achievement/acv_" + id)); 
						SE.Play("achievement"); 
						achievement.Store(); 
						return; 
					} 
					catch (Exception ex) 
					{ 
						Debug.LogError("Error Achievement 1:" + ex); 
						return; 
					} 
				}
				return; 
			}
		}
		catch (Exception ex2) 
		{ 
			Debug.LogError("Error Achievement 2:" + ex2); 
		} 
		Debug.Log("Achievement not found:" + id);
	}

TraitDrink

public override void OnDrink(Chara c)

cs
		c.RemoveCondition<ConAwakening>();
		return;
	}
	if (owner.id == "water_jure") 
	{ 
		Steam.GetAchievement(ID_Achievement.JURE_WATER); 
	} 
	ActEffect.Proc(IdEffect, Power, owner.blessedState, c, null, new ActRef
	{
		n1 = N1,

UI

public UIContextMenu CreateContextMenuInteraction()

cs

	public void Say(string text, Sprite sprite = null)
	{
		popSystem.PopText(text.lang(), sprite, "PopAchievement"); 
		popSystem.PopText(text.lang(), sprite, sprite ? "PopUIAchievement" : "PopUI"); 
		Debug.Log(text);
	}

UIHangIcon

``

cs

public class UIHangIcon : EMono
{
	public static int clicked; 
	public Image image;

	public UIButton button;

private void Awake()

cs

	public void OnClickCorner()
	{
		clicked++; 
		Debug.Log(clicked); 
		if (clicked >= 50) 
		{ 
			Steam.GetAchievement(ID_Achievement.WINDOW_CHARM); 
		} 
		SE.Play("Ambience/Random/windchime1");
	}

+ZoneEventWedding

File Created
cs
public class ZoneEventWedding : ZoneEventQuest
{
	public QuestWedding questMusic => base.quest as QuestWedding;

	public override void OnVisit()
	{
	}
}

+ZoneInstanceWedding

File Created
cs
public class ZoneInstanceWedding : ZoneInstanceRandomQuest
{
}

+Zone_Wedding

File Created
cs
public class Zone_Wedding : Zone_Civilized
{
	public override bool UseFog => false;

	public override bool RevealRoom => true;
}