Skip to content

EA 23.335 Nightly

August 12, 2026

12 files modified.

Important Changes

None.

ACT

public bool CanPerform(Chara _cc, Card _tc = null, Point _tp = null)

cs
if (tt.Range == TargetRange.Self)
{
	TP.Set(CC.pos);
	TC = CC; 
	return CanPerform();
}
if (CC.IsPC && EClass.core.config.game.shiftToUseNegativeAbilityOnSelf)

AM_Adv

public void UpdateLangWheel()

cs
{
	textWheel = null;
	textMiddle = null;
	if (planRight.HasAct) 
	if (!planRight.HasAct) 
	{
		if (EClass.scene.mouseTarget.pos.Distance(EClass.pc.pos) <= 1 && HotItemHeld.CanChangeHeightByWheel()) 
		{ 
			textWheel = "textWheel_changeHeight".lang(); 
		} 
		else if (HotItemHeld.CanRotate()) 
		return; 
	} 
	if (EClass.scene.mouseTarget.pos.Distance(EClass.pc.pos) <= 1 && HotItemHeld.CanChangeHeightByWheel()) 
	{ 
		textWheel = "textWheel_changeHeight".lang(); 
		if (HotItemHeld.taskBuild != null && HotItemHeld.taskBuild.altitude > 0) 
		{
			textMiddle = "textMiddle_rotate".lang(EInput.keys.mouseMiddle.key.ToString() ?? ""); 
			textWheel = textWheel + " (+" + HotItemHeld.taskBuild.altitude + ")"; 
		}
		EClass.ui.hud.textWheel.SetText(textWheel.IsEmpty("")); 
		EClass.ui.hud.textMiddle.SetText(textMiddle.IsEmpty("")); 
	}
	else if (HotItemHeld.CanRotate()) 
	{ 
		textMiddle = "textMiddle_rotate".lang(EInput.keys.mouseMiddle.key.ToString() ?? ""); 
	} 
	EClass.ui.hud.textWheel.SetText(textWheel.IsEmpty("")); 
	EClass.ui.hud.textMiddle.SetText(textMiddle.IsEmpty("")); 
}

public void ClearPlans()

AM_Build

public override bool IsFillMode()

cs
public override int TopHeight(Point p)
{
	return bridgeHeight + ((!recipe.tileType.AltitudeAsDir) ? altitude : 0); 
	if (!recipe.IsThing) 
	{ 
		return bridgeHeight + ((!recipe.tileType.AltitudeAsDir) ? altitude : 0); 
	} 
	if (altitude != 0) 
	{ 
		return altitude; 
	} 
	return -1; 
}

public override HitResult HitResultOnDesignation(Point p)

public void StartBuild(Recipe r, Func<ButtonGrid> _button)

cs
	}
	CreateNewMold();
	bridgeHeight = -1;
	SetAltitude(0); 
	SetAltitude(r.renderRow.GetPref()?.defaultAltitude ?? 0); 
	base.Summary.SetRecipe(r);
	EClass.ui.hud.hint.Refresh();
}

AM_MoveInstalled

public override bool CanInstaComplete(TaskMoveInstalled t)

cs
	return EClass.player.instaComplete;
}

public override int TopHeight(Point p) 
{ 
	if (target != null && moldCard != null && moldCard.altitude != 0) 
	{ 
		return moldCard.altitude; 
	} 
	return -1; 
} 
public override MeshPass GetGuidePass(Point point)
{
	return EClass.screen.guide.passGuideBlock;

HotItemHeld

public HotItemHeld(Thing t)

cs
public override void OnSetCurrentItem()
{
	ActionMode.Build.altitude = 0; 
	ActionMode.Build.altitude = thing.Pref.defaultAltitude; 
	disableTool = false;
	if (EClass.pc.held != thing)
	{

Msg

public static bool IsThirdPerson(string n)

cs
{
	if (!int.TryParse(n, out var result))
	{
		return false; 
		if (n.IsEmpty() || !int.TryParse(n.Split(' ')[0], out var result2)) 
		{ 
			return true; 
		} 
		return IsThirdPerson(result2); 
	}
	return IsThirdPerson(result);
}

SourcePref

public int scaleIcon

cs
	}
}

public int defaultAltitude 
{ 
	get 
	{ 
		return ints[23]; 
	} 
	set 
	{ 
		ints[23] = value; 
	} 
} 
public float heightFix
{
	get

SourceThingV

public override void OnAfterImportData()

cs
row.recipeKey = row3.recipeKey;
if (!row3.parse.IsEmpty())
{
	key = row3._origin; 
	switch (key) 
	string[] parse = row3.parse; 
	for (int i = 0; i < parse.Length; i++) 
	{
	case "lamp_ceil2": 
	case "window": 
	case "windowL": 
		row.idExtra = row3.parse[0]; 
		break; 
	default: 
	{ 
		string[] parse = row3.parse; 
		for (int i = 0; i < parse.Length; i++) 
		string[] array = parse[i].Split('/'); 
		key = array[0]; 
		switch (key) 
		{
			string[] array = parse[i].Split('/'); 
			switch (array[0]) 
		case "elec": 
			row.electricity = array[1].ToInt(); 
			break; 
		case "render": 
			row._idRenderData = array[1]; 
			break; 
		case "tiletype": 
			row._tileType = array[1]; 
			break; 
		case "anime": 
			row.anime = ((array.Length <= 4) ? ((array.Length <= 3) ? new int[2] 
			{
			case "elec":
				row.electricity = array[1].ToInt(); 
				break; 
			case "render":
				row._idRenderData = array[1]; 
				break; 
			case "tiletype":
				row._tileType = array[1]; 
				break; 
			case "anime":
				row.anime = ((array.Length <= 4) ? ((array.Length <= 3) ? new int[2] 
				{ 
					array[1].ToInt(), 
					array[2].ToInt() 
				} : new int[3] 
				{ 
					array[1].ToInt(), 
					array[2].ToInt(), 
					array[3].ToInt() 
				}) : new int[4] 
				{ 
					array[1].ToInt(), 
					array[2].ToInt(), 
					array[3].ToInt(), 
					array[4].ToInt() 
				}); 
				break; 
			case "skin":
				array[1].ToInt(), 
				array[2].ToInt() 
			} : new int[3] 
			{
				string[] array3 = array[1].Split('|'); 
				row.skins = new int[array3.Length]; 
				for (int k = 0; k < array3.Length; k++) 
				{ 
					row.skins[k] = array3[k].ToInt(); 
				} 
				break; 
			} 
			case "alt":
				array[1].ToInt(), 
				array[2].ToInt(), 
				array[3].ToInt() 
			}) : new int[4] 
			{
				string[] array2 = array[1].Split('|'); 
				row.altTiles = new int[array2.Length]; 
				for (int j = 0; j < array2.Length; j++) 
				{ 
					row.altTiles[j] = array2[j].ToInt(); 
				} 
				row.ignoreAltFix = true; 
				break; 
			} 
			case "naming":
				row.naming = array[1]; 
				break; 
			case "ex":
				row.idActorEx = array[1]; 
				break; 
			case "sound":
				row.idSound = array[1]; 
				break; 
			case "color":
				row.colorMod = 100; 
				break; 
			case "no_color":
				row.colorMod = 0; 
				break; 
			case "unique":
				row.quality = 4; 
				break; 
			case "ele":
				array[1].ToInt(), 
				array[2].ToInt(), 
				array[3].ToInt(), 
				array[4].ToInt() 
			}); 
			break; 
		case "skin": 
		{ 
			string[] array3 = array[1].Split('|'); 
			row.skins = new int[array3.Length]; 
			for (int k = 0; k < array3.Length; k++) 
			{
				int[] second = new int[2] 
				{ 
					Core.GetCurrent().sources.elements.alias[array[1]].id, 
					array[2].ToInt() 
				}; 
				row.elements = row.elements.Concat(second).ToArray(); 
				break; 
				row.skins[k] = array3[k].ToInt(); 
			}
			break; 
		} 
		case "alt": 
		{ 
			string[] array2 = array[1].Split('|'); 
			row.altTiles = new int[array2.Length]; 
			for (int j = 0; j < array2.Length; j++) 
			{ 
				row.altTiles[j] = array2[j].ToInt(); 
			}
			row.ignoreAltFix = true; 
			break; 
		} 
		case "naming": 
			row.naming = array[1]; 
			break; 
		case "ex": 
			row.idActorEx = array[1]; 
			break; 
		case "extra": 
			row.idExtra = array[1]; 
			break; 
		case "noWindowLight": 
			row.idExtra = ""; 
			row.altTiles = (row._altTiles = new int[0]); 
			break; 
		case "sound": 
			row.idSound = array[1]; 
			break; 
		case "color": 
			row.colorMod = 100; 
			break; 
		case "no_color": 
			row.colorMod = 0; 
			break; 
		case "unique": 
			row.quality = 4; 
			break; 
		case "ele": 
		{ 
			int[] second = new int[2] 
			{ 
				Core.GetCurrent().sources.elements.alias[array[1]].id, 
				array[2].ToInt() 
			}; 
			row.elements = row.elements.Concat(second).ToArray(); 
			break; 
		} 
		}
		break; 
	} 
	}
}
OnImportRow(row3, row);

Thing

public override bool CanStackTo(Thing to)

cs
	}
	foreach (Element value in elements.dict.Values)
	{
		if (to.elements.GetElement(value.id) == null) 
		Element element = to.elements.GetElement(value.id); 
		if (element == null) 
		{
			return false;
		}
		if (element.Value != value.Value) 
		{ 
			_ = value.id; 
			_ = 770; 
		} 
	}
	int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
	base.encLV = num2;
	foreach (Element value2 in elements.dict.Values)
	{
		Element element = to.elements.GetElement(value2.id); 
		value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num)); 
		Element element2 = to.elements.GetElement(value2.id); 
		value2.vBase = (element2.vBase = (value2.vBase * base.Num + element2.vBase * to.Num) / (base.Num + to.Num)); 
	}
	return true;
}

public override bool CanStackTo(Thing to)

cs
}
foreach (Element value3 in elements.dict.Values)
{
	Element element2 = to.elements.GetElement(value3.id); 
	if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10) 
	Element element3 = to.elements.GetElement(value3.id); 
	if (element3 == null || value3.vBase / 10 * 10 != element3.vBase / 10 * 10) 
	{
		return false;
	}

ThingGen

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

cs
	TryAddScrubber(5);
	break;
case TreasureType.SurvivalRaid:
	t.Add("plat", EClass.rndHalf(Mathf.Min(3 + num / 10, 15))); 
	t.Add("money2", EClass.rndHalf(Mathf.Min(3 + num / 10, 10))); 
{ 
	miracleChance += 50; 
	t.Add("plat", EClass.rndHalf(Mathf.Min(3 + num / 5, 50))); 
	t.Add("money2", EClass.rndHalf(Mathf.Min(3 + num / 5, 25))); 
	t.Add("medal", EClass.rndHalf(8));
	t.Add("book_skill", 1, lv);
	t.Add("book_skill", 1, lv);
	t.Add("rp_random", 1, lv); 
	t.Add("rp_random", 1, lv); 
	t.Add("rp_random", 1, lv); 
	t.Add("rp_food", 2, lv).SetLv(Mathf.Min(lv, 100)); 
	t.Add("rp_block", 2, lv).SetLv(Mathf.Min(lv, 100)); 
	t.Add("ticket_sky", 25 + EClass.rnd(10));
	t.c_lockLv /= 3; 
	int raidLv = EClass.game.survival.flags.raidLv; 
	if (raidLv < 50) 
	{ 
		t.Add((raidLv < 30) ? "crystal_earth" : ((raidLv < 40) ? "crystal_sun" : "crystal_mana")); 
	} 
	else
	{ 
		t.Add("book_skill", 1, lv); 
	} 
	t.c_lockLv = 0; 
	TryAddScrubber(2);
	break;
} 
case TreasureType.RandomChest:
	flag2 = false;
	miracleChance /= 2;

TraitLandingPortal

public override bool IsOn

cs
{
	get
	{
		if (EClass.game.IsSurvival && EClass.game.survival.gateZone != null && !EClass.game.survival.gateZone.destryoed && owner.IsInstalled) 
		if (EClass.game.IsSurvival && EClass.game.survival.gateZone != null && !EClass.game.survival.gateZone.destryoed && !EClass.game.survival.gateZone.CanDestroy() && owner.IsInstalled) 
		{
			return EClass._zone.IsPCFaction;
		}

WidgetDate

public void _Refresh()

cs
}
if (EMono._zone.idCurrentSubset != null)
{
	text += ("(" + (EMono._zone.idExport + "_" + EMono._zone.idCurrentSubset).lang() + ")").TagColor(colorFestival); 
	text += (" (" + (EMono._zone.idExport + "_" + EMono._zone.idCurrentSubset).lang() + ")").TagColor(colorFestival); 
}
if (EMono._zone.isPeace)
{