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 @
int =
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 num2 = (
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 int 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 if (origin !=
null && origin.HasElement(1208))
4326 switch (attackSource)
4329 dmg = dmg * 130 / 100;
4330 eleP = eleP * 150 / 100;
4333 dmg = dmg * 120 / 100;
4334 eleP = eleP * 150 / 100;
4340 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4343 if (ele == 0 || ele == 926)
4348 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4354 if (attackSource !=
AttackSource.Condition && showEffect)
4365 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4366 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4373 if (chara2 !=
null && chara2.
isWet)
4382 if (chara !=
null && chara.
isWet)
4384 dmg = dmg * 150 / 100;
4390 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4398 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4400 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4409 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4414 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4416 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4423 dmg = dmg * 90 / 100;
4427 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4431 dmg = dmg * 90 / 100;
4451 dmg = dmg * 100 / Mathf.Min(100 + num5 * (3 + num4 * 2), 120);
4453 else if (origin !=
null && origin.IsPCFactionOrMinion)
4455 dmg = dmg * Mathf.Min(100 + num6 * (3 + num4 + 2), 120) / 100;
4460 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4462 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4464 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4472 int num7 =
MaxHP / 10;
4473 long num8 = dmg - num7;
4474 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4486 long num9 = 99999999L;
4490 if (condition !=
null)
4492 num9 = num9 * (100 + condition.lv * 5) / 100;
4499 float num10 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4510 if (hp < 0 && Chara.mana.value >= 0)
4526 Chara.mana.value -= (int)dmg;
4543 float ratio = (float)dmg / (
float)
MaxHP;
4554 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning:
not false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4556 aI_PracticeDummy.hit++;
4557 aI_PracticeDummy.totalDamage += dmg;
4600 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4609 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4630 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4632 EClass.player.invlunerable =
true;
4671 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4678 text =
"dead_" + e.
source.alias;
4682 text =
"dead_attack";
4690 text =
"kill_" + e.source.alias;
4694 text =
"kill_attack";
4696 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4704 Say(
"reboot",
this);
4711 if (HasCondition<ConRebirth>())
4713 Say(
"rebirth",
this);
4725 Msg.alwaysVisible =
true;
4726 Msg.
Say(
"layhand", chara5,
this);
4727 Msg.
Say(
"pray_heal",
this);
4737 if (zoneInstanceBout !=
null)
4769 Die(e, origin, attackSource, originalTarget);
4770 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4772 origin.isSummon =
true;
4773 origin.c_summonDuration = 4;
4780 string text2 =
new int[18]
4782 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4783 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4784 }.RandomItem().ToString();
4787 text2 =
"casino_coin";
4791 text2 =
"scratchcard";
4819 if (origin !=
null && origin.isChara)
4841 if (origin.GetInt(106) == 0)
4843 origin.Chara.TalkTopic(
"kill");
4848 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4850 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num10 + (
IsPC ?
"pc" :
""), origin,
this);
4854 int num14 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4855 if (num10 >= (
float)num14)
4859 Say(
"dmg_" + e.source.alias,
this);
4863 Say(
"dmg" + num10,
this);
4886 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4890 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4894 int num16 = origin.Dist(
this);
4898 if (
id ==
"hedgehog_ether")
4902 Say(
"reflect_thorne", origin,
this);
4903 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4908 Say(
"reflect_acid",
this, origin);
4909 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4921 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4932 int num17 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4942 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4948 Condition.ignoreEffect =
true;
4950 Condition.ignoreEffect =
false;
4954 float num18 = (float)
hp / (
float)
MaxHP;
4961 PlaySound(
"heartbeat", 1f - num18 * 2f);
4994 EClass.player.forceTalk =
true;
4996 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
5007 void EvadeDeath(Action action)
5012 Chara.mana.value = 0;
5016 int GetHealValue(
int heal,
int skill,
int full,
int healRateLimit,
int skillMod)
5018 int result = Mathf.Clamp(heal, 0,
MathEx.
ClampToInt((
long)full * (
long)Mathf.Clamp(healRateLimit * (100 + skill) / 200, 0, healRateLimit) / 100 + skill * skillMod / 100));
5021 Debug.Log(
"dmg:" + dmg +
" heal:" + result +
" (" + heal +
")");
5035 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486) || !origin.IsPCFactionOrMinion))
5037 int num19 = origin.Evalue(660) + (
weapon?.Evalue(660, ignoreGlobalElement:
true) ?? 0);
5038 int num20 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
5039 int num21 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
5040 bool flag4 = attackSource == AttackSource.Melee || attackSource == AttackSource.Range || attackSource ==
AttackSource.Throw;
5041 if (num19 > 0 && flag4)
5043 int heal2 =
EClass.
rnd(dmg / 10 + num19 / 5);
5044 origin.Chara.HealHP(GetHealValue(heal2, num19, origin.MaxHP, 20, 100));
5046 if (num20 > 0 && flag4 && origin.isChara && !origin.Chara.ignoreSPAbsorb &&
Chara.
IsHostile(origin as
Chara))
5049 origin.Chara.stamina.Mod(GetHealValue(heal3, num20, origin.Chara.stamina.max, 1, 10));
5055 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
5058 origin.Chara.mana.Mod(GetHealValue(heal4, origin.Chara.GetPietyValue(), origin.Chara.mana.max, 10, 100));
5064 if (num21 > 0 && flag4)
5066 int heal5 =
EClass.
rnd(dmg / 10 + num21 / 10);
5067 origin.Chara.mana.Mod(GetHealValue(heal5, num21, origin.Chara.mana.max, 10, 100));
5084 bool hostile =
false;
5088 if (Chance(30 + eleP / 5, 100))
5090 MarkHostile().AddCondition<
ConBurning>(eleP);
5096 if (Chance(30 + eleP / 10, 100))
5101 else if (Chance(50 + eleP / 10, 100))
5107 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5113 if (Chance(30 + eleP / 5, 100))
5115 MarkHostile().AddCondition<
ConPoison>(eleP);
5119 if (Chance(30 + eleP / 5, 100))
5126 if (Chance(30 + eleP / 5, 100))
5135 if (Chance(30 + eleP / 5, 100))
5140 else if (Chance(30 + eleP / 5, 100))
5146 if (Chance(50 + eleP / 10, 100))
5154 if (Chance(30 + eleP / 5, 100))
5173 if (Chance(5 + eleP / 25, 40))
5177 if (Chance(5 + eleP / 25, 40))
5181 if (Chance(5 + eleP / 25, 40))
5185 if (Chance(5 + eleP / 25, 40))
5187 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5189 if (Chance(5 + eleP / 25, 40))
5193 if (Chance(5 + eleP / 25, 40))
5197 if (Chance(30 + eleP / 10, 100))
5203 if (Chance(50 + eleP / 10, 100))
5205 MarkHostile().AddCondition<
ConBleed>(eleP);
5209 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5222 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5226 static bool Chance(
int a,
int max)
5228 return Mathf.Min(a, max) >
EClass.
rnd(100);
5239 Card rootCard = GetRootCard();
5241 if (_pos !=
null && !_pos.
IsValid)
5252 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5253 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5255 text += e.source.alias;
5259 Msg.
Say(text,
this, rootCard);
5264 Msg.
Say(
"destroyed",
this);
5269 things.ForeachReverse(delegate(
Thing t)
5279 if (e !=
null && _pos !=
null && e.id == 21)
5285 Explode(pos, origin);
5293 origin = origin?.Chara,
5295 aliasEle =
"eleImpact"
5301 PlaySound(
material.GetSoundDead(sourceCard));
5309 Debug.Log(Name +
" is already destroyed.");
5320 Chara.isDead =
true;
5338 for (
int num = things.Count - 1; num >= 0; num--)
5340 things[num].Destroy();
5347 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5353 List<Card> list =
new List<Card>();
5354 if (!IsPCFactionOrMinion && !isUserZone && sourceCard.
idActor.IsEmpty())
5361 if (this.rarity >=
Rarity.Legendary)
5397 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5409 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5417 if (flag2 && !isUserZone)
5421 case "bubble_pudding":
5424 case "marshmallow_monster":
5425 case "marshmallow_king":
5431 if (
id ==
"titan_iron")
5435 bool num2 = text ==
"_meat";
5443 text =
"meat_marble";
5450 if (thing3.
source._origin ==
"meat")
5471 if (!IsPCFaction && !isUserZone)
5473 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5475 string[] array = item2.
Split(
'/');
5476 int num4 = array[1].ToInt();
5525 if (this.rarity ==
Rarity.Mythical)
5529 if (!isBackerContent && !flag)
5565 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5586 List<Thing> list2 =
new List<Thing>();
5587 foreach (
Thing thing6
in things)
5613 if (num5 > 0 && list2.Count > 0)
5616 for (
int j = 0; j < list2.Count && j < num5; j++)
5622 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5625 foreach (
Card item3
in list)
5634 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5639 for (
int k = 0; k < num5; k++)
5668 List<Thing> list3 = thing4.
things.ToList();
5678 while (num8 > 0 && list3.Count != 0)
5680 Thing thing5 = list3.First();
5681 list3.Remove(thing5);
5692 foreach (
Thing thing7
in things)
5694 if (thing7.
GetInt(116) != 0)
5699 Point nearestPoint = GetRootCard().pos;
5704 foreach (
Card item4
in list)
5710 item4.isHidden =
false;
5711 item4.isNPCProperty =
false;
5768 case "egg_fertilized":
5773 string text =
"c_wilds";
5774 if (
id ==
"_meat" ||
id ==
"meat_marble")
5782 for (
int i = 0; i < 20; i++)
5785 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"_milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5795 if (crafter !=
null && crafter.id ==
"big_sister")
5797 cardRow = crafter.source;
5802 if (c_idRefCard.IsEmpty())
5804 MakeRefFrom(cardRow.
model);
5809 MakeFoodFrom(cardRow.
model);
5811 return this as
Thing;
5817 return this as
Thing;
5837 int num = race.
food[0].ToInt();
5838 bool flag =
id ==
"meat_marble";
5840 bool flag2 = category.
IsChildOf(
"meat");
5841 bool flag3 =
id ==
"marshmallow_nama" || category.
IsChildOf(
"egg") || trait is
TraitGene;
5842 bool flag4 = category.
IsChildOf(
"milk");
5853 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5856 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5858 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5862 num2 = ((!flag4) ? 3 : 2);
5866 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5880 foreach (
Element value
in c.elements.dict.Values)
5882 if ((!flag3 || value.
id != 1229) && (value.source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5887 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5888 foreach (KeyValuePair<int, int>
item in race.elementMap)
5892 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5895 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5896 for (
int i = 0; i < num2 && i < list.Count; i++)
5898 Tuple<int, int> tuple = list[i];
5899 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5901 if (c.Chara.IsUndead)
5903 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5905 isWeightChanged =
true;
5906 c_weight = race.height * 4 + 100;
5907 c_idMainElement = c.c_idMainElement;
5909 int num3 = c.LV - c.sourceCard.LV;
5915 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5919 if (flag2 && c.IsPCFaction && c.IsUnique)
5934 if (IsIgnoreName(
card))
5938 if (IsIgnoreName(card2))
5942 if (
card ==
null && card2 !=
null)
5949 MakeRefFrom(
card, card2);
5950 if (
card.c_idRefCard !=
null)
5952 c_idRefCard =
card.c_idRefCard;
5953 c_altName = TryGetFoodName(
card);
5958 c_altName2 = TryGetFoodName(card2);
5961 static bool IsIgnoreName(
Card c)
5991 if (!row.aka.IsEmpty())
5993 if (row.name ==
"*r" && row.aka ==
"*r")
5995 return "corpseGeneral".lang();
5997 if (row.name ==
"*r")
5999 return row.GetText(
"aka");
6002 return row.GetName();
6007 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
6023 c_idRefCard = c1.
id;
6027 c_idRefCard2 = c2.id;
6028 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
6030 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
6036 if (!
EClass.
debug.
enable && (HasElement(1290) || HasElement(1292)) && Evalue(418) >= 0)
6044 thing.c_idMainElement = c_idMainElement;
6053 return GiveBirth(thing, effect);
6059 if (!
EClass.
debug.
enable && (HasElement(1290) || HasElement(1292)) && Evalue(418) >= 0)
6071 int num2 = LV - sourceCard.
LV;
6076 if (num2 >= 10 && !HasElement(1290) && !HasElement(1292))
6084 return GiveBirth(thing, effect);
6089 Card obj = (ExistsOnMap ? this : (GetRootCard() ??
EClass.
pc));
6090 EClass.player.forceTalk =
true;
6091 obj.
Talk(
"giveBirth");
6113 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" });
6117 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
6119 PlaySound(
"egghatch");
6128 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
6131 if (chara !=
null && isChara)
6134 chara.isHatchling =
true;
6186 SayNothingHappans();
6189 PlayEffect(
"teleport");
6192 Say(
"antiTeleport",
this);
6193 PlaySound(
"gravity");
6198 if (
id ==
"mush_quantum")
6200 PlaySound(
"teleport_quantum");
6204 PlaySound(
"teleport");
6206 Say(
"teleported",
this);
6215 if (chara.
enemy ==
this)
6226 EClass.player.haltMove =
true;
6228 PlayEffect(
"teleport", useRenderPos:
false);
6235 PlayEffect(
"ripple");
6236 PlaySound(
"Footstep/water");
6247 int num = p.x - pos.
x;
6248 int num2 = p.z - pos.
z;
6265 if (num == 0 && num2 == 0)
6279 for (
int i = -1; i < 2; i++)
6281 for (
int j = -1; j < 2; j++)
6285 point.x = pos.x + j;
6286 point.z = pos.z + i;
6300 return _Move(newPoint);
6303 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6307 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6311 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6313 if (!IsAliveInCurrentZone)
6339 Say(
"kick",
this, t);
6373 if (elements.
Value(ele) <= 0)
6375 if (includeNagative)
6377 return elements.
Value(ele) < 0;
6386 return elements.
Value(ele) >= req;
6401 if (HasElement(764))
6405 if (HasElement(759))
6409 if (HasElement(703))
6413 if (HasElement(758))
6417 if (HasElement(704))
6421 if (HasElement(766))
6439 for (
int i = 0; i < a; i++)
6450 shared.color = 11010048f;
6451 shared.liquidLv = 0;
6453 SetRenderParam(shared);
6473 isDyed = mat !=
null;
6474 c_dyeMat = mat?.id ?? 0;
6490 else if (isElemental)
6527 int num = EClass.game.seed + refVal;
6528 num +=
id[0] % 10000;
6531 num +=
id[1] % 1000;
6534 num +=
id[2] % 1000;
6537 num +=
id[3] % 1000;
6540 num +=
id[4] % 1000;
6549 return ref _randColor;
6574 public void SetImage(Image image,
int dir,
int idSkin = 0)
6576 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6586 Sprite sprite = GetSprite();
6587 if (!c_idSpriteReplacer.IsEmpty())
6590 if (spriteReplacer !=
null)
6594 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6598 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6601 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6603 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6607 renderer.
ShowEmo(_emo, duration);
6615 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6620 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6625 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6630 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6633 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6635 Card rootCard = GetRootCard();
6642 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6667 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6673 Card rootCard = GetRootCard();
6677 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6685 Card rootCard = GetRootCard();
6708 public virtual void Rotate(
bool reverse =
false)
6711 if (sourceCard.
tiles.Length > 4)
6713 num = sourceCard.
tiles.Length;
6775 fx = fx - vector.x + thingPosition.x;
6776 fy = fy - vector.y + thingPosition.y;
6780 float num2 = (fy = 0f);
6804 renderParam.x = v.x;
6805 renderParam.y = v.y;
6806 renderParam.z = v.z;
6808 v.x = renderParam.
x;
6809 v.y = renderParam.
y;
6810 v.z = renderParam.
z;
6824 v.z += thingPosition.z;
6831 if (useCurrentPosition)
6846 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6857 EClass.player.lightRadius = 1;
6865 return GetLightRadius() > 0;
6873 return 0.01f * LightData.color.a * 256f * 1.12f;
6875 if (IsPCFaction && !IsPC)
6941 num2 = traitLightSource.LightRadius;
6946 if (lightRadius > 0)
6948 if (lightRadius > num2)
6968 int radius = GetLightRadius();
6973 float power = GetLightPower();
6994 EClass.player.lightRadius = radius;
6995 EClass.player.lightPower = power;
7001 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
7012 int num = (trait.UseLightColor ? c_lightColor : 0);
7015 fov.r = (byte)(num / 1024);
7016 fov.g = (byte)(num % 1024 / 32);
7017 fov.b = (byte)(num % 32);
7058 if (fov !=
null && fov.
lastPoints.Count != 0)
7077 things.ForeachReverse(delegate(
Thing t)
7081 if (sourceCard.
_origin ==
"dish")
7089 else if (!isChara && trait.
Decay != 0)
7091 Decay(trait.
Decay * hour);
7109 int num2 = MaxDecay / 4 * 3;
7114 num =
card.trait.DecaySpeedChild;
7116 num = num * trait.DecaySpeed / 100;
7117 int num3 = Evalue(405);
7120 num = num * (100 - num3 * 2) / 100;
7132 if (decay + a > MaxDecay)
7134 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
7143 card.AddCard(thing);
7144 if (!IsParentLocked())
7146 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
7155 else if (GetRootCard() ==
EClass.
pc)
7157 if (!IsParentLocked())
7169 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7171 if (!IsParentLocked())
7178 bool IsParentLocked()
7180 if (parent is
Thing)
7182 return (parent as
Thing).c_lockLv > 0;
7190 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7193 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7197 EClass.player.forceTalk =
false;
7201 EClass.player.forceTalk =
false;
7202 if (!isSynced && !forceSync)
7207 GameLang.refDrama1 = ref1;
7208 GameLang.refDrama2 = ref2;
7209 string text = GetTalkText(idTopic, stripPun:
true);
7211 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7217 switch ((condition !=
null) ? condition.
chara.
id :
id)
7230 TalkRaw(text, ref1, ref2, forceSync);
7233 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7235 if ((!isSynced && !forceSync) || text.IsEmpty())
7242 text = text.Replace(
"#1", ref1);
7246 text = text.Replace(
"#2", ref2);
7248 HostRenderer.Say(ApplyNewLine(text));
7249 text = StripTalkSpecialCharacters(text);
7250 bool flag = text.StartsWith(
"*");
7254 text = text.Bracket();
7256 Msg.
Say(text.Replace(
"&",
""));
7265 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7267 return text.Substring(2);
7273 return text.Substring(1);
7280 if (text.Contains(
"&"))
7282 string text2 =
"_comma".lang();
7283 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7284 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7285 text = text.Replace(
"&", Environment.NewLine ??
"");
7290 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7292 if (isSynced && !text.IsEmpty())
7296 text = text.Replace(
"#1", ref1);
7300 text = text.Replace(
"#2", ref2);
7302 HostRenderer.Say(text);
7308 Say(
"nothingHappens");
7311 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7320 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7329 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7338 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7342 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7343 if (!text.IsEmpty())
7345 text = text.Split(
'|').RandomItem();
7346 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7348 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7350 text =
"(" + text +
")";
7352 text = text.Replace(
"。)",
")");
7355 return ApplyTone(text, stripPun);
7361 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7364 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7370 string[] array = _tones.IsEmpty(
"").Split(
'|');
7371 string key = array[0];
7376 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7380 if (array[0].IsEmpty())
7389 if (array.Length >= 2)
7391 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7393 if (array.Length >= 3)
7395 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7398 text2 = stringBuilder.ToString();
7402 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7413 return text2.StripLastPun();
7428 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7429 if (list.Count != 0)
7431 int mtp = EClass.core.config.test.extraToneMTP
switch
7444 string text = list.RandomItem()[
"id"];
7445 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7452 return ListCraftBonusTraits().Count > 0;
7457 List<Element> list =
new List<Element>();
7458 string[] tag = sourceCard.
tag;
7459 for (
int i = 0; i < tag.Length; i++)
7461 string[] array = tag[i].Split(
'/');
7462 if (!(array[0] !=
"craft_bonus"))
7478 if (dest.
stack !=
null)
7482 Say(
"stack_thing", t, dest.
stack);
7496 c_idBacker = row.
id;
7502 chara.hostility = hostility2;
7508 Chara.idFaith = row.
deity.ToLowerInvariant();
7513 if (
id ==
"putty_snow")
7526 if (c_idBacker == 164)
7539 c_textureData = GetPaintData();
7549 Sprite sprite = GetSprite();
7550 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7551 int num = sprite.texture.width * 2;
7552 int num2 = sprite.texture.height * 2;
7553 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7554 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7555 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7556 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7557 texture2D2.SetPixels(pixels);
7559 byte[] result = texture2D2.EncodeToJPG();
7560 UnityEngine.Object.Destroy(texture2D);
7561 UnityEngine.Object.Destroy(texture2D2);
7567 if ((
bool)_paintSprite)
7569 UnityEngine.Object.Destroy(_paintSprite.texture);
7570 UnityEngine.Object.Destroy(_paintSprite);
7571 _paintSprite =
null;
7579 byte[] data = c_textureData;
7580 Texture2D texture2D =
new Texture2D(1, 1);
7581 texture2D.LoadImage(data);
7582 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7586 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7589 return _paintSprite;
7594 if (!(GetRestrainer() ==
null || force))
7598 isRestrained =
false;
7599 Say(
"unrestrained",
this);
7610 if (c_rescueState ==
RescueState.WaitingForRescue)
7624 c.DoHostileAction(
item, immediate:
true);
7651 result = row.value * mat.value / 100;
7688 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7689 if (
id ==
"plat" && !sell)
7700 num2 += (float)c_priceCopy * 0.2f;
7701 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7705 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7707 if (IsFood && !
material.tag.Contains(
"food"))
7712 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7730 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7732 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7734 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7735 if (IsEquipmentOrRanged)
7740 num4 += value.
source.value;
7742 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7743 if (rarity >=
Rarity.Legendary)
7745 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7753 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7755 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)))));
7759 num2 *= (float)(tier + 1);
7761 if (num2 > 2.1474836E+09f)
7763 return int.MaxValue;
7770 if (priceType ==
PriceType.CopyShop && sell)
7776 if (
id ==
"littleball")
7783 if (
id ==
"crimale2")
7791 case "ticket_fortune":
7797 case "scroll_alias":
7799 case "scroll_biography":
7814 if (!(text ==
"mathammer"))
7816 if (!(text ==
"water_jure"))
7822 return 50 + material.tier * material.tier * 10;
7835 case "hammer_strip":
7865 case "bed_shiawase":
7867 case "diary_sister":
7871 case "diary_catsister":
7873 case "container_magic":
7875 case "wrench_tent_elec":
7877 case "wrench_tent_soil":
7879 case "wrench_tent_seabed":
7883 case "wrench_storage":
7885 case "wrench_fridge":
7887 case "wrench_extend_v":
7889 case "wrench_extend_h":
7895 case "hammer_garokk":
7897 case "scroll_random":
7911 if (!sell &&
id ==
"casino_coin")
7915 int value = GetValue(priceType, sell);
7925 Trait trait = this.trait;
7930 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7935 p *= 1f + 0.5f * (float)c_containerSize;
7938 if (c_priceFix != 0)
7940 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7950 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7961 if (!sell && category.
id ==
"spellbook")
7965 bool flag = priceType ==
PriceType.CopyShop;
7966 int num = ((!flag) ? 1 : 5);
7967 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7968 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7969 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7974 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7976 p *= 0.20000000298023224;
7979 p *= 0.20000000298023224;
7982 p *= 0.20000000298023224;
7986 p *= 0.20000000298023224;
7992 if ((uint)(priceType - 1) <= 1u)
8004 if (
id ==
"rod_wish")
8006 p *= (sell ? 0.01f : 50f);
8021 p *= 0.20000000298023224;
8025 p *= 0.10000000149011612;
8028 p *= 0.0020000000949949026;
8031 p *= 0.00019999999494757503;
8034 p *= 0.004999999888241291;
8045 p *= (flag ? 1.25f : 0.3f);
8049 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
8053 p *= (flag ? 0.9f : 0.5f);
8065 p *= 1f + 0.2f * (float)c.Evalue(1406);
8078 p *= 1.100000023841858;
8112 else if (category.
IsChildOf(
"furniture"))
8132 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
8139 p = ((!sell) ? 1 : 0);
8147 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
8149 else if (p > 10000.0)
8151 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
8153 else if (p > 1000.0)
8155 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
8159 p = Mathf.CeilToInt((
float)p / 100f) * 100;
8163 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8171 if (p > (
double)(sell ? 500000000 : 1000000000))
8184 return Name + GetExtraName();
8201 ForeachPoint(delegate(
Point p,
bool main)
8203 int num2 = DistMulti(p, c);
8211 return DistMulti(pos, c);
8243 isCensored = enable;
8253 if (isDeconstructing != deconstruct)
8263 isDeconstructing = deconstruct;
8277 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8280 sortVal = -GetPrice(
currency) * 1000;
8283 sortVal = -Num * 1000;
8286 sortVal = category.sortVal * 1000;
8289 sortVal = -ChildrenAndSelfWeight * 1000;
8292 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8295 sortVal = -GetPrice(
currency) * 1000;
8298 sortVal = sourceCard._index * 1000;
8308 num =
id.CompareTo(c.
id);
8328 num = encLV - c.
encLV;
8347 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8365 action(pos, arg2:
true);
8379 SE.Play(
"pop_paper");
8409 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8422 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 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)
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)