Skip to content

EA 23.201 Nightly

September 18, 2025

11 files modified.

Important Changes

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

RecipeManager (1)

cs
public bool CanCeomUpWithRecipe(string idRecipe) 
public LearnState GetRecipeLearnState(string idRecipe) 

ActEffect

public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po

cs
		CC.PlaySound("fire");
		CC.PlayEffect("Element/eleFire");
		CC.Say("burn_mana", CC);
		CC.mana.Mod(-CC.mana.max / 3); 
		CC.mana.Mod(-CC.mana.max / 3 - 1); 
		break;
	case EffectId.Exterminate:
	{

ActMelee

void _Attack(BodySlot slot)

cs
				frustration = GetWeaponEnc(624, addSelfEnc: true);
				int num3 = GetWeaponEnc(622, addSelfEnc: true);
				feint = GetWeaponEnc(623, addSelfEnc: true);
				knockback = GetWeaponEnc(603, addSelfEnc: true); 
				knockback = Act.CC.Evalue(603); 
				mod_talisman = GetWeaponEnc(609, addSelfEnc: true);
				List<Point> list2 = EClass._map.ListPointsInLine(Act.CC.pos, Act.TC.pos, num2 / 10 + ((num2 % 10 > EClass.rnd(10)) ? 1 : 0) + 1);
				if (w != null)

ActThrow

public static EffectIRenderer Throw(Card c, Point p, Card target, Thing t, Throw

cs
			c.ModExp(108, 100);
			if (traitMonsterBall.IsDuponneBall && EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 3)
			{
				EClass.Sound.StopBGM(3f); 
				EClass._zone.SetBGM(1, refresh: false); 
				EClass.game.quests.Get<QuestNegotiationDarkness>().NextPhase();
			}
		}

AttackProcess

public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
			ModExpDef(150, 90);
			ModExpDef(151, 90);
		}
		ProcAbility(list, CC, TC, weaponSkill.Value + GetTwoHandEncBonus(CC), subAttack); 
		ProcAbility(list, CC, TC, weaponSkill.Value * (100 + GetTwoHandEncBonus(CC)) / 100, subAttack); 
		return false;
	}
	if (TC.IsPC)

public bool Perform(int count, bool hasHit, float dmgMulti = 1f, bool maxRoll =

cs
				}
			}
		}
		ProcAbility(list, CC, TC, weaponSkill.Value + GetTwoHandEncBonus(CC), subAttack); 
		ProcAbility(list, CC, TC, weaponSkill.Value * (100 + GetTwoHandEncBonus(CC)) / 100, subAttack); 
	}
	if (!CC.IsAliveInCurrentZone || !TC.IsAliveInCurrentZone)
	{

BaseTaskHarvest

public override string GetText(string str = "")

cs
	}
	SetTarget(EClass.pc);
	string text = "tHarvest".lang(GetBaseText(str), (EClass.pc.Tool == null) ? "hand".lang() : owner.Tool.NameSimple, toolLv.ToString() ?? "");
	if (EClass.pc.HasElement(1661) && EClass.player.recipes.CanCeomUpWithRecipe(IdRecipe)) 
	if (EClass.pc.HasElement(1661)) 
	{
		text = text + " " + "TaskDisassemble_newrecipe".lang(); 
		RecipeManager.LearnState recipeLearnState = EClass.player.recipes.GetRecipeLearnState(IdRecipe); 
		switch (recipeLearnState) 
		{ 
		case RecipeManager.LearnState.Learnable: 
			text = text + " " + "TaskDisassemble_newrecipe".lang(); 
			break; 
		default: 
			text = text + " " + ("TaskDisassemble_" + recipeLearnState).lang(); 
			break; 
		case RecipeManager.LearnState.Unavailable: 
			break; 
		} 
	}
	text = text + " (" + GetTextDifficulty() + ")";
	if (IsTooHard)

Card

public void EjectSockets()

cs
				thing.refVal = ele;
				thing.encLV = num2;
			}
			EClass._map.TrySmoothPick(pos.IsBlocked ? EClass.pc.pos : pos, thing, EClass.pc); 
			EClass._map.TrySmoothPick((!ExistsOnMap || pos.IsBlocked) ? EClass.pc.pos : pos, thing, EClass.pc); 
			sockets[i] = 0;
		}
	}

CardRenderer

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

cs
	}
	if (isChara && owner.parent == EClass.game.activeZone)
	{
		if (owner.Chara.bossText && !EClass.ui.IsActive && !SplashText.Instance && (!(owner.id == "lurie_boss") || !owner.Chara.IsNeutralOrAbove())) 
		if (owner.Chara.bossText && !EClass.ui.IsActive && !SplashText.Instance && !LayerDrama.Instance && !owner.Chara.IsNeutralOrAbove()) 
		{
			SplashText splashText = Util.Instantiate<SplashText>("Media/Text/SplashText_boss2", EClass.ui.rectDynamic);
			string text = owner.Chara.Aka.ToTitleCase(wholeText: true);

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

cs
			splashText.textSmall.text = text;
			splashText.textBig.text = text2;
			owner.Chara.bossText = false;
			if (owner.id == "lurie_boss") 
			string id = owner.id; 
			if (!(id == "ungaga_pap")) 
			{
				if (EClass._zone is Zone_UnderseaTemple) 
				if (id == "lurie_boss") 
				{
					if (EClass._map.plDay.list.Count > 0 && EClass._map.plDay.list[0].data.id != 107) 
					if (EClass._zone is Zone_UnderseaTemple) 
					{
						EClass._zone.SetBGM(107); 
					} 
					if (EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 2) 
					{ 
						EClass.game.quests.Get<QuestNegotiationDarkness>().NextPhase(); 
						if (EClass._map.plDay.list.Count > 0 && EClass._map.plDay.list[0].data.id != 107) 
						{ 
							EClass._zone.SetBGM(107); 
						} 
						if (EClass.game.quests.GetPhase<QuestNegotiationDarkness>() == 2) 
						{ 
							EClass.game.quests.Get<QuestNegotiationDarkness>().NextPhase(); 
						} 
					}
					owner.PlaySound("warcry"); 
				}
				owner.PlaySound("warcry"); 
			} 
			else if (EClass._zone is Zone_DungeonMino) 
			{ 
				EClass._zone.SetBGM(107); 
			}
		}
		if (owner.Chara.host == null)

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

cs
				if (renderData.pass != null && EClass.pc.held == owner)
				{
					int num = (int)renderData.pass.pmesh.tiling.x;
					string name = renderData.pass.name; 
					if (!(name == "pass charaL")) 
					string id = renderData.pass.name; 
					if (!(id == "pass charaL")) 
					{
						if (name == "pass charaLW") 
						if (id == "pass charaLW") 
						{
							if (p.tile < 0f)
							{

Chara

public void TryDropBossLoot()

cs
			}
		}
		break;
	case "ungaga_pap":
		num = 5; 
		flag = (flag2 = true); 
		if (EClass._zone is Zone_DungeonMino) 
		{ 
			EClass.Sound.StopBGM(3f); 
			EClass._zone.SetBGM(46, refresh: false); 
		} 
		break; 
	case "melilith_boss":
		num = 5;
		flag = (flag2 = true);

GoalCombat

int GetAttackMod(Act a)

cs
		}
		int num6 = ((a.source.aliasRef == "mold") ? owner.MainElement.id : EClass.sources.elements.alias[a.source.aliasRef].id);
		int num7 = -15 * tc.ResistLvFrom(num6);
		if (a is ActSword) 
		{ 
			num7 = 0; 
		} 
		switch (num6)
		{
		case 910:

RecipeManager

``

cs

public class RecipeManager : EClass
{
	public enum LearnState
	{ 
		Unavailable, 
		InsufficientSkill, 
		AlreadyLearned, 
		Learnable
	} 
	public static bool rebuild;

	public static List<RecipeSource> list = new List<RecipeSource>();

public void ComeUpWithRandomRecipe(string idCat = null, int lvBonus = 0)

cs
		}
	}

	public bool CanCeomUpWithRecipe(string idRecipe) 
	public LearnState GetRecipeLearnState(string idRecipe) 
	{
		if (idRecipe.IsEmpty())
		{
			return false; 
			return LearnState.Unavailable; 
		}
		RecipeSource recipeSource = Get(idRecipe);
		if (recipeSource == null || EClass.player.recipes.knownRecipes.ContainsKey(idRecipe) || (!recipeSource.NeedFactory && !recipeSource.IsQuickCraft)) 
		if (recipeSource == null || (!recipeSource.NeedFactory && !recipeSource.IsQuickCraft)) 
		{
			return false; 
			return LearnState.Unavailable; 
		} 
		if (EClass.player.recipes.knownRecipes.ContainsKey(idRecipe)) 
		{ 
			return LearnState.AlreadyLearned; 
		}
		int id = recipeSource.GetReqSkill().id;
		if (EClass.pc.Evalue(id) + 5 < recipeSource.row.LV)
		{
			return false; 
			return LearnState.InsufficientSkill; 
		}
		return true; 
		return LearnState.Learnable; 
	}

	public void ComeUpWithRecipe(string idRecipe, int chanceForRandomRecipe = 0)

Zone

public void RefreshPlaylist()

cs
		}
	}

	public void ResetPlaylist() 
	{ 
		map._plDay.Clear(); 
		UnityEngine.Object.DestroyImmediate(map.plDay); 
		map.plDay = null; 
		RefreshPlaylist(); 
	} 
	public void RefreshBGM()
	{
		if (!EClass.pc.IsInActiveZone || EClass.player.simulatingZone)