2using System.Collections.Generic;
4using System.Runtime.Serialization;
32 [JsonProperty(PropertyName =
"A")]
33 public int[]
_ints =
new int[30];
35 [JsonProperty(PropertyName =
"B")]
36 public string id =
"";
38 [JsonProperty(PropertyName =
"C")]
41 [JsonProperty(PropertyName =
"D")]
44 [JsonProperty(PropertyName =
"E")]
47 [JsonProperty(PropertyName =
"SC")]
260 return 0.001f * (float)
_ints[15];
264 _ints[15] = (int)(value * 1000f);
272 return 0.001f * (float)
_ints[16];
276 _ints[16] = (int)(value * 1000f);
288 _ints[17] = (int)value;
300 _ints[18] = (int)value;
324 _ints[19] = (int)value * 100;
1046 SetInt(103, value ? 1 : 0);
1058 SetInt(109, value ? 1 : 0);
1070 SetInt(63, value ? 1 : 0);
1082 SetInt(64, value ? 1 : 0);
1094 SetInt(120, value ? 1 : 0);
1106 SetInt(121, value ? 1 : 0);
1118 SetInt(122, value ? 1 : 0);
1816 return GetObj<UniqueData>(6);
1828 return GetObj<Thing>(9);
1840 return GetObj<List<SocketData>>(17);
1852 return GetObj<Thing>(10);
1876 return GetObj<CharaUpgrade>(11);
1888 return GetObj<LoveData>(20);
1900 return GetObj<CharaGenes>(15);
1912 return GetObj<List<int>>(16);
1936 return GetObj<DNA>(14);
1948 return GetObj<CharaList>(13);
1960 return GetObj<MixedFoodData>(18);
1972 return GetObj<Thing>(19);
1984 return GetObj<byte[]>(4);
2060 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2083 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2171 if (
Tiles.Length == 1)
2173 return dir % 2 == 1;
2237 return id ==
"grass";
2369 if (
Tiles.Length < 3)
2443 return bio.gender == 2;
2595 if (
card.isSale || !
card.trait.CanUseContent)
2600 if (windowSaveData !=
null)
2612 EClass.player.wasDirtyWeight =
true;
2630 public int Evalue(
int ele,
bool ignoreGlobalElement)
2656 return c_editorTags?.Contains(tag.ToString()) ??
false;
2689 int num2 =
item.Value;
2764 for (
int i = 0; i <
sockets.Count; i++)
2782 thing.parent =
this;
2832 CardBlueprint.current =
null;
2883 if (
id ==
"microchip")
2965 EClass._zone.Boss =
Chara;
3007 int num = elementContainer.Value(value.
id);
3037 public void AddExp(
int a,
bool applyMod =
true)
3062 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3066 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3097 Say(
"dingExp",
this);
3112 int num = Mathf.Min(1 +
LV / 5, 20);
3113 for (
int i = 0; i < num; i++)
3115 if (
Evalue(1644) < i + 1)
3153 if (rootCard !=
null && rootCard.
IsPC)
3208 Debug.LogWarning(
"already child:" + t);
3213 Debug.Log(
"already in the list" + t);
3228 t.ignoreAutoPick =
false;
3272 if (rootCard !=
null && rootCard.
IsPC)
3281 t.isNPCProperty =
false;
3295 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3298 void TryAdd(
Thing a)
3300 if (!ings.Contains(a.
id))
3318 List<Chara> list =
new List<Chara>();
3334 if (!
item.IsPCFactionOrMinion)
3339 if (list2.Count == 0)
3343 foreach (
Thing item2
in list2)
3348 item.body.Unequip(item2);
3350 item2.c_idDeity = artifactDeity?.
id ??
null;
3351 Msg.
Say(
"waterCurse", item2);
3355 foreach (
Chara item3
in list)
3362 if (list3.Count == 0)
3366 foreach (
Thing item4
in list3)
3368 Msg.
Say(
"destroyed_inv_", item4, item3);
3380 List<Chara> list =
new List<Chara>();
3394 if (
item.IsPCFactionOrMinion)
3408 for (
int num =
things.Count - 1; num >= 0; num--)
3419 rootCard.Chara.held =
null;
3425 instance.selectedButton.card =
null;
3428 ActionMode.AdvOrRegion.updatePlans =
true;
3445 if (thing.
invY == 1)
3447 WidgetCurrentTool.dirty =
true;
3451 if (thing.
props !=
null)
3459 WidgetHotbar.dirtyCurrentItem =
true;
3460 thing.parent =
null;
3465 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3472 thing.parent =
null;
3481 return EClass.ui.layers.Count > 0;
3503 to.c_isImportant =
true;
3528 return card.GetRootCard();
3555 thing.encLV =
encLV;
3556 thing.decay =
decay;
3559 foreach (KeyValuePair<int, int>
item in mapInt)
3563 foreach (KeyValuePair<int, string> item2
in mapStr)
3565 thing.
mapStr[item2.Key] = item2.Value;
3571 thing.sockets = IO.DeepCopy(
sockets);
3587 ModNum(-a, notify:
false);
3599 return this as
Thing;
3602 return this as
Thing;
3608 return this as
Thing;
3611 public void ModNum(
int a,
bool notify =
true)
3650 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3656 for (
int i = 0; i <
sockets.Count; i++)
3674 for (
int i = 0; i <
sockets.Count; i++)
3680 int ele = num / 1000;
3681 int num2 = num % 1000;
3776 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3782 string encSlot = source.
encSlot;
3783 if (encSlot ==
null || encSlot.Length != 0)
3796 string[] array = source.
encSlot.Split(
',');
3797 foreach (
string key
in array)
3845 if (this.placeState == newState)
3851 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3863 float num2 = (
fy = 0f);
3874 this.placeState = newState;
3882 this.placeState = newState;
3937 num = num * (100 +
Quality) / 100;
3974 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4021 public bool TryPay(
int a,
string id =
"money")
4028 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4032 if (
IsPC && !(
id ==
"ration"))
4052 Say(
"spellbookCrumble",
this);
4061 if (
id ==
"influence")
4073 if (
id ==
"influence")
4080 if (sum >
int.MaxValue)
4108 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4110 if (num > 100000000)
4142 int num =
PV + orCreateElement.Value +
DEX / 10;
4149 num2 = num3 / 10 + 1;
4150 sides = num3 / num2 + 1;
4152 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4154 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4155 dmg -= num4 * mod / 100;
4169 int num = origin.Evalue(1238);
4173 if (origin.HasElement(1247))
4178 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4182 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4186 if (idEle == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4195 DamageHP(dmg, 0, 0, attackSource, origin);
4204 bool flag = originalTarget !=
null;
4205 Action onEvade =
null;
4214 Say(
"wall_bond", chara3,
this);
4223 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4229 int num = chara4.
Evalue(1241);
4230 int num2 = chara4.
Evalue(438);
4233 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4234 chara4.
DamageHP(dmg * (100 + ((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4242 if (origin !=
null && origin.HasElement(1208))
4244 switch (attackSource)
4247 dmg = dmg * 130 / 100;
4248 eleP = eleP * 150 / 100;
4251 dmg = dmg * 120 / 100;
4252 eleP = eleP * 150 / 100;
4258 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4261 if (ele == 0 || ele == 926)
4266 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4272 if (attackSource !=
AttackSource.Condition && showEffect)
4283 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4284 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4291 if (chara2 !=
null && chara2.
isWet)
4300 if (chara !=
null && chara.
isWet)
4302 dmg = dmg * 150 / 100;
4308 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4316 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4318 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4327 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4332 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4334 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4341 dmg = dmg * 90 / 100;
4345 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4349 dmg = dmg * 90 / 100;
4368 dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
4372 dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
4377 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4379 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4381 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4389 int num6 =
MaxHP / 10;
4390 long num7 = dmg - num6;
4391 num7 = num7 * 100 / (200 +
Evalue(68) * 10);
4403 long num8 = 99999999L;
4407 if (condition !=
null)
4409 num8 = num8 * (100 + condition.lv * 5) / 100;
4416 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4427 if (hp < 0 && Chara.mana.value >= 0)
4443 Chara.mana.value -= (int)dmg;
4460 float ratio = (float)dmg / (
float)
MaxHP;
4471 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4473 aI_PracticeDummy.hit++;
4474 aI_PracticeDummy.totalDamage += dmg;
4517 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4526 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4547 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4549 EClass.player.invlunerable =
true;
4588 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4595 text =
"dead_" + e.
source.alias;
4599 text =
"dead_attack";
4607 text =
"kill_" + e.source.alias;
4611 text =
"kill_attack";
4613 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4621 Say(
"reboot",
this);
4628 if (HasCondition<ConRebirth>())
4630 Say(
"rebirth",
this);
4642 Msg.alwaysVisible =
true;
4643 Msg.
Say(
"layhand", chara5,
this);
4644 Msg.
Say(
"pray_heal",
this);
4654 if (zoneInstanceBout !=
null)
4686 Die(e, origin, attackSource, originalTarget);
4687 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4689 origin.isSummon =
true;
4690 origin.c_summonDuration = 4;
4697 string text2 =
new int[18]
4699 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4700 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4701 }.RandomItem().ToString();
4704 text2 =
"casino_coin";
4708 text2 =
"scratchcard";
4736 if (origin !=
null && origin.isChara)
4758 if (origin.GetInt(106) == 0)
4760 origin.Chara.TalkTopic(
"kill");
4765 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4767 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4771 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4772 if (num9 >= (
float)num13)
4776 Say(
"dmg_" + e.source.alias,
this);
4780 Say(
"dmg" + num9,
this);
4803 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4807 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4811 int num15 = origin.Dist(
this);
4815 if (
id ==
"hedgehog_ether")
4819 Say(
"reflect_thorne", origin,
this);
4820 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4825 Say(
"reflect_acid",
this, origin);
4826 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4838 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4849 int num16 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4859 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4865 Condition.ignoreEffect =
true;
4867 Condition.ignoreEffect =
false;
4871 float num17 = (float)
hp / (
float)
MaxHP;
4878 PlaySound(
"heartbeat", 1f - num17 * 2f);
4911 EClass.player.forceTalk =
true;
4913 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4924 void EvadeDeath(Action action)
4929 Chara.mana.value = 0;
4943 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4945 int num18 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
4946 int num19 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
4949 int num20 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
4950 origin.Chara.stamina.Mod(num20);
4956 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4958 int num21 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4959 origin.Chara.mana.Mod(num21);
4967 int num22 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
4968 origin.Chara.mana.Mod(num22);
4985 bool hostile =
false;
4989 if (Chance(30 + eleP / 5, 100))
4991 MarkHostile().AddCondition<
ConBurning>(eleP);
4997 if (Chance(30 + eleP / 10, 100))
5002 else if (Chance(50 + eleP / 10, 100))
5008 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5014 if (Chance(30 + eleP / 5, 100))
5016 MarkHostile().AddCondition<
ConPoison>(eleP);
5020 if (Chance(30 + eleP / 5, 100))
5027 if (Chance(30 + eleP / 5, 100))
5036 if (Chance(30 + eleP / 5, 100))
5041 else if (Chance(30 + eleP / 5, 100))
5047 if (Chance(50 + eleP / 10, 100))
5055 if (Chance(30 + eleP / 5, 100))
5074 if (Chance(5 + eleP / 25, 40))
5078 if (Chance(5 + eleP / 25, 40))
5082 if (Chance(5 + eleP / 25, 40))
5086 if (Chance(5 + eleP / 25, 40))
5088 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5090 if (Chance(5 + eleP / 25, 40))
5094 if (Chance(5 + eleP / 25, 40))
5098 if (Chance(30 + eleP / 10, 100))
5104 if (Chance(50 + eleP / 10, 100))
5106 MarkHostile().AddCondition<
ConBleed>(eleP);
5110 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5123 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5127 static bool Chance(
int a,
int max)
5129 return Mathf.Min(a, max) >
EClass.
rnd(100);
5140 Card rootCard = GetRootCard();
5142 if (_pos !=
null && !_pos.
IsValid)
5153 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5154 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5156 text += e.source.alias;
5160 Msg.
Say(text,
this, rootCard);
5165 Msg.
Say(
"destroyed",
this);
5170 things.ForeachReverse(delegate(
Thing t)
5180 if (e !=
null && _pos !=
null && e.id == 21)
5186 Explode(pos, origin);
5194 origin = origin?.Chara,
5196 aliasEle =
"eleImpact"
5202 PlaySound(
material.GetSoundDead(sourceCard));
5210 Debug.Log(Name +
" is already destroyed.");
5221 Chara.isDead =
true;
5239 for (
int num = things.Count - 1; num >= 0; num--)
5241 things[num].Destroy();
5248 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5254 List<Card> list =
new List<Card>();
5255 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5258 if (this.rarity >=
Rarity.Legendary)
5291 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5303 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5311 if (flag2 && !isUserZone)
5314 bool num2 = text ==
"_meat";
5326 text =
"meat_marble";
5329 if (thing3.
source._origin ==
"meat")
5343 if (!IsPCFaction && !isUserZone)
5345 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5347 string[] array = item2.
Split(
'/');
5348 int num4 = array[1].ToInt();
5397 if (!isBackerContent && !flag)
5433 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5454 List<Thing> list2 =
new List<Thing>();
5455 foreach (
Thing thing6
in things)
5481 if (num5 > 0 && list2.Count > 0)
5484 for (
int j = 0; j < list2.Count && j < num5; j++)
5490 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5493 foreach (
Card item3
in list)
5502 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5507 for (
int k = 0; k < num5; k++)
5536 List<Thing> list3 = thing4.
things.ToList();
5546 while (num8 > 0 && list3.Count != 0)
5548 Thing thing5 = list3.First();
5549 list3.Remove(thing5);
5560 foreach (
Thing thing7
in things)
5562 if (thing7.
GetInt(116) != 0)
5567 Point nearestPoint = GetRootCard().pos;
5572 foreach (
Card item4
in list)
5578 item4.isHidden =
false;
5579 item4.isNPCProperty =
false;
5636 case "egg_fertilized":
5641 string text =
"c_wilds";
5642 if (
id ==
"_meat" ||
id ==
"meat_marble")
5650 for (
int i = 0; i < 20; i++)
5653 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5663 if (crafter !=
null && crafter.id ==
"big_sister")
5665 cardRow = crafter.source;
5670 if (c_idRefCard.IsEmpty())
5672 MakeRefFrom(cardRow.
model);
5677 MakeFoodFrom(cardRow.
model);
5679 return this as
Thing;
5685 return this as
Thing;
5702 int num = race.
food[0].ToInt();
5703 bool flag =
id ==
"meat_marble";
5705 bool flag2 = category.
IsChildOf(
"meat");
5717 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5720 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5722 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5726 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5744 foreach (
Element value
in c.elements.dict.Values)
5746 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5751 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5752 foreach (KeyValuePair<int, int>
item in race.elementMap)
5756 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5759 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5760 for (
int i = 0; i < num2 && i < list.Count; i++)
5762 Tuple<int, int> tuple = list[i];
5763 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5765 if (c.Chara.IsUndead)
5767 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5769 isWeightChanged =
true;
5770 c_weight = race.height * 4 + 100;
5771 c_idMainElement = c.c_idMainElement;
5773 int num3 = c.LV - c.sourceCard.LV;
5779 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5783 if (flag2 && c.IsPCFaction && c.IsUnique)
5798 if (IsIgnoreName(
card))
5802 if (IsIgnoreName(card2))
5806 if (
card ==
null && card2 !=
null)
5813 MakeRefFrom(
card, card2);
5814 if (
card.c_idRefCard !=
null)
5816 c_idRefCard =
card.c_idRefCard;
5817 c_altName = TryGetFoodName(
card);
5822 c_altName2 = TryGetFoodName(card2);
5825 static bool IsIgnoreName(
Card c)
5855 if (!row.aka.IsEmpty())
5857 if (row.name ==
"*r" && row.aka ==
"*r")
5859 return "corpseGeneral".lang();
5861 if (row.name ==
"*r")
5863 return row.GetText(
"aka");
5866 return row.GetName();
5871 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5887 c_idRefCard = c1.
id;
5891 c_idRefCard2 = c2.id;
5892 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5894 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5908 thing.c_idMainElement = c_idMainElement;
5917 return GiveBirth(thing, effect);
5935 int num2 = LV - sourceCard.
LV;
5940 if (num2 >= 10 && !HasElement(1290))
5948 return GiveBirth(thing, effect);
5954 EClass.player.forceTalk =
true;
5955 card.Talk(
"giveBirth");
5959 card.pos.PlayEffect(
"revive");
5960 card.pos.PlaySound(
"egg");
5972 string[] array = ((!(
id ==
"cocoon")) ?
new string[4] {
"alien",
"alien",
"alien",
"alien2" } :
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" });
5976 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5978 PlaySound(
"egghatch");
5987 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5990 if (chara !=
null && isChara)
5993 chara.isHatchling =
true;
6045 SayNothingHappans();
6048 PlayEffect(
"teleport");
6051 Say(
"antiTeleport",
this);
6052 PlaySound(
"gravity");
6057 PlaySound(
"teleport");
6058 Say(
"teleported",
this);
6067 if (chara.
enemy ==
this)
6078 EClass.player.haltMove =
true;
6080 PlayEffect(
"teleport", useRenderPos:
false);
6087 PlayEffect(
"ripple");
6088 PlaySound(
"Footstep/water");
6099 int num = p.x - pos.
x;
6100 int num2 = p.z - pos.
z;
6117 if (num == 0 && num2 == 0)
6131 for (
int i = -1; i < 2; i++)
6133 for (
int j = -1; j < 2; j++)
6137 point.x = pos.x + j;
6138 point.z = pos.z + i;
6152 return _Move(newPoint);
6155 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6159 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6163 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6165 if (!IsAliveInCurrentZone)
6191 Say(
"kick",
this, t);
6225 if (elements.
Value(ele) <= 0)
6227 if (includeNagative)
6229 return elements.
Value(ele) < 0;
6238 return elements.
Value(ele) >= req;
6253 if (HasElement(764))
6257 if (HasElement(759))
6261 if (HasElement(703))
6265 if (HasElement(758))
6269 if (HasElement(704))
6287 for (
int i = 0; i < a; i++)
6298 shared.color = 11010048f;
6299 shared.liquidLv = 0;
6301 SetRenderParam(shared);
6321 isDyed = mat !=
null;
6322 c_dyeMat = mat?.id ?? 0;
6338 else if (isElemental)
6375 int num = EClass.game.seed + refVal;
6376 num +=
id[0] % 10000;
6379 num +=
id[1] % 1000;
6382 num +=
id[2] % 1000;
6385 num +=
id[3] % 1000;
6388 num +=
id[4] % 1000;
6397 return ref _randColor;
6422 public void SetImage(Image image,
int dir,
int idSkin = 0)
6424 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6434 Sprite sprite = GetSprite();
6435 if (!c_idSpriteReplacer.IsEmpty())
6438 if (spriteReplacer !=
null)
6442 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6446 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6449 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6451 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6455 renderer.
ShowEmo(_emo, duration);
6463 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6468 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6473 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6478 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6481 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6483 Card rootCard = GetRootCard();
6490 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6515 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6521 Card rootCard = GetRootCard();
6525 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6533 Card rootCard = GetRootCard();
6556 public virtual void Rotate(
bool reverse =
false)
6559 if (sourceCard.
tiles.Length > 4)
6561 num = sourceCard.
tiles.Length;
6623 fx = fx - vector.x + thingPosition.x;
6624 fy = fy - vector.y + thingPosition.y;
6628 float num2 = (fy = 0f);
6652 renderParam.x = v.x;
6653 renderParam.y = v.y;
6654 renderParam.z = v.z;
6656 v.x = renderParam.
x;
6657 v.y = renderParam.
y;
6658 v.z = renderParam.
z;
6672 v.z += thingPosition.z;
6679 if (useCurrentPosition)
6694 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6705 EClass.player.lightRadius = 1;
6713 return GetLightRadius() > 0;
6721 return 0.01f * LightData.color.a * 256f * 1.12f;
6723 if (IsPCFaction && !IsPC)
6789 num2 = traitLightSource.LightRadius;
6794 if (lightRadius > 0)
6796 if (lightRadius > num2)
6816 int radius = GetLightRadius();
6821 float power = GetLightPower();
6842 EClass.player.lightRadius = radius;
6843 EClass.player.lightPower = power;
6849 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6860 int num = (trait.UseLightColor ? c_lightColor : 0);
6863 fov.r = (byte)(num / 1024);
6864 fov.g = (byte)(num % 1024 / 32);
6865 fov.b = (byte)(num % 32);
6906 if (fov !=
null && fov.
lastPoints.Count != 0)
6925 things.ForeachReverse(delegate(
Thing t)
6929 if (sourceCard.
_origin ==
"dish")
6937 else if (!isChara && trait.
Decay != 0)
6939 Decay(trait.
Decay * hour);
6957 int num2 = MaxDecay / 4 * 3;
6962 num =
card.trait.DecaySpeedChild;
6964 num = num * trait.DecaySpeed / 100;
6965 int num3 = Evalue(405);
6968 num = num * (100 - num3 * 2) / 100;
6980 if (decay + a > MaxDecay)
6982 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6991 card.AddCard(thing);
6992 if (!IsParentLocked())
6994 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
7003 else if (GetRootCard() ==
EClass.
pc)
7005 if (!IsParentLocked())
7017 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7019 if (!IsParentLocked())
7026 bool IsParentLocked()
7028 if (parent is
Thing)
7030 return (parent as
Thing).c_lockLv > 0;
7038 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7041 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7045 EClass.player.forceTalk =
false;
7049 EClass.player.forceTalk =
false;
7050 if (!isSynced && !forceSync)
7055 GameLang.refDrama1 = ref1;
7056 GameLang.refDrama2 = ref2;
7057 string text = GetTalkText(idTopic, stripPun:
true);
7059 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7065 switch ((condition !=
null) ? condition.
chara.
id :
id)
7078 TalkRaw(text, ref1, ref2, forceSync);
7081 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7083 if ((!isSynced && !forceSync) || text.IsEmpty())
7090 text = text.Replace(
"#1", ref1);
7094 text = text.Replace(
"#2", ref2);
7096 HostRenderer.Say(ApplyNewLine(text));
7097 text = StripTalkSpeiclaCharacters(text);
7098 bool flag = text.StartsWith(
"*");
7102 text = text.Bracket();
7104 Msg.
Say(text.Replace(
"&",
""));
7113 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7115 return text.Substring(2);
7121 return text.Substring(1);
7128 if (text.Contains(
"&"))
7130 string text2 =
"_comma".lang();
7131 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7132 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7133 text = text.Replace(
"&", Environment.NewLine ??
"");
7138 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7140 if (isSynced && !text.IsEmpty())
7144 text = text.Replace(
"#1", ref1);
7148 text = text.Replace(
"#2", ref2);
7150 HostRenderer.Say(text);
7156 Say(
"nothingHappens");
7159 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7168 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7177 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7186 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7190 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7191 if (!text.IsEmpty())
7193 text = text.Split(
'|').RandomItem();
7194 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7196 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7198 text =
"(" + text +
")";
7200 text = text.Replace(
"。)",
")");
7203 return ApplyTone(text, stripPun);
7209 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7212 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7218 string[] array = _tones.IsEmpty(
"").Split(
'|');
7219 string key = array[0];
7224 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7228 if (array[0].IsEmpty())
7237 if (array.Length >= 2)
7239 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7241 if (array.Length >= 3)
7243 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7246 text2 = stringBuilder.ToString();
7250 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7261 return text2.StripLastPun();
7276 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7277 if (list.Count != 0)
7279 int mtp = EClass.core.config.test.extraToneMTP
switch
7292 string text = list.RandomItem()[
"id"];
7293 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7300 return ListCraftBonusTraits().Count > 0;
7305 List<Element> list =
new List<Element>();
7306 string[] tag = sourceCard.
tag;
7307 for (
int i = 0; i < tag.Length; i++)
7309 string[] array = tag[i].Split(
'/');
7310 if (!(array[0] !=
"craft_bonus"))
7326 if (dest.
stack !=
null)
7330 Say(
"stack_thing", t, dest.
stack);
7344 c_idBacker = row.
id;
7350 chara.hostility = hostility2;
7356 Chara.idFaith = row.
deity.ToLowerInvariant();
7361 if (
id ==
"putty_snow")
7374 if (c_idBacker == 164)
7387 c_textureData = GetPaintData();
7397 Sprite sprite = GetSprite();
7398 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7399 int num = sprite.texture.width * 2;
7400 int num2 = sprite.texture.height * 2;
7401 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7402 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7403 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7404 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7405 texture2D2.SetPixels(pixels);
7407 byte[] result = texture2D2.EncodeToJPG();
7408 UnityEngine.Object.Destroy(texture2D);
7409 UnityEngine.Object.Destroy(texture2D2);
7415 if ((
bool)_paintSprite)
7417 UnityEngine.Object.Destroy(_paintSprite.texture);
7418 UnityEngine.Object.Destroy(_paintSprite);
7419 _paintSprite =
null;
7427 byte[] data = c_textureData;
7428 Texture2D texture2D =
new Texture2D(1, 1);
7429 texture2D.LoadImage(data);
7430 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7434 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7437 return _paintSprite;
7442 if (!(GetRestrainer() ==
null || force))
7446 isRestrained =
false;
7447 Say(
"unrestrained",
this);
7458 if (c_rescueState ==
RescueState.WaitingForRescue)
7472 c.DoHostileAction(
item, immediate:
true);
7499 result = row.value * mat.value / 100;
7536 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7537 if (
id ==
"plat" && !sell)
7548 num2 += (float)c_priceCopy * 0.2f;
7549 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7553 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7555 if (IsFood && !
material.tag.Contains(
"food"))
7560 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7578 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7580 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7582 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7583 if (IsEquipmentOrRanged)
7588 num4 += value.
source.value;
7590 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7591 if (rarity >=
Rarity.Legendary)
7593 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7601 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7603 num2 = (category.
tag.Contains(
"enc") ? (num2 * (0.7f + (float)(encLV - 1) * 0.2f)) : ((!IsFood) ? (num2 * (1f + (
float)encLV * 0.01f)) : ((!(
id ==
"honey")) ? (num2 * Mathf.Min(1f + 0.1f * (
float)encLV, 2f) + (
float)(encLV * 100)) : (num2 + (float)(encLV * 10)))));
7607 num2 *= (float)(tier + 1);
7614 if (priceType ==
PriceType.CopyShop && sell)
7620 if (
id ==
"littleball")
7627 if (
id ==
"crimale2")
7635 case "ticket_fortune":
7641 case "scroll_alias":
7643 case "scroll_biography":
7658 if (!(text ==
"mathammer"))
7660 if (!(text ==
"water_jure"))
7666 return 50 + material.tier * material.tier * 10;
7679 case "hammer_strip":
7709 case "diary_sister":
7713 case "diary_catsister":
7715 case "container_magic":
7717 case "wrench_tent_elec":
7719 case "wrench_tent_soil":
7721 case "wrench_tent_seabed":
7725 case "wrench_storage":
7727 case "wrench_fridge":
7729 case "wrench_extend_v":
7731 case "wrench_extend_h":
7737 case "hammer_garokk":
7739 case "scroll_random":
7753 if (!sell &&
id ==
"casino_coin")
7757 int value = GetValue(priceType, sell);
7767 Trait trait = this.trait;
7772 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7777 p *= 1f + 0.5f * (float)c_containerSize;
7780 if (c_priceFix != 0)
7782 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7792 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7803 if (!sell && category.
id ==
"spellbook")
7807 bool flag = priceType ==
PriceType.CopyShop;
7808 int num = ((!flag) ? 1 : 5);
7809 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7810 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7811 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7816 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7818 p *= 0.20000000298023224;
7821 p *= 0.20000000298023224;
7824 p *= 0.20000000298023224;
7828 p *= 0.20000000298023224;
7834 if ((uint)(priceType - 1) <= 1u)
7846 if (
id ==
"rod_wish")
7848 p *= (sell ? 0.01f : 50f);
7863 p *= 0.20000000298023224;
7867 p *= 0.10000000149011612;
7870 p *= 0.0020000000949949026;
7873 p *= 0.00019999999494757503;
7876 p *= 0.004999999888241291;
7887 p *= (flag ? 1.25f : 0.3f);
7891 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7895 p *= (flag ? 0.9f : 0.5f);
7907 p *= 1f + 0.2f * (float)c.Evalue(1406);
7920 p *= 1.100000023841858;
7954 else if (category.
IsChildOf(
"furniture"))
7974 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7981 p = ((!sell) ? 1 : 0);
7989 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7991 else if (p > 10000.0)
7993 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7995 else if (p > 1000.0)
7997 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
8001 p = Mathf.CeilToInt((
float)p / 100f) * 100;
8005 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8013 if (p > (
double)(sell ? 500000000 : 1000000000))
8026 return Name + GetExtraName();
8043 ForeachPoint(delegate(
Point p,
bool main)
8045 int num2 = DistMulti(p, c);
8053 return DistMulti(pos, c);
8085 isCensored = enable;
8095 if (isDeconstructing != deconstruct)
8105 isDeconstructing = deconstruct;
8119 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8122 sortVal = -GetPrice(
currency) * 1000;
8125 sortVal = -Num * 1000;
8128 sortVal = category.sortVal * 1000;
8131 sortVal = -ChildrenAndSelfWeight * 1000;
8134 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8137 sortVal = -GetPrice(
currency) * 1000;
8140 sortVal = sourceCard._index * 1000;
8150 num =
id.CompareTo(c.
id);
8170 num = encLV - c.
encLV;
8189 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8207 action(pos, arg2:
true);
8221 SE.Play(
"pop_paper");
8251 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8264 if (!HaveFur() || c_fur < 0)
virtual bool CancelWhenDamaged
static void LoveMiracle(Chara tc, Chara c, int power, EffectId idEffect=EffectId.Love, BlessedState? state=null)
static void TryDelay(Action a)
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
void Add(Act a, string s="")
virtual bool IsRoofEditMode(Card c=null)
virtual void OnInstallCard(Card t)
virtual void OnUninstallCard(Card t)
static void ProcShieldEncs(Chara CC, Card TC, int mtpChance=100)
static void GakiConvert(ref string text, string idLang="zako")
Dictionary< int, int > mapInt
void SetStr(int id, string value=null)
void SetObj(int id, object o)
string GetStr(int id, string defaultStr=null)
int GetInt(int id, int? defaultInt=null)
void SetInt(int id, int value=0)
Dictionary< int, string > mapStr
void Mod(int a, bool force=false)
SourceElement.Row sourceElement
void WaitForEndOfFrame(Action action)
List< Action > actionsNextFrame
virtual void RefreshPosition()
static void PublishEvent(string eventId, object data=null)
virtual ConditionType Type
static int GetColorInt(ref Color matColor, int p)
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
Vector3 GetThingPosition(Card tg, Point p)
void SetPortrait(Chara c)
virtual void RefreshSprite()
static void SetRarity(Rarity q=Rarity.Normal)
static CardBlueprint current
static void Set(CardBlueprint _bp=null)
static CardBlueprint _Default
GlobalCharaList globalCharas
void ShowEmo(Emo emo, float duration=0f)
void PlayAnime(AnimeID id, bool force)
override void Draw(RenderParam p)
virtual void SetOwner(Card c)
virtual void SetFirst(bool first, Vector3 pos)
void SetCensored(bool enable)
int CountRune(bool countFree=true)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
virtual string AliasMaterialOnCreate
virtual string GetName(NameStyle style, int num=-1)
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
virtual string GetHoverText()
void Teleport(Point point, bool silent=false, bool force=false)
virtual string GetExtraName()
ContainerUpgrade c_containerUpgrade
void PurgeDuplicateArtifact(Thing af)
void RemoveEditorTag(EditorTag tag)
void ApplySocket(int id, int lv, Card mod=null)
SocketData AddRune(Card rune)
bool CanAddRune(TraitMod mod)
void Say(string lang, Card c1, Card c2, string ref1=null, string ref2=null)
virtual void ApplyMaterialElements(bool remove)
virtual void OnSimulateHour(VirtualDate date)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
void SetCensored(bool enable)
ElementContainerCard elements
void _OnDeserialized(StreamingContext context)
bool IsRestrainedResident
SourceBacker.Row sourceBacker
bool TryReserve(AIAct act)
Hostility c_originalHostility
bool IsExcludeFromCraft(Recipe.Ingredient ing)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
void AddBlood(int a=1, int id=-1)
void SetRandomLightColors()
CardRenderer HostRenderer
void OnChildNumChange(Card c)
int Evalue(int ele, bool ignoreGlobalElement)
bool IsStackable(Thing tg)
bool HasElement(string id, int req=1)
void Explode(Point p, Card origin)
SourceMaterial.Row DyeMat
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
void MakeRefFrom(Card c1, Card c2=null, bool simple=false)
Card MakeRefFrom(string id)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
int GetResistPenetrationLevel(int idEle, AttackSource attackSource, Card origin=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
int GetCurrency(string id="money")
void ForeachPoint(Action< Point, bool > action)
void Dye(SourceMaterial.Row mat)
virtual bool IsPCPartyMinion
string c_idSpriteReplacer
SourceMaterial.Row _material
bool HasElement(int ele, int req)
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
void ModExpParty(int ele, int a)
bool HasTalk(string idTopic)
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
void DecayNatural(int hour=1)
bool IsInMutterDistance(int d=10)
virtual void OnCreate(int genLv)
virtual void LookAt(Card c)
void RenderMarker(Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
virtual long ApplyProtection(long dmg, int mod=100)
void MakeFoodRef(Card c1, Card c2=null)
MoveResult TryMoveFrom(Point p)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
bool HasCraftBonusTrait()
virtual void Rotate(bool reverse=false)
Card SetHidden(bool hide=true)
void SetFreePos(Point point)
int GetDaysTogetherBonus()
void DamageHP(long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null, int resistPenetrationLevel=0)
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
TraitShackle GetRestrainer()
virtual void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
bool CanReserve(AIAct act)
virtual void OnSerializing()
Window.SaveData c_windowSaveData
BlessedState blessedState
void PlaySoundDrop(bool spatial=true)
ref Color GetRandomColor()
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void TryUnrestrain(bool force=false, Chara c=null)
RescueState c_rescueState
void SetImage(Image image, int dir, int idSkin=0)
virtual CardRow sourceCard
void ModExp(string alias, int a)
List< Element > ListCraftBonusTraits()
int ChildrenAndSelfWeight
int GetTotalQuality(bool applyBonus=true)
Thing Add(string id, int num=1, int lv=1)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void SetDeconstruct(bool deconstruct)
virtual void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
virtual MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
void ModNum(int a, bool notify=true)
void Kick(Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Hostility OriginalHostility
Condition AddCondition(string id, int p=100, bool force=false)
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
void SetFeat(int id, int value=1, bool msg=false)
override string ToString()
ElementContainer tempElements
List< Condition > conditions
bool HasCondition(string alias)
override bool IsPCFaction
void CalculateMaxStamina()
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
ConBaseTransmuteMimic mimicry
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Chara SetHostility(Hostility h)
void TrySetEnemy(Chara c)
bool HasCooldown(int idEle)
bool DroppedCard(string id)
CodexCreature GetOrCreate(string id)
void MarkCardDrop(string id)
UD_String_LightData lightColors
UD_String_MatData matColors
override void Reveal(Card attacker=null, bool surprise=false)
virtual bool ShouldRevealOnContact
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
static long GetResistDamage(long dmg, int v, int power=0)
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
void ModExp(int ele, int a)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
bool Equals(int _x, int _z)
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
static Religion recentWrath
static Religion GetArtifactDeity(string id)
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(string suffix="")
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
long GetCurrency(string id, ref long sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual void OnBarter(bool reroll=false)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
virtual int SightRadiusBonus
Chara SpawnMob(string id, Point pos=null)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)