EA 23.231 Nightly
November 7, 2025
29 files modified. 2 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
Party (1)
public bool HasElement(int ele)
public bool HasElement(int ele, bool excludePC = false) SpriteReplacer (1)
public bool HasSprite(string id)
public bool HasSprite(string id, RenderData renderData = null) AI_Fish
public static Thing Makefish(Chara c)
c.Say("bigCatch", c);
}
num2 = (num7 ? num5 : EClass.rnd(num5)) / (num4 + 1) + 1;
if (EClass.debug.enable || (thing.id == "65" && EClass.rnd(c.IsPC ? 8192 : 819200) == 0))
{
thing = ThingGen.Create("65_gold", -1, lv);
num2 = 1;
}
if (num4 != 0)
{
thing.SetTier(num4);AI_PlayMusic
public override IEnumerable<Status> Run()
}
}
List<Chara> list = owner.pos.ListWitnesses(owner, 4, WitnessType.music);
int num = owner.Evalue(241) * (100 + toolLv) / 100;
int num = (owner.Evalue(241) + tool?.Evalue(241)).Value * (100 + toolLv) / 100;
int num2 = 0;
foreach (Chara item2 in list)
{public void ThrowReward(Chara c, bool punish)
}
if (thing.id == "money" && !owner.IsPC)
{
int num2 = (owner.Evalue(241) * 10 + 100) / ((owner.IsPCFaction && owner.memberType == FactionMemberType.Default) ? 1 : 10);
if (owner.GetCurrency() - num2 > 0)
int? obj = ((owner.Evalue(241) + tool?.Evalue(241)) * 10 + 100) / ((owner.IsPCFaction && owner.memberType == FactionMemberType.Default) ? 1 : 10);
if (owner.GetCurrency() - obj > 0)
{
owner.c_allowance += num;
owner.ModCurrency(-num);AI_Steal
public override bool Perform()
public override IEnumerable<Status> Run()
{
Chara chara = target.Chara;
bool negate = chara != null && chara.HasElement(426);
if (chara != null)
{
if (chara.HasElement(426))
if (negate && owner.Evalue(1662) == 0)
{
chara.Say("abStealNegate", chara);
owner.Say("abStealNegate", chara);
yield return Cancel();
}
target = chara.things.FindStealable();public override IEnumerable<Status> Run()
{
num2 *= 2;
}
if (negate)
{
num2 *= 2;
}
return EClass.rnd(num2) > owner.Evalue(281) + owner.DEX + num;
}))
{ActEffect
public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
Point point = CC.pos.Copy();
List<Card> list = new List<Card>();
bool flag = false;
if ((id == EffectId.Explosive || id == EffectId.Rocket) && actref.refThing != null)
if ((id == EffectId.Explosive || id == EffectId.Rocket || id == EffectId.GravityGun) && actref.refThing != null)
{
power = power * actref.refThing.material.hardness / 10;
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
case EffectId.Explosive:
case EffectId.Rocket:
case EffectId.GravityGun:
text2 = "ball_";
flag = false;
break;public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
}
default:
{
effect = Effect.Get("Element/ball_" + ((e.id == 0) ? "Void" : e.source.alias.Remove(0, 3)));
effect = Effect.Get("Element/ball_" + ((e.id == 0) ? "Void" : ((id == EffectId.GravityGun) ? "Gravity" : e.source.alias.Remove(0, 3))));
if (effect == null)
{
effect = Effect.Get("Element/ball_Fire");public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
float startDelay = ((id == EffectId.Meteor) ? 0.1f : 0.04f) * (float)CC.pos.Distance(p);
effect.SetStartDelay(startDelay);
effect2.SetStartDelay(startDelay);
if (id == EffectId.GravityGun)
{
float duration = 0.06f * (float)CC.pos.Distance(p);
Point pos2 = p.Copy();
TweenUtil.Tween(duration, null, delegate
{
pos2.Animate(AnimeID.Gravity, animeBlock: true);
});
}
break;
}
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.Sword:
num4 = num4 * (int)Mathf.Min(70f + Mathf.Sqrt(CC.Evalue(101)) * 3f, 200f) / 100;
break;
case EffectId.GravityGun:
num4 /= 5;
break;
}
if (id == EffectId.Ball || id == EffectId.BallBubble || id == EffectId.Explosive || id == EffectId.Rocket)
if (id == EffectId.Ball || id == EffectId.BallBubble || id == EffectId.Explosive || id == EffectId.Rocket || id == EffectId.GravityGun)
{
num4 = num4 * 100 / (90 + point.Distance(p) * 10);
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.Suicide:
case EffectId.Rocket:
case EffectId.Flare:
case EffectId.GravityGun:
num4 /= 2;
break;
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
num4 = 99999999L;
}
c.DamageHP(num4, e.id, power * num / 100, attackSource, chara ?? CC);
if (c.IsAliveInCurrentZone && CC.IsAliveInCurrentZone && id == EffectId.DrainMana && c.isChara && CC.isChara && c.Chara.mana.value > 0)
if (c.IsAliveInCurrentZone)
{
long num6 = num4 * num / 100;
Debug.Log(num4 + " v:" + num6 + " evalue:" + e.Value + " power:" + power + " elepMod:" + num);
if (num6 > c.Chara.mana.value)
switch (id)
{
num6 = c.Chara.mana.value;
case EffectId.GravityGun:
if (!c.isChara)
{
break;
}
c.Chara.AddCondition<ConGravity>(power);
if (EClass.rnd(2) == 0)
{
c.Chara.AddCondition<ConEntangle>(power / 2);
}
if (EClass.rnd(4) == 0)
{
c.Chara.AddCondition<ConBlind>(power);
}
if (EClass.rnd(5) == 0)
{
c.Chara.AddCondition<ConDim>(power / 3);
}
if (EClass.rnd(3) == 0)
{
c.Chara.AddCondition<ConSupress>(power / 2);
}
if (actref.refThing != null && actref.refThing.id == "gun_gravity2")
{
if (EClass.rnd(4) == 0)
{
c.Chara.AddCondition<ConSilence>(power / 3);
}
if (EClass.rnd(4) == 0)
{
c.Chara.AddCondition<ConWeakResEle>(power);
}
if (EClass.rnd(4) == 0)
{
c.Chara.AddCondition<ConNightmare>(power);
}
}
break;
case EffectId.DrainMana:
if (CC.IsAliveInCurrentZone && c.isChara && CC.isChara && c.Chara.mana.value > 0)
{
long num6 = num4 * num / 100;
Debug.Log(num4 + " v:" + num6 + " evalue:" + e.Value + " power:" + power + " elepMod:" + num);
if (num6 > c.Chara.mana.value)
{
num6 = c.Chara.mana.value;
}
c.Chara.mana.Mod((int)(-num6));
CC.Chara.mana.Mod((int)num6);
}
break;
}
c.Chara.mana.Mod((int)(-num6));
CC.Chara.mana.Mod((int)num6);
}
if (id == EffectId.Explosive && CC.trait is TraitCookerMicrowave)
{public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
case EffectId.Earthquake:
{
List<Point> list = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false);
if (list.Count == 0)
List<Point> list7 = EClass._map.ListPointsInCircle(CC.pos, 12f, mustBeWalkable: false);
if (list7.Count == 0)
{
list.Add(CC.pos.Copy());
list7.Add(CC.pos.Copy());
}
CC.Say("spell_earthquake", CC, element.Name.ToLower());
TryDelay(delegatepublic static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
Shaker.ShakeCam("ball");
}
EClass.Wait(1f, CC);
DamageEle(CC, id, power, element, list, actRef, "spell_earthquake");
DamageEle(CC, id, power, element, list7, actRef, "spell_earthquake");
break;
}
case EffectId.Meteor:public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
EffectMeteor.Create(cc.pos, 6, 10, delegate
{
});
List<Point> list3 = EClass._map.ListPointsInCircle(CC.pos, 10f);
if (list3.Count == 0)
List<Point> list = EClass._map.ListPointsInCircle(CC.pos, 10f);
if (list.Count == 0)
{
list3.Add(CC.pos.Copy());
list.Add(CC.pos.Copy());
}
CC.Say("spell_ball", CC, element.Name.ToLower());
TryDelay(delegatepublic static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
Shaker.ShakeCam("ball");
}
EClass.Wait(1f, CC);
DamageEle(CC, id, power, element, list3, actRef, "spell_ball");
DamageEle(CC, id, power, element, list, actRef, "spell_ball");
return;
}
case EffectId.Hand:public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.DrainMana:
case EffectId.Sword:
{
List<Point> list2 = new List<Point>();
list2.Add(tp.Copy());
List<Point> list6 = new List<Point>();
list6.Add(tp.Copy());
EClass.Wait(0.3f, CC);
TryDelay(delegate
{
CC.PlaySound("spell_hand");
});
if (!DamageEle(CC, id, power, element, list2, actRef, (id == EffectId.DrainBlood || id == EffectId.DrainMana) ? "" : ((id == EffectId.Sword) ? "spell_sword" : "spell_hand")))
if (!DamageEle(CC, id, power, element, list6, actRef, (id == EffectId.DrainBlood || id == EffectId.DrainMana) ? "" : ((id == EffectId.Sword) ? "spell_sword" : "spell_hand")))
{
CC.Say("spell_hand_miss", CC, element.Name.ToLower());
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.MoonSpear:
case EffectId.MoonArrow:
{
List<Point> list7 = new List<Point>();
list7.Add(tp.Copy());
List<Point> list3 = new List<Point>();
list3.Add(tp.Copy());
CC.Say((id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow", CC, element.Name.ToLower());
EClass.Wait(0.5f, CC);
TryDelay(delegate
{
CC.PlaySound((id == EffectId.MoonSpear) ? "spell_moonspear" : "spell_arrow");
});
DamageEle(CC, id, power, element, list7, actRef, (id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow");
DamageEle(CC, id, power, element, list3, actRef, (id == EffectId.MoonSpear) ? "spell_spear" : "spell_arrow");
return;
}
case EffectId.Summon:public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
string id3 = actRef.n1;
int num3 = 1;
int num4 = -1;
int radius2 = 3;
bool flag4 = false;
bool flag5 = actRef.n1 == "special";
int radius = 3;
bool flag3 = false;
bool flag4 = actRef.n1 == "special";
int num5 = -1;
string text = "";
switch (actRef.n1)public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
break;
case "tentacle":
num4 = 20 + EClass.rnd(10);
radius2 = 1;
radius = 1;
break;
case "special":
CC.SetInt(70, EClass.world.date.GetRaw() + 1440);public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
break;
}
Point point = tp.GetRandomPoint(radius2)?.GetNearestPoint(allowBlock: false, allowChara: false);
Point point = tp.GetRandomPoint(radius)?.GetNearestPoint(allowBlock: false, allowChara: false);
if (point == null || !point.IsValid)
{
continue;
}
Chara chara2 = null;
Chara chara = null;
CardBlueprint.Set(new CardBlueprint());
if (num5 != -1)
{public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case "special":
if (j == 0 && !CC.HasMinion("imolonac") && !CC.HasMinion("ygolonac"))
{
chara2 = CharaGen.Create((EClass.rnd(20) == 0) ? "imolonac" : "ygolonac");
chara = CharaGen.Create((EClass.rnd(20) == 0) ? "imolonac" : "ygolonac");
break;
}
Debug.Log(CardBlueprint.current.idEle);
chara2 = CharaGen.Create("hound", CC.LV);
chara = CharaGen.Create("hound", CC.LV);
if (text.IsEmpty())
{
text = chara2.MainElement.source.alias;
text = chara.MainElement.source.alias;
}
break;
case "yeek":
chara2 = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_yeek", (SourceChara.Row r) => r.race == "yeek"), power / 10);
chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_yeek", (SourceChara.Row r) => r.race == "yeek"), power / 10);
break;
case "orc":
chara2 = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_orc", (SourceChara.Row r) => r.race == "orc"), power / 10);
chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_orc", (SourceChara.Row r) => r.race == "orc"), power / 10);
break;
case "dragon":
chara2 = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_dragon", (SourceChara.Row r) => r.race == "dragon" || r.race == "drake" || r.race == "wyvern"), power / 5);
chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_dragon", (SourceChara.Row r) => r.race == "dragon" || r.race == "drake" || r.race == "wyvern"), power / 5);
break;
case "pawn":
chara2 = CharaGen.CreateFromFilter("c_pawn", power / 10);
chara = CharaGen.CreateFromFilter("c_pawn", power / 10);
break;
case "machine":
chara2 = CharaGen.CreateFromFilter("c_machine", power / 10);
chara = CharaGen.CreateFromFilter("c_machine", power / 10);
break;
case "monster":
chara2 = CharaGen.CreateFromFilter("c_dungeon", power / 10);
chara = CharaGen.CreateFromFilter("c_dungeon", power / 10);
break;
case "animal":
chara2 = CharaGen.CreateFromFilter("c_animal", power / 15);
chara = CharaGen.CreateFromFilter("c_animal", power / 15);
break;
case "fire":
chara2 = CharaGen.CreateFromElement("Fire", power / 10);
chara = CharaGen.CreateFromElement("Fire", power / 10);
break;
case "fish":
chara2 = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_fish", (SourceChara.Row r) => r.ContainsTag("water") || r.model.Chara.race.tag.Contains("water")), power / 10);
chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_fish", (SourceChara.Row r) => r.ContainsTag("water") || r.model.Chara.race.tag.Contains("water")), power / 10);
break;
case "octopus":
chara2 = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_octopus", (SourceChara.Row r) => r.race == "octopus"), power / 10);
chara = CharaGen.CreateFromFilter(SpawnListChara.Get("summon_octopus", (SourceChara.Row r) => r.race == "octopus"), power / 10);
break;
default:
chara2 = CharaGen.Create(id3, power / 10);
chara = CharaGen.Create(id3, power / 10);
break;
}
if (chara2 == null)
if (chara == null)
{
continue;
}
if (chara2.rarity >= Rarity.Legendary && !flag5)
if (chara.rarity >= Rarity.Legendary && !flag4)
{
j--;
continue;public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
num7 = (CC.IsPCFactionOrMinion ? (CC.LV / 2) : (CC.LV / 3 * 2));
}
num6 = chara2.LV * (100 + power / 10) / 100 + power / 30;
num6 = chara.LV * (100 + power / 10) / 100 + power / 30;
if (num6 < num7)
{
num6 = num7;public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
num6 = power / 10 + 1;
}
if (chara2.LV < num6)
if (chara.LV < num6)
{
chara2.SetLv(num6);
chara.SetLv(num6);
}
chara2.interest = 0;
if (chara2.HaveFur())
chara.interest = 0;
if (chara.HaveFur())
{
chara2.c_fur = -1;
chara.c_fur = -1;
}
n = actRef.n1;
if (!(n == "shadow"))
{
if (n == "special_force")
{
chara2.homeZone = EClass._zone;
chara.homeZone = EClass._zone;
}
}
else
{
chara2.hp = chara2.MaxHP / 2;
chara.hp = chara.MaxHP / 2;
}
EClass._zone.AddCard(chara2, point);
EClass._zone.AddCard(chara, point);
if (flag)
{
Chara chara3 = chara2;
Hostility hostility2 = (chara2.c_originalHostility = Hostility.Enemy);
chara3.hostility = hostility2;
Chara chara2 = chara;
Hostility hostility2 = (chara.c_originalHostility = Hostility.Enemy);
chara2.hostility = hostility2;
}
else if (!(actRef.n1 == "monster") || actRef.refThing == null)
{
chara2.MakeMinion(CC);
chara.MakeMinion(CC);
}
if (num4 != -1)
{
chara2.SetSummon(num4);
chara.SetSummon(num4);
}
flag4 = true;
flag3 = true;
}
if (!flag4)
if (!flag3)
{
CC.Say("summon_ally_fail", CC);
}public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
}
CC.Say("spell_funnel", CC, element.Name.ToLower());
CC.PlaySound("spell_funnel");
Chara chara = CharaGen.Create((id == EffectId.Bit) ? "bit2" : "bit");
chara.SetMainElement(element.source.alias, element.Value, elemental: true);
chara.SetSummon(20 + power / 20 + EClass.rnd(10));
chara.SetLv(power / 15);
chara.interest = 0;
EClass._zone.AddCard(chara, tp.GetNearestPoint(allowBlock: false, allowChara: false));
chara.PlayEffect("teleport");
chara.MakeMinion(CC);
Chara chara3 = CharaGen.Create((id == EffectId.Bit) ? "bit2" : "bit");
chara3.SetMainElement(element.source.alias, element.Value, elemental: true);
chara3.SetSummon(20 + power / 20 + EClass.rnd(10));
chara3.SetLv(power / 15);
chara3.interest = 0;
EClass._zone.AddCard(chara3, tp.GetNearestPoint(allowBlock: false, allowChara: false));
chara3.PlayEffect("teleport");
chara3.MakeMinion(CC);
return;
}
case EffectId.Breathe:
{
List<Point> list4 = EClass._map.ListPointsInArc(CC.pos, tp, 7, 35f);
if (list4.Count == 0)
List<Point> list2 = EClass._map.ListPointsInArc(CC.pos, tp, 7, 35f);
if (list2.Count == 0)
{
list4.Add(CC.pos.Copy());
list2.Add(CC.pos.Copy());
}
CC.Say("spell_breathe", CC, element.Name.ToLower());
EClass.Wait(0.8f, CC);public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
Shaker.ShakeCam("breathe");
}
DamageEle(CC, id, power, element, list4, actRef, "spell_breathe");
DamageEle(CC, id, power, element, list2, actRef, "spell_breathe");
return;
}
case EffectId.Scream:public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
case EffectId.Suicide:
case EffectId.Rocket:
case EffectId.Flare:
case EffectId.GravityGun:
{
float radius = ((id == EffectId.Rocket) ? 2.8f : ((id == EffectId.Suicide) ? 3.5f : ((id == EffectId.Flare) ? 2.1f : ((float)((id == EffectId.BallBubble) ? 2 : 5)))));
float radius2 = ((id == EffectId.GravityGun) ? 4f : ((id == EffectId.Rocket) ? 2.8f : ((id == EffectId.Suicide) ? 3.5f : ((id == EffectId.Flare) ? 2.1f : ((float)((id == EffectId.BallBubble) ? 2 : 5))))));
if ((id == EffectId.Explosive || id == EffectId.Rocket) && actRef.refThing != null)
{
radius = 2 + actRef.refThing.Evalue(666);
radius2 = 2 + actRef.refThing.Evalue(666);
}
if (id == EffectId.Suicide)
{public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
}
if (CC.HasTag(CTAG.kamikaze))
{
radius = 1.5f;
radius2 = 1.5f;
}
}
bool flag3 = id == EffectId.Explosive || id == EffectId.Suicide || id == EffectId.Rocket;
List<Point> list6 = EClass._map.ListPointsInCircle((id == EffectId.Rocket || id == EffectId.Flare) ? tp : cc.pos, radius, !flag3, !flag3);
if (list6.Count == 0)
bool flag5 = id == EffectId.Explosive || id == EffectId.Suicide || id == EffectId.Rocket;
List<Point> list5 = EClass._map.ListPointsInCircle((id == EffectId.GravityGun || id == EffectId.Rocket || id == EffectId.Flare) ? tp : cc.pos, radius2, !flag5, !flag5);
if (list5.Count == 0)
{
list6.Add(cc.pos.Copy());
list5.Add(cc.pos.Copy());
}
cc.Say((id == EffectId.Suicide) ? "abSuicide" : "spell_ball", cc, element.Name.ToLower());
EClass.Wait(0.8f, cc);public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
tp.PlayEffect("flare");
}
cc.PlaySound((id == EffectId.Flare) ? "spell_flare" : "spell_ball");
if (id != EffectId.GravityGun)
{
cc.PlaySound((id == EffectId.Flare) ? "spell_flare" : "spell_ball");
}
});
if (cc.IsInMutterDistance() && !EClass.core.config.graphic.disableShake)
if (id != EffectId.GravityGun && cc.IsInMutterDistance() && !EClass.core.config.graphic.disableShake)
{
Shaker.ShakeCam("ball");
}
DamageEle(actRef.origin ?? cc, id, power, element, list6, actRef, (id == EffectId.Suicide) ? "suicide" : "spell_ball");
DamageEle(actRef.origin ?? cc, id, power, element, list5, actRef, (id == EffectId.Suicide) ? "suicide" : "spell_ball");
if (id == EffectId.Suicide && CC.IsAliveInCurrentZone)
{
CC.Die();public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
}
case EffectId.Bolt:
{
List<Point> list5 = EClass._map.ListPointsInLine(CC.pos, tp, 10);
if (list5.Count == 0)
List<Point> list4 = EClass._map.ListPointsInLine(CC.pos, tp, 10);
if (list4.Count == 0)
{
list5.Add(CC.pos.Copy());
list4.Add(CC.pos.Copy());
}
CC.Say("spell_bolt", CC, element.Name.ToLower());
EClass.Wait(0.8f, CC);public static bool DamageEle(Card CC, EffectId id, int power, Element e, List<Po
{
Shaker.ShakeCam("bolt");
}
DamageEle(CC, id, power, element, list5, actRef, "spell_bolt");
DamageEle(CC, id, power, element, list4, actRef, "spell_bolt");
return;
}
case EffectId.Bubble:ActRanged
public override bool Perform()
{
return false;
}
bool flag = weapon.trait is TraitToolRangeGun;
bool flag2 = weapon.trait is TraitToolRangeCane;
bool isRocket = weapon.trait is TraitToolRangeGunRocket;
GameSetting.EffectData effectData = EClass.setting.effect.guns.TryGetValue(weapon.id) ?? EClass.setting.effect.guns[flag2 ? "cane" : (flag ? "gun" : "bow")];
TraitToolRange traitRange = weapon.trait as TraitToolRange;
bool flag = weapon.trait is TraitToolRangeCane;
GameSetting.EffectData effectData = EClass.setting.effect.guns.TryGetValue(weapon.id) ?? EClass.setting.effect.guns[flag ? "cane" : ((weapon.trait is TraitToolRangeGun) ? "gun" : "bow")];
bool hasHit = false;
int numFire = effectData.num;
int numFireWithoutDamageLoss = numFire;public override bool Perform()
num3 = Mathf.Max(1, num3 * 100 / (100 + num4 * 5));
}
string missSound = ((weapon.trait is TraitToolRangeGun) ? "miss_bullet" : "miss_arrow");
if (weapon.trait is TraitToolRangeCane)
if (flag)
{
foreach (Element item in weapon.elements.dict.Values.Where((Element e) => e.source.categorySub == "eleAttack"))
{void Shoot(Card _tc, Point _tp, bool subAttack)
Card tC = Act.TC;
Chara cC = Act.CC;
Point point = Act.TP.Copy();
if (isRocket && EClass.rnd(3) == 0)
if (traitRange.ChanceMissAim > 0 && EClass.rnd(traitRange.ChanceMissAim) == 0)
{
Act.TP.Set(Act.TP.GetRandomNeighbor());
}void Shoot(Card _tc, Point _tp, bool subAttack)
}
}
}
if (isRocket)
switch (traitRange.GroundHitEffect)
{
case TraitToolRange.HitEffect.Rocket:
ActEffect.ProcAt(EffectId.Rocket, AttackProcess.Current.GetRocketPower(), BlessedState.Normal, Act.CC, null, Act.TP, isNeg: true, new ActRef
{
origin = Act.CC.Chara,
refThing = weapon,
aliasEle = "eleImpact"
});
break;
case TraitToolRange.HitEffect.Gravity:
ActEffect.ProcAt(EffectId.GravityGun, AttackProcess.Current.GetRocketPower() / 2, BlessedState.Normal, Act.CC, null, Act.TP, isNeg: true, new ActRef
{
origin = Act.CC.Chara,
refThing = weapon,
aliasEle = "eleImpact"
});
break;
}
Act.TC = tC;
Act.CC = cC;
Act.TP.Set(point);
if (!isRocket && (Act.TC == null || !Act.TC.IsAliveInCurrentZone))
if (traitRange.GroundHitEffect == TraitToolRange.HitEffect.None && (Act.TC == null || !Act.TC.IsAliveInCurrentZone))
{
break;
}AnimeID
Ride,
Truck,
PlayMusic,
QuakeMini
QuakeMini,
Gravity
}CINT
public const int isHalfEaten = 125;
public const int isDisableLoyal = 126;
public const int dateDeathLock = 130;
public const int fixedValue = 131;Card
public void SpawnLoot(Card origin)
if (Chara.IsMachine)
{
bool flag3 = Chara.HasElement(1248);
if (chance(200))
{
list.Add(ThingGen.Create("memory_chip"));
}
if (chance(20))
{
list.Add(ThingGen.Create(flag3 ? "scrap" : "microchip"));Chara
public void RestockEquip(bool onCreate)
AddThing("1071");
}
break;
case "namamani":
if (onCreate)
{
AddThing("gun_gravity2");
}
break;
case "lomias":
if (onCreate)
{public void RestockEquip(bool onCreate)
}
break;
}
if (onCreate || !TryEquipRanged())
if (!TryEquipRanged())
{
switch (id)
{public void ModAffinity(Chara c, int a, bool show = true, bool showOnlyEmo = fal
}
else
{
if (id == "keeper_garden")
if (!trait.CanChangeAffinity)
{
return;
}public bool RequestProtection(Chara attacker, Action<Chara> action)
{
continue;
}
bool flag2 = chara.HasElement(1225);
bool flag2 = chara.HasElement(1225) && !chara.GetBool(126);
if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
{
continue;DramaActor
public void Talk(string text, List<DramaChoice> choices, bool center, bool unkno
}
if (chara != null)
{
dialog.textAffinity.text = ((chara.c_bossType != 0) ? " - " : (chara.affinity.Name + " (" + chara._affinity + ")"));
dialog.textAffinity.text = ((chara.c_bossType != 0 || !chara.trait.CanChangeAffinity) ? " - " : (chara.affinity.Name + " (" + chara._affinity + ")"));
dialog.layoutInterest.DestroyChildren();
int num = chara.interest / 10 + 1;
if (chara.interest <= 0)DramaCustomSequence
Choice("disableMove", "_disableMove");
}
Choice((c.GetInt(123) == 0) ? "daSleepBeside" : "daSleepBeside2", "_sleepBeside");
if (c.HasElement(1225))
{
Choice((c.GetInt(126) == 0) ? "daDisableLoyal" : "daDisableLoyal2", "_disableLoyal");
}
if (c.GetInt(113) == 0)
{
Choice("daEquipSharedOff", "_toggleSharedEquip"); });
_Talk("tg", GetTopic(c, (c.GetInt(123) == 0) ? "ok" : "shutup"));
End();
Step("_disableLoyal");
Method(delegate
{
c.SetInt(126, (c.GetInt(126) == 0) ? 1 : 0);
});
_Talk("tg", GetTopic(c, (c.GetInt(126) == 0) ? "shutup" : "shutup2"));
End();
Step("_insult");
Method(delegate
{DramaManager
public void ParseLine(Dictionary<string, string> item)
});
});
break;
case "removeItem":
AddEvent(delegate
{
Thing thing = EMono.pc.things.Find(p2);
int num2 = p3.ToInt();
thing?.ModNum((num2 == 0) ? (-1) : (-num2));
});
break;
case "destroyItem":
AddEvent(delegate
{public bool CheckIF(string IF)
return EMono.player.dialogFlags.TryGetValue(array[1], 0) != 0;
case "!hasFlag":
return EMono.player.dialogFlags.TryGetValue(array[1], 0) == 0;
case "!hasMiscreation":
return !EMono.pc.party.HasElement(1248, excludePC: true);
case "hasItem":
return EMono.pc.things.Find(array[1]) != null;
case "nasuDeliver":DramaOutcome
public void event_swordkeeper()
EMono._zone.AddChara("swordkeeper", 45, 52);
}
public void upgrade_miscreation()
{
Chara chara = EMono.pc.party.members.Find((Chara c) => !c.IsPC && c.HasElement(1248));
int num = chara.Evalue(1248);
chara.SetFeat(1248, 0);
for (int i = 0; i < num; i++)
{
Rand.SetSeed(chara.uid + i);
DNA.GenerateRandomGene(chara.LV + 30, chara.uid + i).c_DNA.Apply(chara, reverse: false);
Rand.SetSeed();
}
}
public static bool If(DramaChoice item, Chara c)
{
_ = item.IF.Split('/')[0] == "costHire";EffectId
Bit = 307,
Rocket = 308,
StripBlessing = 309,
Flare = 310
Flare = 310,
GravityGun = 311
}FACTION
public const int bfSea = 3605;
public const int bfCave = 3500;
public const int bfFertile = 3700;
public const int bfGeyser = 3701;
public const int bfTranquil = 3703;
public const int bfUndersea = 3606;
public const int bfVolcano = 3704;
public const int bfHunt = 3705;
public const int bfUndersea = 3606;
public const int bfGum = 3803;
public const int bfCave = 3500;
public const int actBuildInspect = 4006;
public const int actBuildCollect = 4004;
public const int bfGum = 3803;
public const int actBuildAnywhere = 4003;
public const int actBuildTerrain = 4002;
public const int bfChitin = 3805;
public const int bfVolcano = 3704;
public const int bfHunt = 3705;
public static readonly int[] IDS = new int[53]
{
3706, 3783, 3781, 2207, 3780, 3710, 3709, 3708, 3707, 3782,
2204, 2116, 2115, 2117, 2118, 2119, 2120, 2200, 2201, 2206,
2202, 2203, 2205, 3784, 2003, 3800, 3804, 3802, 3801, 3600,
3601, 3602, 3603, 3604, 3605, 3500, 3700, 3701, 3702, 3703,
3606, 3705, 3803, 4006, 4005, 4004, 4003, 4002, 4001, 4000,
3900, 3805, 3704
3601, 3602, 3603, 3604, 3605, 3700, 3701, 3702, 3703, 3704,
3606, 3500, 4006, 4005, 4004, 3803, 4003, 4002, 4001, 4000,
3900, 3805, 3705
};
}
public class Faction : EClassFEAT
public class FEAT
{
public const int featDEX = 1621;
public const int featEND = 1622;
public const int featPER = 1623;
public const int featLER = 1624;
public const int featSPD = 1629;
public const int featMAG = 1625;
public const int featWIL = 1626;
public const int featHardy = 1630;
public const int featCHA = 1627;
public const int featLuck = 1628;
public const int featHardy = 1630;
public const int featSPD = 1629;
public const int featMAG = 1625;
public const int featDEX = 1621;
public const int featSTR = 1620;
public const int featWIL = 1626;
public const int featWhiteVixen = 1414;
public const int featDefense = 1631;
public const int featFoxMaid = 1415;
public const int featStamina = 1612;
public const int featMana = 1611;
public const int featInquisitor = 1416;
public const int featFoxMaid = 1415;
public const int featEvade = 1632;
public const int featDefense = 1631;
public const int featWhiteVixen = 1414;
public const int featFairysan = 1413;
public const int featSTR = 1620;
public const int featStamina = 1612;
public const int featSpotting = 1633;
public const int featEvade = 1632;
public const int featDefender = 1649;
public const int featRapidMagic = 1648;
public const int featMartial = 1635;
public const int featNegotiate = 1634;
public const int featFairysan = 1413;
public const int featLuckyCat = 1412;
public const int featGoldenFinger = 1662;
public const int featDismantler = 1661;
public const int featDreamWaker = 1653;
public const int featRapidArrow = 1652;
public const int featNegotiate = 1634;
public const int featSpotting = 1633;
public const int featRapidArrow = 1652;
public const int featMagicManner = 1651;
public const int featGourmet = 1650;
public const int featDefender = 1649;
public const int featRapidMagic = 1648;
public const int featSummoner = 1647;
public const int featFaith = 1636;
public const int featMartial = 1635;
public const int featGourmet = 1650;
public const int featEarthStrength = 1411;
public const int featMagicManner = 1651;
public const int featNirvana = 1231;
public const int featLuckyCat = 1412;
public const int featBoost = 1409;
public const int featBaby = 1232;
public const int featLittleOne = 1229;
public const int featReboot = 1410;
public const int featAdam = 1230;
public const int featBaby = 1232;
public const int featNirvana = 1231;
public const int featCosmicHorror = 1233;
public const int featGeneSlot = 1242;
public const int featReboot = 1410;
public const int featEternalYouth = 1243;
public const int featCentaur = 1244;
public const int featEarthStrength = 1411;
public const int featSevenSense = 1245;
public const int featGod_earth1 = 1305;
public const int featDemigod = 1228;
public const int featGod_wind1 = 1310;
public const int featLittleOne = 1229;
public const int featDemigod = 1228;
public const int featServant = 1227;
public const int featLoyal = 1225;
public const int featUnderground = 1226;
public const int featSlowFood = 1200;
public const int featSnail = 1211;
public const int featFairyResist = 1212;
public const int featGod_machine1 = 1315;
public const int featElea = 1213;
public const int featFairyResist = 1212;
public const int featManaPrecision = 1214;
public const int featShiva = 1224;
public const int featUnderground = 1226;
public const int featLoyal = 1225;
public const int featGod_machine1 = 1315;
public const int featElea = 1213;
public const int featEternalYouth = 1243;
public const int featGod_healing1 = 1320;
public const int featGod_harvest1 = 1325;
public const int featCentaur = 1244;
public const int featGod_luck1 = 1330;
public const int featPaladin = 1407;
public const int featTourist = 1406;
public const int featWizard = 1402;
public const int featThief = 1401;
public const int featPaladin2 = 1408;
public const int featPaladin = 1407;
public const int featThief = 1401;
public const int featWarrior = 1400;
public const int featGod_harvest1 = 1325;
public const int featGod_healing1 = 1320;
public const int featGod_strife1 = 1355;
public const int featGod_moonshadow1 = 1350;
public const int featGod_harmony1 = 1335;
public const int featGod_luck1 = 1330;
public const int featGod_strife1 = 1355;
public const int featWarrior = 1400;
public const int featPaladin2 = 1408;
public const int featBoost = 1409;
public static readonly int[] IDS = new int[130]
public static readonly int[] IDS = new int[131]
{
1621, 1622, 1623, 1624, 1629, 1626, 1627, 1628, 1630, 1625,
1620, 1414, 1611, 1610, 1422, 1421, 1420, 1419, 1418, 1417,
1416, 1415, 1631, 1413, 1612, 1632, 1648, 1634, 1412, 1661,
1660, 1659, 1658, 1657, 1656, 1655, 1654, 1653, 1652, 1633,
1651, 1649, 1647, 1646, 1645, 1644, 1643, 1642, 1641, 1640,
1636, 1635, 1650, 1411, 1231, 1409, 1229, 1230, 1232, 1233,
1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1410,
1244, 1245, 1246, 1247, 1248, 1249, 1270, 1271, 1290, 1300,
1305, 1228, 1310, 1227, 1225, 1200, 1201, 1202, 1203, 1204,
1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214,
1622, 1623, 1624, 1625, 1630, 1627, 1628, 1629, 1621, 1626,
1631, 1415, 1612, 1611, 1610, 1422, 1421, 1420, 1419, 1418,
1417, 1416, 1632, 1414, 1620, 1633, 1649, 1635, 1413, 1662,
1661, 1660, 1659, 1658, 1657, 1656, 1655, 1654, 1653, 1634,
1652, 1650, 1648, 1647, 1646, 1645, 1644, 1643, 1642, 1641,
1640, 1636, 1651, 1412, 1232, 1410, 1230, 1231, 1233, 1234,
1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1411,
1245, 1246, 1247, 1248, 1249, 1270, 1271, 1290, 1300, 1305,
1310, 1229, 1228, 1227, 1226, 1200, 1201, 1202, 1203, 1204,
1205, 1206, 1207, 1208, 1209, 1210, 1211, 1315, 1212, 1214,
1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224,
1226, 1315, 1243, 1325, 1406, 1405, 1404, 1403, 1402, 1401,
1407, 1400, 1320, 1350, 1345, 1340, 1335, 1330, 1355, 1408
1225, 1213, 1320, 1244, 1330, 1407, 1406, 1405, 1404, 1403,
1402, 1408, 1401, 1325, 1355, 1350, 1345, 1340, 1335, 1400,
1409
};
}
public class Feat : ElementLayerDragGrid
public static LayerDragGrid TryProc(Chara cc, InvOwnerEffect owner)
int num = ((owner.count == -1) ? 1 : owner.count);
for (int i = 0; i < num; i++)
{
List<Thing> list = cc.things.List((Thing t) => owner.ShouldShowGuide(t));
List<Thing> list = cc.things.List((Thing t) => owner.ShouldShowGuide(t), onlyAccessible: true);
if (list.Count > 0)
{
Thing t2 = list.RandomItem();POLICY
public const int mass_exhibition = 2814;
public const int prohibition = 2503;
public const int food_for_people = 2502;
public const int bed_quality = 2812;
public const int impressment = 2504;
public const int food_for_people = 2502;
public const int prohibition = 2503;
public const int wealth_tax = 2500;public static readonly int[] IDS = new int[51]
{
2816, 2817, 2818, 2819, 2820, 2821, 2824, 2823, 2825, 2826,
2827, 2828, 2815, 2822, 2814, 2503, 2812, 2514, 2513, 2512,
2511, 2510, 2509, 2515, 2508, 2506, 2505, 2504, 2502, 2500,
2827, 2828, 2815, 2822, 2814, 2502, 2812, 2514, 2513, 2512,
2511, 2510, 2509, 2515, 2508, 2506, 2505, 2504, 2503, 2500,
2813, 2507, 2516, 2501, 2701, 2811, 2810, 2800, 2715, 2700,
2711, 2710, 2712, 2708, 2707, 2706, 2705, 2704, 2703, 2702,
2709Party
return num;
}
public bool HasElement(int ele)
public bool HasElement(int ele, bool excludePC = false)
{
foreach (Chara member in members)
{
if (member.HasElement(ele))
if ((!excludePC || !member.IsPC) && member.HasElement(ele))
{
return true;
}RenderRow
public int ConvertTile(int tile)
public Sprite GetSprite(int dir = 0, int skin = 0, bool snow = false)
{
if (replacer.HasSprite(idSprite))
if (replacer.HasSprite(idSprite, renderData))
{
return replacer.data.GetSprite(snow);
}SpriteReplacer
public static Dictionary<string, SpriteReplacer> ListSkins()
return dictSkins;
}
public bool HasSprite(string id)
public bool HasSprite(string id, RenderData renderData = null)
{
if (!isChecked)
{public bool HasSprite(string id)
else
{
string text = CorePath.packageCore + "Texture/Item/" + id;
if (!File.Exists(text + ".png") && renderData != null)
{
text = CorePath.packageCore + "Texture/Item/" + renderData.name;
}
if (File.Exists(text + ".png"))
{
data = new SpriteDataTaskChopWood
public override HitResult GetHitResult()
{
Thing log = GetLog();
if (log != null && log.isNPCProperty && EClass._zone.IsUserZone && EClass.game.principal.disableUsermapBenefit)
{
return HitResult.Invalid;
}
if (GetLog() != null)
{
return HitResult.Valid;Thing
public override void SetRenderParam(RenderParam p)
}
if (!(num >= (float)source.anime[0]))
{
p.tile += num * (float)((!flipX) ? 1 : (-1));
p.tile += num * (float)((!(p.tile < 0f)) ? 1 : (-1));
}
}
else
{
float num2 = Time.realtimeSinceStartup * 1000f / (float)source.anime[1] % (float)source.anime[0];
p.tile += num2 * (float)((!flipX) ? 1 : (-1));
p.tile += num2 * (float)((!(p.tile < 0f)) ? 1 : (-1));
}
break;
}ThingContainer
while (enumerator.MoveNext())
{
Thing current = enumerator.Current;
if (!current.IsContainer && current.trait.CanBeStolen && !current.HasTag(CTAG.gift))
if (!current.IsContainer && current.trait.CanBeStolen && !current.HasTag(CTAG.gift) && (!current.IsEquipmentOrRangedOrAmmo || !current.IsUnique))
{
list.Add(current);
}Trait
public virtual int CostRerollShop
public virtual bool RemoveGlobalOnBanish => false;
public virtual bool CanChangeAffinity => true;
public string TextNextRestock => GetTextRestock(LangBarter, pet: false);
public string TextNextRestockPet => GetTextRestock((SlaverType == SlaverType.Slave) ? "daBuySlave" : "daBuyPet", pet: true);TraitGeyser
public class TraitGeyser : TraitSpot
public class TraitGeyser : TraitSpot
public class TraitGeyser : TraitBath
{
public override int radius => 4;
}+TraitKeeperOfGarden
File Created
public class TraitKeeperOfGarden : TraitUniqueChara
{
public override bool CanInvite => false;
public override bool CanChangeAffinity => false;
}TraitToolRange
public class TraitToolRange : TraitTool
public class TraitToolRange : TraitTool
{
public enum HitEffect
{
None,
Rocket,
Gravity
}
public virtual HitEffect GroundHitEffect => HitEffect.None;
public override bool CanAutofire => true;
public virtual bool NeedAmmo => true;
public virtual bool AutoRefillAmmo => false;
public virtual int ChanceMissAim => 0;
public int MaxAmmo => (GetParam(1) ?? "12").ToInt() * (100 + owner.Evalue(600) * 5) / 100;
public int ReloadTurn => (GetParam(2) ?? "4").ToInt() * 100 / (100 + owner.Evalue(601) * 10);+TraitToolRangeGunGravity
File Created
public class TraitToolRangeGunGravity : TraitToolRangeGunEnergy
{
public override HitEffect GroundHitEffect => HitEffect.Gravity;
}TraitToolRangeGunRocket
public class TraitToolRangeGunRocket : TraitToolRangeGun
public class TraitToolRangeGunRocket : TraitToolRangeGun
{
public override HitEffect GroundHitEffect => HitEffect.Rocket;
public override int ChanceMissAim => 3;
public override bool IsAmmo(Thing t)
{
return t.trait is TraitAmmoRocket;TraitUniqueCharaNoJoin
public class TraitUniqueCharaNoJoin : TraitChara
public class TraitUniqueCharaNoJoin : TraitChara
public class TraitUniqueCharaNoJoin : TraitUniqueChara
{
public override bool CanInvite => false;
public override bool CanChangeAffinity => false;
}