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
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
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
cs
}
}
public int defaultAltitude
{
get
{
return ints[23];
}
set
{
ints[23] = value;
}
}
public float heightFix
{
getSourceThingV
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
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
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)
{