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";
2385 if (
Tiles.Length < 3)
2459 return bio.gender == 2;
2559 return GetBool(
id.GetHashCode());
2564 SetBool(
id.GetHashCode(), enable);
2567 public int GetInt(
string id,
int? defaultInt =
null)
2569 int num =
GetInt(
id.GetHashCode(), defaultInt);
2579 AddInt(
id.GetHashCode(), value);
2588 SetInt(
id.GetHashCode(), value);
2595 public string GetStr(
string id,
string defaultStr =
null)
2597 return GetStr(
id.GetHashCode(), defaultStr);
2600 public void SetStr(
string id,
string value =
null)
2602 SetStr(
id.GetHashCode(), value);
2612 SetObj(
id.GetHashCode(), o);
2674 if (
card.isSale || !
card.trait.CanUseContent)
2679 if (windowSaveData !=
null)
2691 EClass.player.wasDirtyWeight =
true;
2709 public int Evalue(
int ele,
bool ignoreGlobalElement)
2735 return c_editorTags?.Contains(tag.ToString()) ??
false;
2768 int num2 =
item.Value;
2843 for (
int i = 0; i <
sockets.Count; i++)
2861 thing.parent =
this;
2911 CardBlueprint.current =
null;
2962 if (
id ==
"microchip")
3044 EClass._zone.Boss =
Chara;
3086 if (!(value.
source.category ==
"attribute") && !(value.
source.category ==
"skill"))
3090 int num = elementContainer.Value(value.
id);
3120 public void AddExp(
int a,
bool applyMod =
true)
3145 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3149 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3180 Say(
"dingExp",
this);
3195 int num = Mathf.Min(1 +
LV / 5, 20);
3196 for (
int i = 0; i < num; i++)
3198 if (
Evalue(1644) < i + 1)
3236 if (rootCard !=
null && rootCard.
IsPC)
3291 Debug.LogWarning(
"already child:" + t);
3296 Debug.Log(
"already in the list" + t);
3311 t.ignoreAutoPick =
false;
3355 if (rootCard !=
null && rootCard.
IsPC)
3364 t.isNPCProperty =
false;
3378 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3381 void TryAdd(
Thing a)
3383 if (!ings.Contains(a.
id))
3401 List<Chara> list =
new List<Chara>();
3417 if (!
item.IsPCFactionOrMinion)
3422 if (list2.Count == 0)
3426 foreach (
Thing item2
in list2)
3430 item.body.Unequip(item2);
3433 Msg.
Say(
"waterCurse", item2);
3437 foreach (
Chara item3
in list)
3444 if (list3.Count == 0)
3448 foreach (
Thing item4
in list3)
3450 Msg.
Say(
"destroyed_inv_", item4, item3);
3462 List<Chara> list =
new List<Chara>();
3476 if (
item.IsPCFactionOrMinion)
3490 for (
int num =
things.Count - 1; num >= 0; num--)
3501 rootCard.Chara.held =
null;
3507 instance.selectedButton.card =
null;
3510 ActionMode.AdvOrRegion.updatePlans =
true;
3527 if (thing.
invY == 1)
3529 WidgetCurrentTool.dirty =
true;
3533 if (thing.
props !=
null)
3541 WidgetHotbar.dirtyCurrentItem =
true;
3542 thing.parent =
null;
3547 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3554 thing.parent =
null;
3563 return EClass.ui.layers.Count > 0;
3585 to.c_isImportant =
true;
3610 return card.GetRootCard();
3637 thing.encLV =
encLV;
3638 thing.decay =
decay;
3641 foreach (KeyValuePair<int, int>
item in mapInt)
3645 foreach (KeyValuePair<int, string> item2
in mapStr)
3647 thing.
mapStr[item2.Key] = item2.Value;
3653 thing.sockets = IO.DeepCopy(
sockets);
3669 ModNum(-a, notify:
false);
3681 return this as
Thing;
3684 return this as
Thing;
3690 return this as
Thing;
3693 public void ModNum(
int a,
bool notify =
true)
3732 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3738 for (
int i = 0; i <
sockets.Count; i++)
3756 for (
int i = 0; i <
sockets.Count; i++)
3762 int ele = num / 1000;
3763 int num2 = num % 1000;
3858 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3864 string encSlot = source.
encSlot;
3865 if (encSlot ==
null || encSlot.Length != 0)
3878 string[] array = source.
encSlot.Split(
',');
3879 foreach (
string key
in array)
3927 if (this.placeState == newState)
3933 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3945 float num = (
fy = 0f);
3956 this.placeState = newState;
3964 this.placeState = newState;
4019 num = num * (100 +
Quality) / 100;
4056 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4103 public bool TryPay(
int a,
string id =
"money")
4110 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4114 if (
IsPC && !(
id ==
"ration"))
4134 Say(
"spellbookCrumble",
this);
4143 if (
id ==
"influence")
4155 if (
id ==
"influence")
4162 if (sum >
int.MaxValue)
4189 a = a * Mathf.Max(100 -
Evalue(93), 1) / 100;
4222 int num =
PV + orCreateElement.Value +
DEX / 10;
4229 num2 = num3 / 10 + 1;
4230 sides = num3 / num2 + 1;
4232 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4234 long num4 =
Dice.
Roll(num2, sides, bonus,
this);
4235 dmg -= num4 * mod / 100;
4249 int num = origin.Evalue(1238);
4253 if (origin.HasElement(1247))
4258 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4262 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4266 if (idEle == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4275 DamageHP(dmg, 0, 0, attackSource, origin);
4284 bool flag = originalTarget !=
null;
4285 Action onEvade =
null;
4294 Say(
"wall_bond", chara3,
this);
4296 origin?.Chara?.DoHostileAction(chara3);
4304 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4310 int num = chara4.
Evalue(1241);
4311 int num2 = chara4.
Evalue(438);
4314 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4315 chara4.
DamageHP(dmg * (100L + (
long)((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4316 origin?.Chara?.DoHostileAction(chara4);
4324 long num3 = 99999999L;
4327 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4329 if (origin !=
null && origin.HasElement(1208))
4331 switch (attackSource)
4334 dmg = dmg * 130 / 100;
4335 eleP = eleP * 150 / 100;
4338 dmg = dmg * 120 / 100;
4339 eleP = eleP * 150 / 100;
4345 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4348 if (ele == 0 || ele == 926)
4353 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4359 if (attackSource !=
AttackSource.Condition && showEffect)
4375 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4376 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4383 if (chara2 !=
null && chara2.
isWet)
4392 if (chara !=
null && chara.
isWet)
4394 dmg = dmg * 150 / 100;
4400 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4406 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4415 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4420 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4422 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4429 dmg = dmg * 90 / 100;
4433 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4437 dmg = dmg * 90 / 100;
4457 dmg = dmg * 100 / Mathf.Min(100 + num6 * (3 + num5 * 2), 120);
4459 else if (origin !=
null && origin.IsPCFactionOrMinion)
4461 dmg = dmg * Mathf.Min(100 + num7 * (3 + num5 + 2), 120) / 100;
4466 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4468 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4470 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4478 int num8 =
MaxHP / 10;
4479 long num9 = dmg - num8;
4480 num9 = num9 * 100 / (200 +
Evalue(68) * 10);
4495 if (condition !=
null)
4497 num3 = num3 * (100 + condition.lv * 5) / 100;
4504 float num10 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4515 if (hp < 0 && Chara.mana.value >= 0)
4531 Chara.mana.value -= (int)dmg;
4548 float ratio = (float)dmg / (
float)
MaxHP;
4559 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning:
not false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4561 aI_PracticeDummy.hit++;
4562 aI_PracticeDummy.totalDamage += dmg;
4605 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4614 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4635 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4637 EClass.player.invlunerable =
true;
4676 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4683 text =
"dead_" + e.
source.alias;
4687 text =
"dead_attack";
4695 text =
"kill_" + e.source.alias;
4699 text =
"kill_attack";
4701 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4709 Say(
"reboot",
this);
4716 if (HasCondition<ConRebirth>())
4718 Say(
"rebirth",
this);
4730 Msg.alwaysVisible =
true;
4731 Msg.
Say(
"layhand", chara5,
this);
4732 Msg.
Say(
"pray_heal",
this);
4742 if (zoneInstanceBout !=
null)
4774 Die(e, origin, attackSource, originalTarget);
4775 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4777 origin.isSummon =
true;
4778 origin.c_summonDuration = 4;
4785 string text2 =
new int[18]
4787 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4788 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4789 }.RandomItem().ToString();
4792 text2 =
"casino_coin";
4796 text2 =
"scratchcard";
4824 if (origin !=
null && origin.isChara)
4846 if (origin.GetInt(106) == 0)
4848 origin.Chara.TalkTopic(
"kill");
4853 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4855 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num10 + (
IsPC ?
"pc" :
""), origin,
this);
4859 int num14 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4860 if (num10 >= (
float)num14)
4864 Say(
"dmg_" + e.source.alias,
this);
4868 Say(
"dmg" + num10,
this);
4891 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4895 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4899 int num16 = origin.Dist(
this);
4903 if (
id ==
"hedgehog_ether")
4907 Say(
"reflect_thorne", origin,
this);
4908 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4913 Say(
"reflect_acid",
this, origin);
4914 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4926 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4937 int num17 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4947 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4953 Condition.ignoreEffect =
true;
4955 Condition.ignoreEffect =
false;
4959 float num18 = (float)
hp / (
float)
MaxHP;
4966 PlaySound(
"heartbeat", 1f - num18 * 2f);
4999 EClass.player.forceTalk =
true;
5001 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
5012 void EvadeDeath(Action action)
5017 Chara.mana.value = 0;
5021 int GetHealValue(
int heal,
int skill,
int full,
int healRateLimit,
int skillMod)
5023 int result = Mathf.Clamp(heal, 0,
MathEx.
ClampToInt((
long)full * (
long)Mathf.Clamp(healRateLimit * (100 + skill) / 200, 0, healRateLimit) / 100 + skill * skillMod / 100));
5026 Debug.Log(
"dmg:" + dmg +
" heal:" + result +
" (" + heal +
")");
5040 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486) || !origin.IsPCFactionOrMinion))
5042 int num19 = origin.Evalue(660) + (
weapon?.Evalue(660, ignoreGlobalElement:
true) ?? 0);
5043 int num20 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
5044 int num21 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
5045 bool flag4 = attackSource == AttackSource.Melee || attackSource == AttackSource.Range || attackSource ==
AttackSource.Throw;
5046 if (num19 > 0 && flag4)
5048 int heal =
EClass.
rnd(dmg / 10 + num19 / 5);
5049 origin.Chara.HealHP(GetHealValue(heal, num19, origin.MaxHP, 20, 100));
5051 if (num20 > 0 && flag4 && origin.isChara && !origin.Chara.ignoreSPAbsorb &&
Chara.
IsHostile(origin as
Chara))
5054 origin.Chara.stamina.Mod(GetHealValue(heal2, num20, origin.Chara.stamina.max, 1, 10));
5060 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
5063 origin.Chara.mana.Mod(GetHealValue(heal3, origin.Chara.GetPietyValue(), origin.Chara.mana.max, 10, 100));
5069 if (num21 > 0 && flag4)
5071 int heal4 =
EClass.
rnd(dmg / 10 + num21 / 10);
5072 origin.Chara.mana.Mod(GetHealValue(heal4, num21, origin.Chara.mana.max, 10, 100));
5089 bool hostile =
false;
5093 if (Chance(30 + eleP / 5, 100))
5095 MarkHostile().AddCondition<
ConBurning>(eleP);
5101 if (Chance(30 + eleP / 10, 100))
5106 else if (Chance(50 + eleP / 10, 100))
5112 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5118 if (Chance(30 + eleP / 5, 100))
5120 MarkHostile().AddCondition<
ConPoison>(eleP);
5124 if (Chance(30 + eleP / 5, 100))
5131 if (Chance(30 + eleP / 5, 100))
5140 if (Chance(30 + eleP / 5, 100))
5145 else if (Chance(30 + eleP / 5, 100))
5151 if (Chance(50 + eleP / 10, 100))
5159 if (Chance(30 + eleP / 5, 100))
5178 if (Chance(5 + eleP / 25, 40))
5182 if (Chance(5 + eleP / 25, 40))
5186 if (Chance(5 + eleP / 25, 40))
5190 if (Chance(5 + eleP / 25, 40))
5192 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5194 if (Chance(5 + eleP / 25, 40))
5198 if (Chance(5 + eleP / 25, 40))
5202 if (Chance(30 + eleP / 10, 100))
5208 if (Chance(50 + eleP / 10, 100))
5210 MarkHostile().AddCondition<
ConBleed>(eleP);
5214 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5227 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5231 static bool Chance(
int a,
int max)
5233 return Mathf.Min(a, max) >
EClass.
rnd(100);
5244 Card rootCard = GetRootCard();
5246 if (_pos !=
null && !_pos.
IsValid)
5257 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5258 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5260 text += e.source.alias;
5264 Msg.
Say(text,
this, rootCard);
5269 Msg.
Say(
"destroyed",
this);
5274 things.ForeachReverse(delegate(
Thing t)
5284 if (e !=
null && _pos !=
null && e.id == 21)
5290 Explode(pos, origin);
5298 origin = origin?.Chara,
5300 aliasEle =
"eleImpact"
5306 PlaySound(
material.GetSoundDead(sourceCard));
5314 Debug.Log(Name +
" is already destroyed.");
5325 Chara.isDead =
true;
5343 for (
int num = things.Count - 1; num >= 0; num--)
5345 things[num].Destroy();
5352 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5358 List<Card> list =
new List<Card>();
5359 if (!IsPCFactionOrMinion && !isUserZone && sourceCard.
idActor.IsEmpty())
5366 if (this.rarity >=
Rarity.Legendary)
5402 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5414 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5422 if (flag2 && !isUserZone)
5426 case "bubble_pudding":
5429 case "marshmallow_monster":
5430 case "marshmallow_king":
5436 if (
id ==
"titan_iron")
5440 bool num2 = text ==
"_meat";
5448 text =
"meat_marble";
5455 if (thing3.
source._origin ==
"meat")
5476 if (!IsPCFaction && !isUserZone)
5478 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5480 string[] array = item2.
Split(
'/');
5481 int num4 = array[1].ToInt();
5530 if (this.rarity ==
Rarity.Mythical)
5534 if (!isBackerContent && !flag)
5570 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5591 List<Thing> list2 =
new List<Thing>();
5592 foreach (
Thing thing6
in things)
5618 if (num5 > 0 && list2.Count > 0)
5621 for (
int j = 0; j < list2.Count && j < num5; j++)
5627 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5630 foreach (
Card item3
in list)
5639 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5644 for (
int k = 0; k < num5; k++)
5673 List<Thing> list3 = thing4.
things.ToList();
5683 while (num8 > 0 && list3.Count != 0)
5685 Thing thing5 = list3.First();
5686 list3.Remove(thing5);
5697 foreach (
Thing thing7
in things)
5699 if (thing7.
GetInt(116) != 0)
5704 Point nearestPoint = GetRootCard().pos;
5709 foreach (
Card item4
in list)
5715 item4.isHidden =
false;
5716 item4.isNPCProperty =
false;
5732 bool chance(
int num9)
5773 case "egg_fertilized":
5778 string text =
"c_wilds";
5779 if (
id ==
"_meat" ||
id ==
"meat_marble")
5787 for (
int i = 0; i < 20; i++)
5790 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"_milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5800 if (crafter !=
null && crafter.id ==
"big_sister")
5802 cardRow = crafter.source;
5807 if (c_idRefCard.IsEmpty())
5809 MakeRefFrom(cardRow.
model);
5814 MakeFoodFrom(cardRow.
model);
5816 return this as
Thing;
5822 return this as
Thing;
5842 int num = race.
food[0].ToInt();
5843 bool flag =
id ==
"meat_marble";
5845 bool flag2 = category.
IsChildOf(
"meat");
5846 bool flag3 =
id ==
"marshmallow_nama" || category.
IsChildOf(
"egg") || trait is
TraitGene;
5847 bool flag4 = category.
IsChildOf(
"milk");
5858 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5861 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5863 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5867 num2 = ((!flag4) ? 3 : 2);
5871 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5885 foreach (
Element value
in c.elements.dict.Values)
5887 if ((!flag3 || value.
id != 1229) && (value.source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5892 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5893 foreach (KeyValuePair<int, int>
item in race.elementMap)
5897 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5900 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5901 for (
int num3 = 0; num3 < num2 && num3 < list.Count; num3++)
5903 Tuple<int, int> tuple = list[num3];
5904 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5906 if (c.Chara.IsUndead)
5908 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5910 isWeightChanged =
true;
5911 c_weight = race.height * 4 + 100;
5912 c_idMainElement = c.c_idMainElement;
5914 int num4 = c.LV - c.sourceCard.LV;
5920 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5924 if (flag2 && c.IsPCFaction && c.IsUnique)
5939 if (IsIgnoreName(
card))
5943 if (IsIgnoreName(card2))
5947 if (
card ==
null && card2 !=
null)
5954 MakeRefFrom(
card, card2);
5955 if (
card.c_idRefCard !=
null)
5957 c_idRefCard =
card.c_idRefCard;
5958 c_altName = TryGetFoodName(
card);
5963 c_altName2 = TryGetFoodName(card2);
5966 static bool IsIgnoreName(
Card card3)
5996 if (!row.aka.IsEmpty())
5998 if (row.name ==
"*r" && row.aka ==
"*r")
6000 return "corpseGeneral".lang();
6002 if (row.name ==
"*r")
6004 return row.GetText(
"aka");
6007 return row.GetName();
6012 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
6028 c_idRefCard = c1.
id;
6032 c_idRefCard2 = c2.id;
6033 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
6035 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
6041 if (!
EClass.
debug.
enable && (HasElement(1290) || HasElement(1292)) && Evalue(418) >= 0)
6049 thing.c_idMainElement = c_idMainElement;
6058 return GiveBirth(thing, effect);
6064 if (!
EClass.
debug.
enable && (HasElement(1290) || HasElement(1292)) && Evalue(418) >= 0)
6076 int num2 = LV - sourceCard.
LV;
6081 if (num2 >= 10 && !HasElement(1290) && !HasElement(1292))
6089 return GiveBirth(thing, effect);
6094 Card obj = (ExistsOnMap ? this : (GetRootCard() ??
EClass.
pc));
6095 EClass.player.forceTalk =
true;
6096 obj.
Talk(
"giveBirth");
6118 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" });
6122 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
6124 PlaySound(
"egghatch");
6133 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
6136 if (chara !=
null && isChara)
6139 chara.isHatchling =
true;
6191 SayNothingHappans();
6194 PlayEffect(
"teleport");
6197 Say(
"antiTeleport",
this);
6198 PlaySound(
"gravity");
6203 if (
id ==
"mush_quantum")
6205 PlaySound(
"teleport_quantum");
6209 PlaySound(
"teleport");
6211 Say(
"teleported",
this);
6220 if (chara.
enemy ==
this)
6231 EClass.player.haltMove =
true;
6233 PlayEffect(
"teleport", useRenderPos:
false);
6240 PlayEffect(
"ripple");
6241 PlaySound(
"Footstep/water");
6252 int num = p.x - pos.
x;
6253 int num2 = p.z - pos.
z;
6270 if (num == 0 && num2 == 0)
6284 for (
int i = -1; i < 2; i++)
6286 for (
int j = -1; j < 2; j++)
6290 point.x = pos.x + j;
6291 point.z = pos.z + i;
6305 return _Move(newPoint);
6308 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6312 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6316 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6318 if (!IsAliveInCurrentZone)
6344 Say(
"kick",
this, t);
6378 if (elements.
Value(ele) <= 0)
6380 if (includeNagative)
6382 return elements.
Value(ele) < 0;
6391 return elements.
Value(ele) >= req;
6406 if (HasElement(764))
6410 if (HasElement(759))
6414 if (HasElement(703))
6418 if (HasElement(758))
6422 if (HasElement(704))
6426 if (HasElement(766))
6444 for (
int i = 0; i < a; i++)
6455 shared.color = 11010048f;
6456 shared.liquidLv = 0;
6458 SetRenderParam(shared);
6478 isDyed = mat !=
null;
6479 c_dyeMat = mat?.id ?? 0;
6495 else if (isElemental)
6532 int num = EClass.game.seed + refVal;
6533 num +=
id[0] % 10000;
6536 num +=
id[1] % 1000;
6539 num +=
id[2] % 1000;
6542 num +=
id[3] % 1000;
6545 num +=
id[4] % 1000;
6554 return ref _randColor;
6579 public void SetImage(Image image,
int dir,
int idSkin = 0)
6581 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6591 Sprite sprite = GetSprite();
6592 if (!c_idSpriteReplacer.IsEmpty())
6595 if (spriteReplacer !=
null)
6599 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6603 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6606 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6608 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6610 if (_emo !=
Emo.none)
6612 renderer.
ShowEmo(_emo, duration);
6620 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6625 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6630 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6635 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6638 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6640 Card rootCard = GetRootCard();
6647 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6672 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6678 Card rootCard = GetRootCard();
6682 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6690 Card rootCard = GetRootCard();
6713 public virtual void Rotate(
bool reverse =
false)
6716 if (sourceCard.
tiles.Length > 4)
6718 num = sourceCard.
tiles.Length;
6780 fx = fx - vector.x + thingPosition.x;
6781 fy = fy - vector.y + thingPosition.y;
6785 float num = (fy = 0f);
6809 renderParam.x = v.x;
6810 renderParam.y = v.y;
6811 renderParam.z = v.z;
6813 v.x = renderParam.
x;
6814 v.y = renderParam.
y;
6815 v.z = renderParam.
z;
6829 v.z += thingPosition.z;
6836 if (useCurrentPosition)
6851 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6862 EClass.player.lightRadius = 1;
6870 return GetLightRadius() > 0;
6878 return 0.01f * LightData.color.a * 256f * 1.12f;
6880 if (IsPCFaction && !IsPC)
6946 num2 = traitLightSource.LightRadius;
6951 if (lightRadius > 0)
6953 if (lightRadius > num2)
6973 int radius = GetLightRadius();
6978 float power = GetLightPower();
6999 EClass.player.lightRadius = radius;
7000 EClass.player.lightPower = power;
7006 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
7017 int num = (trait.UseLightColor ? c_lightColor : 0);
7020 fov.r = (byte)(num / 1024);
7021 fov.g = (byte)(num % 1024 / 32);
7022 fov.b = (byte)(num % 32);
7063 if (fov !=
null && fov.
lastPoints.Count != 0)
7082 things.ForeachReverse(delegate(
Thing t)
7086 if (sourceCard.
_origin ==
"dish")
7094 else if (!isChara && trait.
Decay != 0)
7096 Decay(trait.
Decay * hour);
7114 int num2 = MaxDecay / 4 * 3;
7119 num =
card.trait.DecaySpeedChild;
7121 num = num * trait.DecaySpeed / 100;
7122 int num3 = Evalue(405);
7125 num = num * (100 - num3 * 2) / 100;
7137 if (decay + a > MaxDecay)
7139 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
7148 card.AddCard(thing);
7149 if (!IsParentLocked())
7151 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
7160 else if (GetRootCard() ==
EClass.
pc)
7162 if (!IsParentLocked())
7174 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7176 if (!IsParentLocked())
7183 bool IsParentLocked()
7185 if (parent is
Thing)
7187 return (parent as
Thing).c_lockLv > 0;
7195 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7198 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7202 EClass.player.forceTalk =
false;
7206 EClass.player.forceTalk =
false;
7207 if (!isSynced && !forceSync)
7212 GameLang.refDrama1 = ref1;
7213 GameLang.refDrama2 = ref2;
7214 string text = GetTalkText(idTopic, stripPun:
true);
7216 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7222 switch ((condition !=
null) ? condition.
chara.
id :
id)
7235 TalkRaw(text, ref1, ref2, forceSync);
7238 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7240 if ((!isSynced && !forceSync) || text.IsEmpty())
7247 text = text.Replace(
"#1", ref1);
7251 text = text.Replace(
"#2", ref2);
7253 HostRenderer.Say(ApplyNewLine(text));
7254 text = StripTalkSpecialCharacters(text);
7255 bool flag = text.StartsWith(
"*");
7259 text = text.Bracket();
7261 Msg.
Say(text.Replace(
"&",
""));
7270 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7272 return text.Substring(2);
7278 return text.Substring(1);
7285 if (text.Contains(
"&"))
7287 string text2 =
"_comma".lang();
7288 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7289 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7290 text = text.Replace(
"&", Environment.NewLine ??
"");
7295 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7297 if (isSynced && !text.IsEmpty())
7301 text = text.Replace(
"#1", ref1);
7305 text = text.Replace(
"#2", ref2);
7307 HostRenderer.Say(text);
7313 Say(
"nothingHappens");
7316 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7325 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7334 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7343 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7347 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7348 if (!text.IsEmpty())
7350 text = text.Split(
'|').RandomItem();
7351 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7353 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7355 text =
"(" + text +
")";
7357 text = text.Replace(
"。)",
")");
7360 return ApplyTone(text, stripPun);
7366 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7369 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7375 string[] array = _tones.IsEmpty(
"").Split(
'|');
7376 string key = array[0];
7381 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7385 if (array[0].IsEmpty())
7394 if (array.Length >= 2)
7396 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7398 if (array.Length >= 3)
7400 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7403 text2 = stringBuilder.ToString();
7407 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7418 return text2.StripLastPun();
7433 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7434 if (list.Count != 0)
7436 int mtp = EClass.core.config.test.extraToneMTP
switch
7449 string text = list.RandomItem()[
"id"];
7450 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7457 return ListCraftBonusTraits().Count > 0;
7462 List<Element> list =
new List<Element>();
7463 string[] tag = sourceCard.
tag;
7464 for (
int i = 0; i < tag.Length; i++)
7466 string[] array = tag[i].Split(
'/');
7467 if (!(array[0] !=
"craft_bonus"))
7483 if (dest.
stack !=
null)
7487 Say(
"stack_thing", t, dest.
stack);
7501 c_idBacker = row.
id;
7507 chara.hostility = hostility;
7513 Chara.idFaith = row.
deity.ToLowerInvariant();
7518 if (
id ==
"putty_snow")
7531 if (c_idBacker == 164)
7544 c_textureData = GetPaintData();
7554 Sprite sprite = GetSprite();
7555 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7556 int num = sprite.texture.width * 2;
7557 int num2 = sprite.texture.height * 2;
7558 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7559 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7560 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7561 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7562 texture2D2.SetPixels(pixels);
7564 byte[] result = texture2D2.EncodeToJPG();
7565 UnityEngine.Object.Destroy(texture2D);
7566 UnityEngine.Object.Destroy(texture2D2);
7572 if ((
bool)_paintSprite)
7574 UnityEngine.Object.Destroy(_paintSprite.texture);
7575 UnityEngine.Object.Destroy(_paintSprite);
7576 _paintSprite =
null;
7584 byte[] data = c_textureData;
7585 Texture2D texture2D =
new Texture2D(1, 1);
7586 texture2D.LoadImage(data);
7587 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7591 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7594 return _paintSprite;
7599 if (!(GetRestrainer() ==
null || force))
7603 isRestrained =
false;
7604 Say(
"unrestrained",
this);
7615 if (c_rescueState ==
RescueState.WaitingForRescue)
7629 c.DoHostileAction(
item, immediate:
true);
7656 result = row.value * mat.value / 100;
7693 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7694 if (
id ==
"plat" && !sell)
7705 num2 += (float)c_priceCopy * 0.2f;
7706 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7710 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7712 if (IsFood && !
material.tag.Contains(
"food"))
7717 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7735 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7737 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7739 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7740 if (IsEquipmentOrRanged)
7745 num4 += value.
source.value;
7747 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7748 if (rarity >=
Rarity.Legendary)
7750 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7758 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7760 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)))));
7764 num2 *= (float)(tier + 1);
7766 if (num2 > 2.1474836E+09f)
7768 return int.MaxValue;
7775 if (priceType ==
PriceType.CopyShop && sell)
7781 if (
id ==
"littleball")
7788 if (
id ==
"crimale2")
7796 case "ticket_fortune":
7802 case "scroll_alias":
7804 case "scroll_biography":
7819 if (!(text ==
"mathammer"))
7821 if (!(text ==
"water_jure"))
7827 return 50 + material.tier * material.tier * 10;
7840 case "hammer_strip":
7870 case "bed_shiawase":
7872 case "diary_sister":
7876 case "diary_catsister":
7878 case "container_magic":
7880 case "wrench_tent_elec":
7882 case "wrench_tent_soil":
7884 case "wrench_tent_seabed":
7888 case "wrench_storage":
7890 case "wrench_fridge":
7892 case "wrench_extend_v":
7894 case "wrench_extend_h":
7900 case "hammer_garokk":
7902 case "scroll_random":
7916 if (!sell &&
id ==
"casino_coin")
7920 int value = GetValue(priceType, sell);
7930 Trait trait = this.trait;
7935 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7940 p *= 1f + 0.5f * (float)c_containerSize;
7943 if (c_priceFix != 0)
7945 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7955 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7966 if (!sell && category.
id ==
"spellbook")
7970 bool flag = priceType ==
PriceType.CopyShop;
7971 int num = ((!flag) ? 1 : 5);
7972 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7973 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7974 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7979 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7981 p *= 0.20000000298023224;
7984 p *= 0.20000000298023224;
7987 p *= 0.20000000298023224;
7991 p *= 0.20000000298023224;
7997 if ((uint)(priceType - 1) <= 1u)
8009 if (
id ==
"rod_wish")
8011 p *= (sell ? 0.01f : 50f);
8026 p *= 0.20000000298023224;
8030 p *= 0.10000000149011612;
8033 p *= 0.0020000000949949026;
8036 p *= 0.00019999999494757503;
8039 p *= 0.004999999888241291;
8050 p *= (flag ? 1.25f : 0.3f);
8054 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
8058 p *= (flag ? 0.9f : 0.5f);
8070 p *= 1f + 0.2f * (float)c.Evalue(1406);
8083 p *= 1.100000023841858;
8117 else if (category.
IsChildOf(
"furniture"))
8137 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
8144 p = ((!sell) ? 1 : 0);
8152 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
8154 else if (p > 10000.0)
8156 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
8158 else if (p > 1000.0)
8160 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
8164 p = Mathf.CeilToInt((
float)p / 100f) * 100;
8168 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8176 if (p > (
double)(sell ? 500000000 : 1000000000))
8189 return Name + GetExtraName();
8206 ForeachPoint(delegate(
Point p,
bool main)
8208 int num = DistMulti(p, c);
8216 return DistMulti(pos, c);
8219 if (!
card.IsMultisize)
8224 card.ForeachPoint(delegate(
Point p2,
bool main)
8248 isCensored = enable;
8258 if (isDeconstructing != deconstruct)
8268 isDeconstructing = deconstruct;
8282 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8285 sortVal = -GetPrice(
currency) * 1000;
8288 sortVal = -Num * 1000;
8291 sortVal = category.sortVal * 1000;
8294 sortVal = -ChildrenAndSelfWeight * 1000;
8297 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8300 sortVal = -GetPrice(
currency) * 1000;
8303 sortVal = sourceCard._index * 1000;
8313 num =
id.CompareTo(c.
id);
8333 num = encLV - c.
encLV;
8352 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8370 action(pos, arg2:
true);
8384 SE.Play(
"pop_paper");
8414 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8427 if (!HaveFur() || c_fur < 0)
static bool not(DramaManager dm, Dictionary< string, string > line, params string[] parameters)
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
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)
virtual void HealHPHost(long a, HealSource origin=HealSource.None)
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 SetInt(string id, int value=0)
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 SetDir(int d)
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)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
T SetObj< T >(string id, object o)
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
string GetStr(string id, string defaultStr=null)
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 void HealHP(long a, HealSource origin=HealSource.None)
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")
string StripTalkSpecialCharacters(string text)
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)
Card MakeFoodFrom(Card c, bool makeRef=true)
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)
void SetStr(string id, string value=null)
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
void SetObj(string id, object o)
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 AddInt(string id, int value)
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)
void SetBool(string id, bool enable)
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)
int GetInt(string id, int? defaultInt=null)
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)
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)
BaseCondition GetCondition(string idCon)
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 long 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)
static int ClampToInt(long a)
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)
int EvalueTotal(int ele, Func< Chara, bool > funcIf=null)
void RemoveMember(Chara c)
void ModExp(int ele, int a)
Dictionary< string, int > dialogFlags
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
Religion GetArtifactDeity(string id)
static Religion recentWrath
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)