Skip to content

EA 23.217 Nightly

October 11, 2025

11 files modified. 1 new file created.

Important Changes

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

CardBlueprint (1)

cs
public static void Set(CardBlueprint _bp) 
public static void Set(CardBlueprint _bp = null) 

ActRanged

public override bool Perform()

cs
			if (!item2.Equals(obj))
			{
				Chara firstChara = item2.FirstChara;
				if ((firstChara == null || firstChara.IsHostile(Act.CC)) && (firstChara != null || scatter != 0)) 
				if ((firstChara == null || firstChara.IsHostile(Act.CC)) && (firstChara != null || scatter != 0) && (scatter <= 0 || EClass.rnd(EClass.rnd(100) + 1) <= scatter)) 
				{
					Shoot(item2.FirstChara, item2); 
					Shoot(item2.FirstChara ?? item2.FindThing<TraitTrainingDummy>()?.owner, item2); 
				}
			}
		}

AttackProcess

public void PlayRangedAnime(int numFire, float delay = 0f)

cs
		{
			if (EClass.core.IsGameStarted && _CC.IsAliveInCurrentZone && _zone == _CC.currentZone)
			{
				string id = _weapon.id; 
				if (!(id == "gun_rail")) 
				switch (_weapon.id) 
				{
					if (id == "gun_laser") 
					{ 
						_CC.PlayEffect("laser").GetComponent<SpriteBasedLaser>().Play(_TP.PositionCenter()); 
					} 
					else
				case "gun_rail":
					_CC.PlayEffect("laser_rail").GetComponent<SpriteBasedLaser>().Play(_TP.PositionCenter()); 
					break; 
				case "gun_laser": 
					_CC.PlayEffect("laser").GetComponent<SpriteBasedLaser>().Play(_TP.PositionCenter()); 
					break; 
				case "gun_laser_assault": 
					Effect.Get("ranged_laser")._Play(_CC.pos, _CC.isSynced ? _CC.renderer.position : _CC.pos.Position(), 0f, _TP, data.sprite); 
					break; 
				default: 
				{ 
					Effect effect = Effect.Get("ranged_arrow")._Play(_CC.pos, _CC.isSynced ? _CC.renderer.position : _CC.pos.Position(), 0f, _TP, data.sprite); 
					if (isCane) 
					{
						Effect effect = Effect.Get("ranged_arrow")._Play(_CC.pos, _CC.isSynced ? _CC.renderer.position : _CC.pos.Position(), 0f, _TP, data.sprite); 
						if (isCane) 
						{ 
							effect.sr.color = effColor; 
						} 
						effect.sr.color = effColor; 
					}
					break; 
				}
				else
				{ 
					_CC.PlayEffect("laser_rail").GetComponent<SpriteBasedLaser>().Play(_TP.PositionCenter()); 
				}
				if (data.eject)
				{

Card

public void SpawnLoot(Card origin)

cs
		}
		if (Chara.IsMachine)
		{
			bool flag3 = Chara.HasElement(1248); 
			if (chance(20))
			{
				list.Add(ThingGen.Create("microchip")); 
				list.Add(ThingGen.Create(flag3 ? "scrap" : "microchip")); 
			}
			if (chance(15))
			{
				list.Add(ThingGen.Create("battery")); 
				list.Add(ThingGen.Create(flag3 ? "bolt" : "battery")); 
			}
		}
		else

CardBlueprint

public static CardBlueprint Chara(int lv, Rarity rarity = Rarity.Normal)

cs
		};
	}

	public static void Set(CardBlueprint _bp) 
	public static void Set(CardBlueprint _bp = null) 
	{
		current = _bp; 
		current = _bp ?? _Default; 
	}

	public static void SetNormalRarity(bool fixedMat = false)

CardRenderer

public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)

cs
					drawShadow = traitFigure.ShowShadow;
					pref = row.pref;
				}
				if (renderData.pass != null && EClass.pc.held == owner) 
				p.x += pref.x * (float)((owner.dir % 2 == 0) ? 1 : (-1)); 
				p.y += pref.y; 
				p.z += pref.z; 
				if (owner.noShadow || !owner.IsInstalled) 
				{
					int num = (int)renderData.pass.pmesh.tiling.x; 
					string id = renderData.pass.name; 
					if (!(id == "pass charaL")) 
					{ 
						if (id == "pass charaLW") 
						{ 
							if (p.tile < 0f) 
							{ 
								p.tile *= -1f; 
							} 
							p.tile = (int)p.tile / num * num * 4 + (int)p.tile % num * 2; 
						} 
					} 
					else
					{ 
						p.tile = (int)p.tile / num * num * 2 + (int)p.tile % num; 
					} 
					drawShadow = false; 
				}
			}
			else

public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)

cs
	{
		RenderObject.tempV = position;
		RenderObject.tempV.y += data.offset.y + data.size.y;
		for (int num2 = listTC.Count - 1; num2 >= 0; num2--) 
		for (int num = listTC.Count - 1; num >= 0; num--) 
		{
			listTC[num2].OnDraw(ref RenderObject.tempV); 
			listTC[num].OnDraw(ref RenderObject.tempV); 
		}
	}
	if (owner.trait.RenderExtra)

Chara

public bool CanDuplicate()

cs
	{
		return false;
	}
	if (CurrentGeneSlot != 0) 
	{ 
		return false; 
	} 
	if (id == "mech_scarab" && (isSynced || pos.cell.light > 0 || (!EClass._map.IsIndoor && !pos.cell.HasRoof && !EClass.world.date.IsNight)))
	{
		return false;

public Chara Duplicate()

cs
	chara.RefreshFaithElement();
	chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
	chara.isCopy = true;
	chara.isScaled = base.isScaled; 
	if (HaveFur())
	{
		chara.c_fur = -1;

public void RestockEquip(bool onCreate)

cs
	case "mech_angel":
		if (onCreate)
		{
			CardBlueprint.Set(); 
			Thing thing = ThingGen.Create("pole_holy");
			thing.SetReplica(on: true);
			thing.rarity = Rarity.Normal;

public void TryDropBossLoot()

cs
		EClass.Sound.StopBGM(3f);
		EClass._zone.SetBGM(1, refresh: false);
		break;
	case "doga":
	{ 
		QuestCurry questCurry = EClass.game.quests.Get<QuestCurry>(); 
		if (questCurry != null) 
		{ 
			num = 5; 
			flag = (flag2 = true); 
			EClass.Sound.StopBGM(3f); 
			EClass._zone.SetBGM(1, refresh: false); 
			questCurry.NextPhase(); 
		} 
		break; 
	} 
	case "fairy_raina":
	case "fairy_poina":
	{

CoreDebug

public void UpdateInput()

cs
	bool key3 = Input.GetKey(KeyCode.LeftControl);
	TraitStairs traitStairs = null;
	if (Input.GetKeyDown(KeyCode.KeypadPlus) || (EInput.isShiftDown && Input.GetKeyDown(KeyCode.Period)))
	{ 
		TraitStairsLocked traitStairsLocked = EClass._map.FindThing<TraitStairsLocked>(); 
		if (traitStairsLocked != null && EClass._zone.CanUnlockExit) 
		{ 
			traitStairsLocked.OnUse(EClass.pc); 
		} 
	} 
	if (Input.GetKeyDown(KeyCode.KeypadPlus) || (EInput.isShiftDown && Input.GetKeyDown(KeyCode.Period))) 
	{
		traitStairs = EClass._map.FindThing<TraitStairsDown>();
	}

ElementContainer

void AddElements(ElementContainer container, bool isGlobal)

cs
	public List<Element> ListBestAttributes()
	{
		List<Element> obj = ListElements((Element a) => a.HasTag("primary"));
		obj.Sort((Element a, Element b) => (b.ValueWithoutLink - a.ValueWithoutLink) * 100000 + a.id - b.id); 
		obj.Sort((Element a, Element b) => (int)((long)(b.ValueWithoutLink - a.ValueWithoutLink) * 100000L + a.id - b.id)); 
		return obj;
	}

	public List<Element> ListBestSkills()
	{
		List<Element> obj = ListElements((Element a) => a.source.category == "skill");
		obj.Sort((Element a, Element b) => (b.ValueWithoutLink - a.ValueWithoutLink) * 100000 + a.id - b.id); 
		obj.Sort((Element a, Element b) => (int)((long)(b.ValueWithoutLink - a.ValueWithoutLink) * 100000L + a.id - b.id)); 
		return obj;
	}

+QuestCurry

File Created
cs
public class QuestCurry : QuestSequence
{
	public override void OnComplete()
	{
	}
}

Trait

public void OnBarter()

cs
			case ShopType.Medal:
				NoRestockId("sword_dragon");
				Add("sword_dragon", 1, 0).SetReplica(on: true);
				NoRestockId("point_stick"); 
				Add("point_stick", 1, 0).SetReplica(on: true); 
				NoRestockId("blunt_bonehammer");
				Add("blunt_bonehammer", 1, 0).SetReplica(on: true);
				NoRestockId("pole_gunlance");

TraitAmmoRocket

public class TraitAmmoRocket : TraitAmmo

cs
public class TraitAmmoRocket : TraitAmmo
{
	public override int DefaultStock => 10 + EClass.rnd(50); 
	public override int CraftNum => 20; 
}

Zone_CurryRuinDungeon

public class Zone_CurryRuinDungeon : Zone_QuestDungeon

cs

	public override bool LockExit => base.lv <= -1;

	public override bool CanUnlockExit => EClass.game.quests.IsStarted<QuestCurry>(); 
	public override string idExport
	{
		get

public override string idExport

cs
			{
				return base.idExport;
			}
			return "vernis_mine_boss"; 
			return "curry_boss"; 
		}
	}