EA 23.184 Nightly Patch 1
August 20, 2025
13 files modified. 2 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Point (1)
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false)
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false, int minRadius = 0)
Chara
public override void Die(Element e = null, Card origin = null, AttackSource atta
MakeEgg();
if (IsPCFaction)
{
EClass.Branch.RemoveMemeber(this);
homeBranch.RemoveMemeber(this);
}
}
PlayEffect("revive");
EClass.Sound.StopBGM(3f);
EClass._zone.SetBGM(1, refresh: false);
break;
case "fairy_raina":
case "fairy_poina":
{
bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
if (num2 && questNasu != null && questNasu.phase == 1)
{
num = 5;
flag = (flag2 = true);
EClass.Sound.StopBGM(3f);
EClass._zone.SetBGM(1, refresh: false);
EClass.player.DropReward(ThingGen.Create("backpack_holding"));
questNasu.NextPhase();
}
break;
}
case "isygarad":
{
num = 5;
CraftUtil
public static void WrapIngredient(Card product, Chara c, Card ing, WrapType wrap
if (value.IsFoodTraitMain)
{
int num = value.Value;
if (product.id == "lunch_dystopia" && (wrapType == WrapType.Dark || num < 0))
if (ing.id == "lunch_dystopia" && (wrapType == WrapType.Dark || num < 0))
{
num *= -1;
}
DramaManager
public void ParseLine(Dictionary<string, string> item)
flag2 = true;
lastTalk.AddChoice(new DramaChoice(text, jump, p2, cHECK, text4));
break;
case "addTempActor":
{
Person person = new Person(actor);
Chara chara = EMono.game.cards.globalCharas.Find(actor) ?? EMono._map.FindChara(actor);
if (chara != null)
{
person.SetChara(chara);
}
sequence.AddActor(actor, person);
break;
}
case "addActor":
{
if (actor == "god")
public void ParseLine(Dictionary<string, string> item)
case "destroy":
AddEvent(delegate
{
Chara chara = EMono._map.FindChara(p2);
if (chara != null)
Chara chara2 = EMono._map.FindChara(p2);
if (chara2 != null)
{
chara.Destroy();
chara2.Destroy();
}
else
{
public bool CheckIF(string IF)
return EMono.player.dialogFlags.TryGetValue(array[1], 0) == 0;
case "hasItem":
return EMono.pc.things.Find(array[1]) != null;
case "nasuDeliver":
if (EMono.game.quests.GetPhase<QuestNasu>() == 2)
{
return EMono.pc.things.Find("backpack_holding") != null;
}
return false;
case "isCompleted":
return EMono.game.quests.IsCompleted(array[1]);
case "costRecruit":
DramaOutcome
cc.ModAffinity(EMono.pc, -2);
}
public void nasu_join()
{
if (cc.id == "fairy_nanasu")
{
cc.MakeAlly();
}
}
public void melilith_friend()
{
if (cc.id == "melilith" && EMono.game.quests.completedIDs.Contains("melilith"))
DramaSequence
public DramaActor GetActor(string id)
{
return AddActor(id, new Person(id));
}
if (EClass.core.IsGameStarted)
{
Chara chara = EClass.game.cards.globalCharas.Find(id) ?? EClass._map.FindChara(id);
if (chara != null)
{
return AddActor(id, new Person(chara));
}
}
if (actors.Count <= 0)
{
return GetActor("narrator");
Party
public void AddMemeber(Chara c, bool showMsg = false)
WidgetRoster.SetDirty();
}
public Chara Find(string id)
{
foreach (Chara member in members)
{
if (member.id == id)
{
return member;
}
}
return null;
}
public void RemoveMember(Chara c)
{
if (c.host != null)
Point
public float GetAngle2(Point to)
return Mathf.Atan2(to.z - z, num) * 57.29578f;
}
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false)
public Point GetNearestPoint(bool allowBlock = false, bool allowChara = true, bool allowInstalled = true, bool ignoreCenter = false, int minRadius = 0)
{
Point p = new Point();
int num = 1;
int num2 = x;
int num3 = z;
if (IsValid(num2, num3))
int r = 1;
int num = x;
int num2 = z;
if (IsValid(num, num2))
{
return p;
}
if (IsValid(num2, num3 + 1))
if (IsValid(num, num2 + 1))
{
return p;
}
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < num; j++)
for (int j = 0; j < r; j++)
{
num2++;
if (IsValid(num2, num3))
num++;
if (IsValid(num, num2))
{
return p;
}
}
for (int k = 0; k < num; k++)
for (int k = 0; k < r; k++)
{
num3++;
if (IsValid(num2, num3))
num2++;
if (IsValid(num, num2))
{
return p;
}
}
num++;
for (int l = 0; l < num; l++)
r++;
for (int l = 0; l < r; l++)
{
num2--;
if (IsValid(num2, num3))
num--;
if (IsValid(num, num2))
{
return p;
}
}
for (int m = 0; m < num; m++)
for (int m = 0; m < r; m++)
{
num3--;
if (IsValid(num2, num3))
num2--;
if (IsValid(num, num2))
{
return p;
}
}
num++;
r++;
}
p.Set(this);
return p;
bool IsValid(int dx, int dz)
{
p.Set(dx, dz);
if (minRadius > r / 2)
{
return false;
}
if (!p.IsInBounds || !map.Contains(dx, dz) || (ignoreCenter && dx == x && dz == z))
{
return false;
+QuestNasu
File Created
public class QuestNasu : QuestSequence
{
public override void OnComplete()
{
Thing thing = EClass.pc.things.Find("backpack_holding");
person.chara.AddCard(thing);
thing.isGifted = true;
DropReward(ThingGen.Create("697").SetNum(77));
DropReward(TraitSeed.MakeSeed("feywood").SetNum(10));
DropReward(TraitSeed.MakeSeed("coralwood").SetNum(10));
if (person.chara.IsPCFaction)
{
person.chara.homeBranch.BanishMember(person.chara);
}
}
}
Region
public void CheckRandomSites()
dateCheckSites = EClass.world.date.GetRaw() + 1440;
UpdateRandomSites();
}
if (FindZone("foxtown_nefu") == null)
{
SpatialGen.Create("foxtown_nefu", this, register: true);
}
if (FindZone("little_garden") == null)
{
SpatialGen.Create("little_garden", this, register: true);
}
if (FindZone("cave_yeek") == null)
{
SpatialGen.Create("cave_yeek", this, register: true);
}
if (FindZone("village_exile") == null)
{
SpatialGen.Create("village_exile", this, register: true);
}
if (FindZone("temple_undersea") == null)
TryAddZone("cave_fairy");
TryAddZone("foxtown_nefu");
TryAddZone("little_garden");
TryAddZone("cave_yeek");
TryAddZone("village_exile");
TryAddZone("temple_undersea");
elomap.objmap.UpdateMeshImmediate();
void TryAddZone(string id)
{
SpatialGen.Create("temple_undersea", this, register: true);
if (FindZone(id) == null)
{
SpatialGen.Create(id, this, register: true);
}
}
elomap.objmap.UpdateMeshImmediate();
}
public void RenewRandomSites()
TraitChara
public virtual bool CanSellPlan
public virtual Adv_Type AdvType => Adv_Type.None;
public virtual bool EnableTone => !IsUnique;
public virtual bool EnableTone
{
get
{
if (IsUnique)
{
return !LayerDrama.Instance;
}
return true;
}
}
public virtual bool CanBeTamed
{
TraitMixedFood
public class TraitMixedFood : TraitFood
public class TraitMixedFood : TraitFood
public class TraitMixedFood : TraitFoodMeal
{
public override bool CanSearchContent => false;
public override bool CanStack => false;
public override int DefaultStock => 1;
}
TraitNanasu
public class TraitNanasu : TraitUniqueChara
public class TraitNanasu : TraitUniqueChara
{
public override bool CanInvite => false;
public override bool CanInvite => EClass.game.quests.IsCompleted("nasu");
public override bool CanBeBanished => EClass.game.quests.IsCompleted("nasu");
}
TraitStairsLocked
public override bool OnUse(Chara c)
Zone.ignoreSpawnAnime = true;
EClass._zone.AddCard(thing, owner.pos.x, owner.pos.z);
thing.SetPlaceState(PlaceState.installed);
if (EClass._zone is Zone_DungeonFairy)
{
EClass.pc.party.Find("fairy_nanasu")?.Talk("unlock_stairs_nasu");
}
return true;
}
}
Zone
public Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState = ZoneTran
}
if (base.lv == 0)
{
goto IL_0499;
goto IL_04a1;
}
flag = base.lv <= 0;
break;
public Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState = ZoneTran
break;
}
break;
IL_0499:
IL_04a1:
enterState = ZoneTransition.EnterState.Center;
}
foreach (Thing thing5 in map.things)
+Zone_DungeonFairy
File Created
public class Zone_DungeonFairy : Zone_Dungeon
{
public override int MinLv => LvBoss;
public override bool CanUnlockExit
{
get
{
if (EClass.pc.party.Find("fairy_nanasu") != null)
{
return EClass.game.quests.GetPhase<QuestNasu>() == 0;
}
return false;
}
}
public int LvBoss => -5;
public bool IsBossLv => base.lv == LvBoss;
public override string GetDungenID()
{
if (IsBossLv)
{
return "CavernBig";
}
return base.GetDungenID();
}
public override void OnGenerateMap()
{
if (IsBossLv)
{
Chara t = CharaGen.Create("fairy_poina");
Chara t2 = CharaGen.Create("fairy_raina");
Point point = EClass._map.FindThing<TraitStairsUp>().owner.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false, ignoreCenter: true, 5) ?? EClass._map.GetCenterPos();
AddCard(t, point);
AddCard(t2, point.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false) ?? point);
LayerDrama.Activate("fairy_nanasu", "fairy_nanasu", "battle", EClass.pc.party.Find("fairy_nanasu"));
}
base.OnGenerateMap();
}
}