EA 23.142 Nightly
May 21, 2025
17 files modified.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
ItemGeneral (1)
public void SetChara(Chara c)
public void SetChara(Chara c, Mode mode = Mode.Default)
ACT
@@ -86,6 +86,8 @@ public struct Cost
public static bool forcePt;
public static Act CurrentAct;
public override bool ShowPotential => false;
public override bool UsePotential => false;
ActEffect
@@ -547,6 +547,7 @@ public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
radius = 1;
break;
}
num3 += CC.Evalue(1240);
for (int j = 0; j < num3; j++)
{
if (EClass._zone.CountMinions(CC) >= CC.MaxSummon)
ActMelee
@@ -90,7 +90,10 @@ public override bool CanPerform()
public override bool Perform()
{
return Attack();
Act.CurrentAct = this;
bool result = Attack();
Act.CurrentAct = null;
return result;
}
public bool Attack(float dmgMulti = 1f, bool maxRoll = false)
BaseListPeople
@@ -38,7 +38,7 @@ public override void List()
{
onInstantiate = delegate(Chara a, ItemGeneral b)
{
b.SetChara(a);
b.SetChara(a, (this is ListPeopleBuySlave) ? ItemGeneral.Mode.Slave : ItemGeneral.Mode.Default);
OnInstantiate(a, b);
b.Build();
},
Biography
@@ -491,6 +491,11 @@ public string TextBio2(Chara c)
return Lang.Parse("heightWeight", height.ToString() ?? "", weight.ToString() ?? "") + " " + ((c.material.alias == "meat") ? "" : c.material.GetName().ToTitleCase(wholeText: true));
}
public string TextBioSlave(Chara c)
{
return " (" + Lang.GetList("genders_animal")[c.bio.gender] + " " + "age".lang(c.bio.TextAge(c)) + ")";
}
public string TextBirthDate(Chara c, bool _age = false)
{
return Lang.Parse("birthText", (birthYear >= 0) ? (birthYear.ToString() ?? "") : "???", birthMonth.ToString() ?? "", birthDay.ToString() ?? "") + (_age ? (" (" + Lang.Parse("age", TextAge(c)) + ")") : "");
Card
@@ -4814,6 +4814,10 @@ public void SpawnLoot(Card origin)
{
num3 += (int)Mathf.Min(Mathf.Sqrt(EClass.pc.Evalue(290)), 20f);
}
if (EClass.rnd((Act.CurrentAct is ActMeleeBladeStorm) ? 2 : 100) == 0)
{
text = "dattamono";
}
if (num2 && num3 > EClass.rnd(100))
{
text = "meat_marble";
Chara
if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
{
ModExp(200, EClass._zone.IsRegion ? 50 : 5);
if (ride != null)
{
ride.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
}
if (parasite != null)
{
parasite.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
}
}
Chara chara = ((ride == null) ? this : ride);
if (!EClass._zone.IsRegion || chara.IsPC)
DramaCustomSequence
@@ -181,13 +181,16 @@ public void Build(Chara c)
{
Choice2(c.trait.TextNextRestock, "_buy").DisableSound();
}
if (c.trait.SlaverType != 0)
if (!EClass._zone.IsUserZone)
{
Choice2(c.trait.TextNextRestockPet, "_buySlave").DisableSound();
}
if (c.trait.CopyShop != 0)
{
Choice2(("daCopy" + c.trait.CopyShop).lang(c.trait.NumCopyItem.ToString() ?? ""), "_copyItem").DisableSound();
if (c.trait.SlaverType != 0)
{
Choice2(c.trait.TextNextRestockPet, "_buySlave").DisableSound();
}
if (c.trait.CopyShop != 0)
{
Choice2(("daCopy" + c.trait.CopyShop).lang(c.trait.NumCopyItem.ToString() ?? ""), "_copyItem").DisableSound();
}
}
if (c.trait.HaveNews && c.GetInt(33) + 10080 < EClass.world.date.GetRaw())
{
FACTION
@@ -40,7 +40,7 @@ public class FACTION
public const int bfTranquil = 3703;
public const int fHeirloom = 2120;
public const int fSoil = 2200;
public const int fTaxEvasion = 2119;
@@ -106,16 +106,16 @@ public class FACTION
public const int fConstruction = 2003;
public const int fSoil = 2200;
public const int fHeirloom = 2120;
public static readonly int[] IDS = new int[52]
{
3500, 3600, 3601, 3602, 3700, 3701, 3603, 3605, 2207, 3702,
3604, 4004, 2205, 2204, 2203, 2202, 2201, 3703, 2120, 2119,
3604, 4004, 2205, 2204, 2203, 2202, 2201, 3703, 2200, 2119,
2118, 2117, 2116, 2206, 3704, 3802, 3706, 4005, 4006, 4003,
4002, 2115, 4001, 4000, 3900, 3805, 3804, 3705, 3803, 3800,
3784, 3783, 3782, 3781, 3780, 3710, 3709, 3708, 3707, 3801,
2003, 2200
2003, 2120
};
}
public class Faction : EClass
FEAT
@@ -5,8 +5,6 @@ public class FEAT
{
public const int featSnail = 1211;
public const int featAnimalLover = 1640;
public const int featFaith = 1636;
public const int featMartial = 1635;
@@ -55,13 +53,15 @@ public class FEAT
public const int featMilitant = 1419;
public const int featResCurse = 1641;
public const int featSwordsage = 1418;
public const int featAnimalLover = 1640;
public const int featResCurse = 1641;
public const int featSleeper = 1642;
public const int featBodyParts = 1644;
public const int featSorter = 1643;
public const int featUndead = 1210;
@@ -87,9 +87,9 @@ public class FEAT
public const int featFisher = 1659;
public const int featManaCost = 1657;
public const int featWitch = 1417;
public const int featScavenger = 1656;
public const int featManaCost = 1657;
public const int featModelBeliever = 1655;
@@ -113,13 +113,15 @@ public class FEAT
public const int featParty = 1645;
public const int featSorter = 1643;
public const int featBodyParts = 1644;
public const int featWitch = 1417;
public const int featScavenger = 1656;
public const int featInquisitor = 1416;
public const int featChef = 1658;
public const int featFoxMaid = 1415;
public const int featWhiteVixen = 1414;
public const int featLightEater = 1235;
@@ -131,17 +133,19 @@ public class FEAT
public const int featDemon = 1239;
public const int featMassSummoner = 1240;
public const int featGod_element1 = 1300;
public const int featGod_earth1 = 1305;
public const int featGod_wind1 = 1310;
public const int featGod_machine1 = 1315;
public const int featGod_healing1 = 1320;
public const int featHeavyEater = 1234;
public const int featGod_harvest1 = 1325;
public const int featGod_healing1 = 1320;
public const int featGod_luck1 = 1330;
public const int featGod_harmony1 = 1335;
@@ -159,17 +163,15 @@ public class FEAT
public const int featWizard = 1402;
public const int featFarmer = 1403;
public const int featGod_luck1 = 1330;
public const int featGod_harvest1 = 1325;
public const int featArcher = 1404;
public const int featFarmer = 1403;
public const int featCosmicHorror = 1233;
public const int featNirvana = 1231;
public const int featInquisitor = 1416;
public const int featFoxMaid = 1415;
public const int featElea = 1213;
@@ -211,42 +213,42 @@ public class FEAT
public const int featSplit = 1222;
public const int featPianist = 1405;
public const int featGod_wind1 = 1310;
public const int featArcher = 1404;
public const int featPaladin = 1407;
public const int featGod_earth1 = 1305;
public const int featTourist = 1406;
public const int featPianist = 1405;
public const int featBoost = 1409;
public const int featReboot = 1410;
public const int featEarthStrength = 1411;
public const int featLuckyCat = 1412;
public const int featFairysan = 1413;
public const int featPaladin2 = 1408;
public const int featBoost = 1409;
public const int featPaladin = 1407;
public const int featWhiteVixen = 1414;
public const int featFairysan = 1413;
public static readonly int[] IDS = new int[115]
public static readonly int[] IDS = new int[116]
{
1211, 1640, 1636, 1635, 1634, 1633, 1632, 1631, 1630, 1629,
1628, 1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1612,
1611, 1610, 1422, 1421, 1420, 1419, 1641, 1418, 1642, 1644,
1211, 1636, 1635, 1634, 1633, 1632, 1631, 1630, 1629, 1628,
1627, 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1612, 1611,
1610, 1422, 1421, 1420, 1419, 1418, 1640, 1641, 1642, 1643,
1210, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208,
1209, 1659, 1657, 1656, 1655, 1654, 1653, 1652, 1651, 1650,
1649, 1648, 1647, 1646, 1645, 1643, 1417, 1658, 1415, 1235,
1236, 1237, 1238, 1239, 1300, 1305, 1315, 1320, 1234, 1325,
1335, 1340, 1345, 1350, 1355, 1400, 1401, 1402, 1403, 1330,
1404, 1233, 1231, 1416, 1213, 1214, 1215, 1216, 1217, 1218,
1219, 1220, 1232, 1221, 1223, 1212, 1224, 1225, 1226, 1227,
1228, 1229, 1230, 1222, 1405, 1310, 1407, 1406, 1410, 1411,
1412, 1413, 1408, 1409, 1414
1209, 1659, 1417, 1657, 1655, 1654, 1653, 1652, 1651, 1650,
1649, 1648, 1647, 1646, 1645, 1644, 1656, 1416, 1658, 1414,
1235, 1236, 1237, 1238, 1239, 1240, 1300, 1310, 1315, 1234,
1320, 1330, 1335, 1340, 1345, 1350, 1355, 1400, 1401, 1402,
1325, 1403, 1233, 1231, 1415, 1213, 1214, 1215, 1216, 1217,
1218, 1219, 1220, 1232, 1221, 1223, 1212, 1224, 1225, 1226,
1227, 1228, 1229, 1230, 1222, 1404, 1305, 1406, 1405, 1409,
1410, 1411, 1412, 1408, 1407, 1413
};
}
public class Feat : Element
FOOD
public class FOOD
{
public const int food_undead = 709;
public const int food_CHA = 700;
public const int justcooked = 757;
@@ -8,7 +8,7 @@ public class FOOD
public const int food_cat = 701;
public const int food_CHA = 700;
public const int food_undead = 709;
public const int food_love = 703;
@@ -26,7 +26,7 @@ public class FOOD
public static readonly int[] IDS = new int[12]
{
709, 757, 758, 701, 700, 703, 702, 707, 706, 708,
700, 757, 758, 701, 709, 703, 702, 707, 706, 708,
704, 705
};
}
ItemGeneral
public class ItemGeneral : UIItem, IPrefImage
{
public enum Mode
{
Default,
Slave
}
private const int IconSize = 40;
private const int IconPadding = 10;
@@ -18,7 +24,7 @@ public class ItemGeneral : UIItem, IPrefImage
private int count;
public void SetChara(Chara c)
public void SetChara(Chara c, Mode mode = Mode.Default)
{
card = c;
c.SetImage(button1.icon);
@@ -40,6 +46,10 @@ public void SetChara(Chara c)
{
c2 = FontColor.Warning;
}
if (mode == Mode.Slave)
{
text = text + " " + c.bio.TextBioSlave(c);
}
button1.mainText.SetText(text, c2);
_ = button1.icon.rectTransform;
}
Map
@@ -1856,19 +1856,8 @@ public void MineObj(Point point, Task task = null, Chara c = null)
}
else if (!EClass._zone.IsUserZone)
{
Thing thing = TraitSeed.MakeSeed(sourceObj, TryGetPlant(cell)).SetNum(num2);
if (EClass._zone is Zone_Dungeon)
{
int num3 = Mathf.Min(EClass._zone.DangerLv, EClass.pc.Evalue(286) * 2 / 3);
if (num3 > 0)
{
Rand.SetSeed(EClass._zone.uid * 10 + num3);
TraitSeed.LevelSeed(thing, (thing.trait as TraitSeed).row, num3);
Rand.SetSeed();
thing.elements.SetBase(2, EClass.curve(thing.encLV, 50, 10, 80));
}
}
EClass.pc.PickOrDrop(point, thing);
Thing t2 = TraitSeed.MakeSeed(sourceObj, TryGetPlant(cell)).SetNum(num2);
EClass.pc.PickOrDrop(point, t2);
}
if (cell.growth.IsTree)
{
@@ -1895,14 +1884,14 @@ public void MineObj(Point point, Task task = null, Chara c = null)
}
break;
}
int num4 = EClass.rnd(EClass.rnd(sourceObj.components.Length) + 1);
string[] array = sourceObj.components[num4].Split('/');
Thing thing2 = ThingGen.Create(array[0].Split('|')[0], matObj_fixed.alias);
int num3 = EClass.rnd(EClass.rnd(sourceObj.components.Length) + 1);
string[] array = sourceObj.components[num3].Split('/');
Thing thing = ThingGen.Create(array[0].Split('|')[0], matObj_fixed.alias);
if (array.Length > 1)
{
thing2.SetNum(EClass.rnd(array[1].ToInt()) + 1);
thing.SetNum(EClass.rnd(array[1].ToInt()) + 1);
}
Pop(thing2);
Pop(thing);
}
}
SetObj(point.x, point.z);
MapGenDungen
@@ -226,7 +226,19 @@ protected override bool OnGenerateTerrain()
{
zone.SpawnMob(null, SpawnSetting.Fish());
}
Crawler.Create("pasture").CrawlUntil(tries: EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(5) + 1) + 1) + 1), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
Crawler crawler = Crawler.Create("pasture");
int tries = (EClass.debug.enable ? 3 : EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(5) + 1) + 1) + 1));
Thing seed = null;
int num4 = Mathf.Min(EClass._zone.DangerLv, EClass.pc.Evalue(286) * 2 / 3);
if (num4 > 0)
{
seed = TraitSeed.MakeSeed(EClass.sources.objs.map[137]);
Rand.SetSeed(EClass._zone.uid * 10 + num4);
TraitSeed.LevelSeed(seed, (seed.trait as TraitSeed).row, num4);
Rand.SetSeed();
seed.elements.SetBase(2, EClass.curve(seed.encLV, 50, 10, 80));
}
crawler.CrawlUntil(EClass._map, () => EClass._map.GetRandomPoint(), tries, delegate(Crawler.Result r)
{
int id2 = 137;
foreach (Point point2 in r.points)
@@ -236,27 +248,58 @@ protected override bool OnGenerateTerrain()
map.SetObj(point2.x, point2.z, id2);
int idx = 3 + ((EClass.rnd(3) == 0) ? 1 : 0) + ((EClass.rnd(3) == 0) ? (-1) : 0) + ((EClass.rnd(3) == 0) ? (-1) : 0);
point2.growth.SetStage(idx);
if (seed != null)
{
EClass._map.AddPlant(point2, seed);
}
}
}
return false;
});
}
if (zone is Zone_RandomDungeonPlain)
{
Crawler.Create("pasture").CrawlUntil(tries: EClass.rnd(EClass.rnd(3) + 1), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
crawler.CrawlUntil(tries: EClass.rnd(EClass.rnd(5) + 1) + 1, map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
{
int id = ((EClass.rnd(3) == 0) ? 108 : 105);
int id = 136;
foreach (Point point3 in r.points)
{
if (!point3.cell.isModified && !point3.HasThing && !point3.HasBlock && !point3.HasObj)
{
map.SetObj(point3.x, point3.z, id);
int num4 = 3;
map.SetObj(point3.x, point3.z, id, 1, EClass.rnd(4));
}
}
return false;
});
}
bool forest = zone is Zone_RandomDungeonForest;
if (zone is Zone_RandomDungeonPlain || (forest && EClass.rnd(3) == 0))
{
Crawler.Create("pasture").CrawlUntil(tries: EClass.debug.enable ? 3 : EClass.rnd(EClass.rnd(3) + 1), map: EClass._map, onStart: () => EClass._map.GetRandomPoint(), canComplete: delegate(Crawler.Result r)
{
int num5 = ((forest || EClass.rnd(5) == 0) ? EClass.sources.objs.rows.Where((SourceObj.Row a) => a.ContainsTag("wild")).RandomItem().id : ((EClass.rnd(3) == 0) ? 108 : 105));
Thing thing5 = null;
int num6 = Mathf.Min(EClass._zone.DangerLv, EClass.pc.Evalue(286) * 2 / 3);
if (num6 > 0)
{
thing5 = TraitSeed.MakeSeed(EClass.sources.objs.map[num5]);
Rand.SetSeed(EClass._zone.uid * 10 + num6);
TraitSeed.LevelSeed(thing5, (thing5.trait as TraitSeed).row, num6);
Rand.SetSeed();
thing5.elements.SetBase(2, EClass.curve(thing5.encLV, 50, 10, 80));
}
foreach (Point point4 in r.points)
{
if (!point4.cell.isModified && !point4.HasThing && !point4.HasBlock && !point4.HasObj)
{
map.SetObj(point4.x, point4.z, num5);
int num7 = 3;
if (EClass.rnd(6) == 0)
{
num4++;
num7++;
}
point4.growth.SetStage(num7);
if (thing5 != null)
{
EClass._map.AddPlant(point4, thing5);
}
point3.growth.SetStage(num4);
}
}
return false;
SKILL
@@ -20,7 +20,7 @@ public class SKILL
public const int weaponScythe = 110;
public const int fishing = 245;
public const int twowield = 131;
public const int mining = 220;
@@ -60,7 +60,7 @@ public class SKILL
public const int eyeofmind = 134;
public const int tactics = 132;
public const int fishing = 245;
public const int EDR = 56;
@@ -132,7 +132,7 @@ public class SKILL
public const int gathering = 250;
public const int twowield = 131;
public const int tactics = 132;
public const int blacksmith = 256;
@@ -269,12 +269,12 @@ public class SKILL
public static readonly int[] IDS = new int[133]
{
111, 123, 122, 120, 55, 109, 50, 51, 130, 110,
245, 220, 133, 242, 241, 240, 237, 235, 230, 227,
131, 220, 133, 242, 241, 240, 237, 235, 230, 227,
226, 225, 210, 207, 200, 152, 151, 150, 135, 134,
132, 56, 103, 108, 60, 61, 62, 64, 65, 66,
245, 56, 103, 108, 60, 61, 62, 64, 65, 66,
67, 68, 70, 71, 72, 73, 74, 75, 57, 76,
78, 79, 80, 90, 91, 92, 93, 100, 101, 102,
104, 105, 106, 107, 77, 250, 131, 256, 916, 917,
104, 105, 106, 107, 77, 250, 132, 256, 916, 917,
918, 919, 921, 922, 923, 924, 925, 926, 950, 951,
952, 953, 915, 954, 956, 957, 958, 959, 960, 961,
962, 963, 964, 965, 970, 971, 972, 255, 955, 914,
TraitCoreDefense
@@ -23,7 +23,7 @@ public override void TrySetAct(ActPlan p)
return true;
});
}
if (ev.CanRetreat && !ev.retreated)
if (ev.CanRetreat && EClass.player.returnInfo == null)
{
p.TrySetAct("actEvacDefense", delegate
{
TraitSeed
@@ -107,7 +107,7 @@ public static Thing MakeSeed(SourceObj.Row obj, PlantData plant = null)
{
num3 = 2 + num3 * 2;
}
if (EClass.rnd(num3) == 0)
if (EClass.rnd(num3) == 0 && EClass._zone.IsPCFactionOrTent)
{
int num4 = Mathf.Max(5, EClass.pc.Evalue(286)) - thing2.encLV;
if (num4 <= 0)