2using System.Collections.Generic;
4using System.Runtime.Serialization;
32 [JsonProperty(PropertyName =
"A")]
33 public int[]
_ints =
new int[30];
35 [JsonProperty(PropertyName =
"B")]
36 public string id =
"";
38 [JsonProperty(PropertyName =
"C")]
41 [JsonProperty(PropertyName =
"D")]
44 [JsonProperty(PropertyName =
"E")]
47 [JsonProperty(PropertyName =
"SC")]
260 return 0.001f * (float)
_ints[15];
264 _ints[15] = (int)(value * 1000f);
272 return 0.001f * (float)
_ints[16];
276 _ints[16] = (int)(value * 1000f);
288 _ints[17] = (int)value;
300 _ints[18] = (int)value;
324 _ints[19] = (int)value * 100;
1046 SetInt(103, value ? 1 : 0);
1058 SetInt(109, value ? 1 : 0);
1070 SetInt(63, value ? 1 : 0);
1082 SetInt(64, value ? 1 : 0);
1094 SetInt(120, value ? 1 : 0);
1106 SetInt(121, value ? 1 : 0);
1118 SetInt(122, value ? 1 : 0);
1816 return GetObj<UniqueData>(6);
1828 return GetObj<Thing>(9);
1840 return GetObj<List<SocketData>>(17);
1852 return GetObj<Thing>(10);
1876 return GetObj<CharaUpgrade>(11);
1888 return GetObj<LoveData>(20);
1900 return GetObj<CharaGenes>(15);
1912 return GetObj<List<int>>(16);
1936 return GetObj<DNA>(14);
1948 return GetObj<CharaList>(13);
1960 return GetObj<MixedFoodData>(18);
1972 return GetObj<Thing>(19);
1984 return GetObj<byte[]>(4);
2060 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2083 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2171 if (
Tiles.Length == 1)
2173 return dir % 2 == 1;
2237 return id ==
"grass";
2369 if (
Tiles.Length < 3)
2443 return bio.gender == 2;
2543 return GetBool(
id.GetHashCode());
2548 SetBool(
id.GetHashCode(), enable);
2551 public int GetInt(
string id,
int? defaultInt =
null)
2553 return GetInt(
id.GetHashCode(), defaultInt);
2558 AddInt(
id.GetHashCode(), value);
2563 SetInt(
id.GetHashCode(), value);
2566 public string GetStr(
string id,
string defaultStr =
null)
2568 return GetStr(
id.GetHashCode(), defaultStr);
2571 public void SetStr(
string id,
string value =
null)
2573 SetStr(
id.GetHashCode(), value);
2583 SetObj(
id.GetHashCode(), o);
2645 if (
card.isSale || !
card.trait.CanUseContent)
2650 if (windowSaveData !=
null)
2662 EClass.player.wasDirtyWeight =
true;
2680 public int Evalue(
int ele,
bool ignoreGlobalElement)
2706 return c_editorTags?.Contains(tag.ToString()) ??
false;
2739 int num2 =
item.Value;
2814 for (
int i = 0; i <
sockets.Count; i++)
2832 thing.parent =
this;
2882 CardBlueprint.current =
null;
2933 if (
id ==
"microchip")
3015 EClass._zone.Boss =
Chara;
3057 int num = elementContainer.Value(value.
id);
3087 public void AddExp(
int a,
bool applyMod =
true)
3112 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3116 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3147 Say(
"dingExp",
this);
3162 int num = Mathf.Min(1 +
LV / 5, 20);
3163 for (
int i = 0; i < num; i++)
3165 if (
Evalue(1644) < i + 1)
3203 if (rootCard !=
null && rootCard.
IsPC)
3258 Debug.LogWarning(
"already child:" + t);
3263 Debug.Log(
"already in the list" + t);
3278 t.ignoreAutoPick =
false;
3322 if (rootCard !=
null && rootCard.
IsPC)
3331 t.isNPCProperty =
false;
3345 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3348 void TryAdd(
Thing a)
3350 if (!ings.Contains(a.
id))
3368 List<Chara> list =
new List<Chara>();
3384 if (!
item.IsPCFactionOrMinion)
3389 if (list2.Count == 0)
3393 foreach (
Thing item2
in list2)
3397 item.body.Unequip(item2);
3400 Msg.
Say(
"waterCurse", item2);
3404 foreach (
Chara item3
in list)
3411 if (list3.Count == 0)
3415 foreach (
Thing item4
in list3)
3417 Msg.
Say(
"destroyed_inv_", item4, item3);
3429 List<Chara> list =
new List<Chara>();
3443 if (
item.IsPCFactionOrMinion)
3457 for (
int num =
things.Count - 1; num >= 0; num--)
3468 rootCard.Chara.held =
null;
3474 instance.selectedButton.card =
null;
3477 ActionMode.AdvOrRegion.updatePlans =
true;
3494 if (thing.
invY == 1)
3496 WidgetCurrentTool.dirty =
true;
3500 if (thing.
props !=
null)
3508 WidgetHotbar.dirtyCurrentItem =
true;
3509 thing.parent =
null;
3514 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3521 thing.parent =
null;
3530 return EClass.ui.layers.Count > 0;
3552 to.c_isImportant =
true;
3577 return card.GetRootCard();
3604 thing.encLV =
encLV;
3605 thing.decay =
decay;
3608 foreach (KeyValuePair<int, int>
item in mapInt)
3612 foreach (KeyValuePair<int, string> item2
in mapStr)
3614 thing.
mapStr[item2.Key] = item2.Value;
3620 thing.sockets = IO.DeepCopy(
sockets);
3636 ModNum(-a, notify:
false);
3648 return this as
Thing;
3651 return this as
Thing;
3657 return this as
Thing;
3660 public void ModNum(
int a,
bool notify =
true)
3699 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3705 for (
int i = 0; i <
sockets.Count; i++)
3723 for (
int i = 0; i <
sockets.Count; i++)
3729 int ele = num / 1000;
3730 int num2 = num % 1000;
3825 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3831 string encSlot = source.
encSlot;
3832 if (encSlot ==
null || encSlot.Length != 0)
3845 string[] array = source.
encSlot.Split(
',');
3846 foreach (
string key
in array)
3894 if (this.placeState == newState)
3900 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3912 float num2 = (
fy = 0f);
3923 this.placeState = newState;
3931 this.placeState = newState;
3986 num = num * (100 +
Quality) / 100;
4023 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4070 public bool TryPay(
int a,
string id =
"money")
4077 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4081 if (
IsPC && !(
id ==
"ration"))
4101 Say(
"spellbookCrumble",
this);
4110 if (
id ==
"influence")
4122 if (
id ==
"influence")
4129 if (sum >
int.MaxValue)
4157 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4159 if (num > 100000000)
4191 int num =
PV + orCreateElement.Value +
DEX / 10;
4198 num2 = num3 / 10 + 1;
4199 sides = num3 / num2 + 1;
4201 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4203 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4204 dmg -= num4 * mod / 100;
4218 int num = origin.Evalue(1238);
4222 if (origin.HasElement(1247))
4227 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4231 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4235 if (idEle == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4244 DamageHP(dmg, 0, 0, attackSource, origin);
4253 bool flag = originalTarget !=
null;
4254 Action onEvade =
null;
4263 Say(
"wall_bond", chara3,
this);
4272 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4278 int num = chara4.
Evalue(1241);
4279 int num2 = chara4.
Evalue(438);
4282 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4283 chara4.
DamageHP(dmg * (100 + ((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4291 if (origin !=
null && origin.HasElement(1208))
4293 switch (attackSource)
4296 dmg = dmg * 130 / 100;
4297 eleP = eleP * 150 / 100;
4300 dmg = dmg * 120 / 100;
4301 eleP = eleP * 150 / 100;
4307 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4310 if (ele == 0 || ele == 926)
4315 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4321 if (attackSource !=
AttackSource.Condition && showEffect)
4332 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4333 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4340 if (chara2 !=
null && chara2.
isWet)
4349 if (chara !=
null && chara.
isWet)
4351 dmg = dmg * 150 / 100;
4357 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4365 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4367 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4376 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4381 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4383 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4390 dmg = dmg * 90 / 100;
4394 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4398 dmg = dmg * 90 / 100;
4417 dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
4421 dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
4426 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4428 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4430 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4438 int num6 =
MaxHP / 10;
4439 long num7 = dmg - num6;
4440 num7 = num7 * 100 / (200 +
Evalue(68) * 10);
4452 long num8 = 99999999L;
4456 if (condition !=
null)
4458 num8 = num8 * (100 + condition.lv * 5) / 100;
4465 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4476 if (hp < 0 && Chara.mana.value >= 0)
4492 Chara.mana.value -= (int)dmg;
4509 float ratio = (float)dmg / (
float)
MaxHP;
4520 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4522 aI_PracticeDummy.hit++;
4523 aI_PracticeDummy.totalDamage += dmg;
4566 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4575 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4596 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4598 EClass.player.invlunerable =
true;
4637 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4644 text =
"dead_" + e.
source.alias;
4648 text =
"dead_attack";
4656 text =
"kill_" + e.source.alias;
4660 text =
"kill_attack";
4662 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4670 Say(
"reboot",
this);
4677 if (HasCondition<ConRebirth>())
4679 Say(
"rebirth",
this);
4691 Msg.alwaysVisible =
true;
4692 Msg.
Say(
"layhand", chara5,
this);
4693 Msg.
Say(
"pray_heal",
this);
4703 if (zoneInstanceBout !=
null)
4735 Die(e, origin, attackSource, originalTarget);
4736 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4738 origin.isSummon =
true;
4739 origin.c_summonDuration = 4;
4746 string text2 =
new int[18]
4748 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4749 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4750 }.RandomItem().ToString();
4753 text2 =
"casino_coin";
4757 text2 =
"scratchcard";
4785 if (origin !=
null && origin.isChara)
4807 if (origin.GetInt(106) == 0)
4809 origin.Chara.TalkTopic(
"kill");
4814 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4816 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4820 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4821 if (num9 >= (
float)num13)
4825 Say(
"dmg_" + e.source.alias,
this);
4829 Say(
"dmg" + num9,
this);
4852 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4856 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4860 int num15 = origin.Dist(
this);
4864 if (
id ==
"hedgehog_ether")
4868 Say(
"reflect_thorne", origin,
this);
4869 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4874 Say(
"reflect_acid",
this, origin);
4875 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4887 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4898 int num16 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4908 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4914 Condition.ignoreEffect =
true;
4916 Condition.ignoreEffect =
false;
4920 float num17 = (float)
hp / (
float)
MaxHP;
4927 PlaySound(
"heartbeat", 1f - num17 * 2f);
4960 EClass.player.forceTalk =
true;
4962 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4973 void EvadeDeath(Action action)
4978 Chara.mana.value = 0;
4992 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4994 int num18 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
4995 int num19 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
4998 int num20 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
4999 origin.Chara.stamina.Mod(num20);
5005 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
5007 int num21 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
5008 origin.Chara.mana.Mod(num21);
5016 int num22 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
5017 origin.Chara.mana.Mod(num22);
5034 bool hostile =
false;
5038 if (Chance(30 + eleP / 5, 100))
5040 MarkHostile().AddCondition<
ConBurning>(eleP);
5046 if (Chance(30 + eleP / 10, 100))
5051 else if (Chance(50 + eleP / 10, 100))
5057 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5063 if (Chance(30 + eleP / 5, 100))
5065 MarkHostile().AddCondition<
ConPoison>(eleP);
5069 if (Chance(30 + eleP / 5, 100))
5076 if (Chance(30 + eleP / 5, 100))
5085 if (Chance(30 + eleP / 5, 100))
5090 else if (Chance(30 + eleP / 5, 100))
5096 if (Chance(50 + eleP / 10, 100))
5104 if (Chance(30 + eleP / 5, 100))
5123 if (Chance(5 + eleP / 25, 40))
5127 if (Chance(5 + eleP / 25, 40))
5131 if (Chance(5 + eleP / 25, 40))
5135 if (Chance(5 + eleP / 25, 40))
5137 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5139 if (Chance(5 + eleP / 25, 40))
5143 if (Chance(5 + eleP / 25, 40))
5147 if (Chance(30 + eleP / 10, 100))
5153 if (Chance(50 + eleP / 10, 100))
5155 MarkHostile().AddCondition<
ConBleed>(eleP);
5159 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5172 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5176 static bool Chance(
int a,
int max)
5178 return Mathf.Min(a, max) >
EClass.
rnd(100);
5189 Card rootCard = GetRootCard();
5191 if (_pos !=
null && !_pos.
IsValid)
5202 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5203 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5205 text += e.source.alias;
5209 Msg.
Say(text,
this, rootCard);
5214 Msg.
Say(
"destroyed",
this);
5219 things.ForeachReverse(delegate(
Thing t)
5229 if (e !=
null && _pos !=
null && e.id == 21)
5235 Explode(pos, origin);
5243 origin = origin?.Chara,
5245 aliasEle =
"eleImpact"
5251 PlaySound(
material.GetSoundDead(sourceCard));
5259 Debug.Log(Name +
" is already destroyed.");
5270 Chara.isDead =
true;
5288 for (
int num = things.Count - 1; num >= 0; num--)
5290 things[num].Destroy();
5297 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5303 List<Card> list =
new List<Card>();
5304 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5307 if (this.rarity >=
Rarity.Legendary)
5340 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5352 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5360 if (flag2 && !isUserZone)
5363 bool num2 = text ==
"_meat";
5375 text =
"meat_marble";
5378 if (thing3.
source._origin ==
"meat")
5392 if (!IsPCFaction && !isUserZone)
5394 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5396 string[] array = item2.
Split(
'/');
5397 int num4 = array[1].ToInt();
5446 if (!isBackerContent && !flag)
5482 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5503 List<Thing> list2 =
new List<Thing>();
5504 foreach (
Thing thing6
in things)
5530 if (num5 > 0 && list2.Count > 0)
5533 for (
int j = 0; j < list2.Count && j < num5; j++)
5539 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5542 foreach (
Card item3
in list)
5551 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5556 for (
int k = 0; k < num5; k++)
5585 List<Thing> list3 = thing4.
things.ToList();
5595 while (num8 > 0 && list3.Count != 0)
5597 Thing thing5 = list3.First();
5598 list3.Remove(thing5);
5609 foreach (
Thing thing7
in things)
5611 if (thing7.
GetInt(116) != 0)
5616 Point nearestPoint = GetRootCard().pos;
5621 foreach (
Card item4
in list)
5627 item4.isHidden =
false;
5628 item4.isNPCProperty =
false;
5685 case "egg_fertilized":
5690 string text =
"c_wilds";
5691 if (
id ==
"_meat" ||
id ==
"meat_marble")
5699 for (
int i = 0; i < 20; i++)
5702 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5712 if (crafter !=
null && crafter.id ==
"big_sister")
5714 cardRow = crafter.source;
5719 if (c_idRefCard.IsEmpty())
5721 MakeRefFrom(cardRow.
model);
5726 MakeFoodFrom(cardRow.
model);
5728 return this as
Thing;
5734 return this as
Thing;
5751 int num = race.
food[0].ToInt();
5752 bool flag =
id ==
"meat_marble";
5754 bool flag2 = category.
IsChildOf(
"meat");
5766 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5769 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5771 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5775 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5793 foreach (
Element value
in c.elements.dict.Values)
5795 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5800 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5801 foreach (KeyValuePair<int, int>
item in race.elementMap)
5805 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5808 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5809 for (
int i = 0; i < num2 && i < list.Count; i++)
5811 Tuple<int, int> tuple = list[i];
5812 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5814 if (c.Chara.IsUndead)
5816 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5818 isWeightChanged =
true;
5819 c_weight = race.height * 4 + 100;
5820 c_idMainElement = c.c_idMainElement;
5822 int num3 = c.LV - c.sourceCard.LV;
5828 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5832 if (flag2 && c.IsPCFaction && c.IsUnique)
5847 if (IsIgnoreName(
card))
5851 if (IsIgnoreName(card2))
5855 if (
card ==
null && card2 !=
null)
5862 MakeRefFrom(
card, card2);
5863 if (
card.c_idRefCard !=
null)
5865 c_idRefCard =
card.c_idRefCard;
5866 c_altName = TryGetFoodName(
card);
5871 c_altName2 = TryGetFoodName(card2);
5874 static bool IsIgnoreName(
Card c)
5904 if (!row.aka.IsEmpty())
5906 if (row.name ==
"*r" && row.aka ==
"*r")
5908 return "corpseGeneral".lang();
5910 if (row.name ==
"*r")
5912 return row.GetText(
"aka");
5915 return row.GetName();
5920 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5936 c_idRefCard = c1.
id;
5940 c_idRefCard2 = c2.id;
5941 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5943 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5957 thing.c_idMainElement = c_idMainElement;
5966 return GiveBirth(thing, effect);
5984 int num2 = LV - sourceCard.
LV;
5989 if (num2 >= 10 && !HasElement(1290))
5997 return GiveBirth(thing, effect);
6003 EClass.player.forceTalk =
true;
6004 card.Talk(
"giveBirth");
6008 card.pos.PlayEffect(
"revive");
6009 card.pos.PlaySound(
"egg");
6021 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" });
6025 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
6027 PlaySound(
"egghatch");
6036 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
6039 if (chara !=
null && isChara)
6042 chara.isHatchling =
true;
6094 SayNothingHappans();
6097 PlayEffect(
"teleport");
6100 Say(
"antiTeleport",
this);
6101 PlaySound(
"gravity");
6106 PlaySound(
"teleport");
6107 Say(
"teleported",
this);
6116 if (chara.
enemy ==
this)
6127 EClass.player.haltMove =
true;
6129 PlayEffect(
"teleport", useRenderPos:
false);
6136 PlayEffect(
"ripple");
6137 PlaySound(
"Footstep/water");
6148 int num = p.x - pos.
x;
6149 int num2 = p.z - pos.
z;
6166 if (num == 0 && num2 == 0)
6180 for (
int i = -1; i < 2; i++)
6182 for (
int j = -1; j < 2; j++)
6186 point.x = pos.x + j;
6187 point.z = pos.z + i;
6201 return _Move(newPoint);
6204 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6208 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6212 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6214 if (!IsAliveInCurrentZone)
6240 Say(
"kick",
this, t);
6274 if (elements.
Value(ele) <= 0)
6276 if (includeNagative)
6278 return elements.
Value(ele) < 0;
6287 return elements.
Value(ele) >= req;
6302 if (HasElement(764))
6306 if (HasElement(759))
6310 if (HasElement(703))
6314 if (HasElement(758))
6318 if (HasElement(704))
6336 for (
int i = 0; i < a; i++)
6347 shared.color = 11010048f;
6348 shared.liquidLv = 0;
6350 SetRenderParam(shared);
6370 isDyed = mat !=
null;
6371 c_dyeMat = mat?.id ?? 0;
6387 else if (isElemental)
6424 int num = EClass.game.seed + refVal;
6425 num +=
id[0] % 10000;
6428 num +=
id[1] % 1000;
6431 num +=
id[2] % 1000;
6434 num +=
id[3] % 1000;
6437 num +=
id[4] % 1000;
6446 return ref _randColor;
6471 public void SetImage(Image image,
int dir,
int idSkin = 0)
6473 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6483 Sprite sprite = GetSprite();
6484 if (!c_idSpriteReplacer.IsEmpty())
6487 if (spriteReplacer !=
null)
6491 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6495 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6498 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6500 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6504 renderer.
ShowEmo(_emo, duration);
6512 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6517 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6522 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6527 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6530 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6532 Card rootCard = GetRootCard();
6539 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6564 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6570 Card rootCard = GetRootCard();
6574 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6582 Card rootCard = GetRootCard();
6605 public virtual void Rotate(
bool reverse =
false)
6608 if (sourceCard.
tiles.Length > 4)
6610 num = sourceCard.
tiles.Length;
6672 fx = fx - vector.x + thingPosition.x;
6673 fy = fy - vector.y + thingPosition.y;
6677 float num2 = (fy = 0f);
6701 renderParam.x = v.x;
6702 renderParam.y = v.y;
6703 renderParam.z = v.z;
6705 v.x = renderParam.
x;
6706 v.y = renderParam.
y;
6707 v.z = renderParam.
z;
6721 v.z += thingPosition.z;
6728 if (useCurrentPosition)
6743 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6754 EClass.player.lightRadius = 1;
6762 return GetLightRadius() > 0;
6770 return 0.01f * LightData.color.a * 256f * 1.12f;
6772 if (IsPCFaction && !IsPC)
6838 num2 = traitLightSource.LightRadius;
6843 if (lightRadius > 0)
6845 if (lightRadius > num2)
6865 int radius = GetLightRadius();
6870 float power = GetLightPower();
6891 EClass.player.lightRadius = radius;
6892 EClass.player.lightPower = power;
6898 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6909 int num = (trait.UseLightColor ? c_lightColor : 0);
6912 fov.r = (byte)(num / 1024);
6913 fov.g = (byte)(num % 1024 / 32);
6914 fov.b = (byte)(num % 32);
6955 if (fov !=
null && fov.
lastPoints.Count != 0)
6974 things.ForeachReverse(delegate(
Thing t)
6978 if (sourceCard.
_origin ==
"dish")
6986 else if (!isChara && trait.
Decay != 0)
6988 Decay(trait.
Decay * hour);
7006 int num2 = MaxDecay / 4 * 3;
7011 num =
card.trait.DecaySpeedChild;
7013 num = num * trait.DecaySpeed / 100;
7014 int num3 = Evalue(405);
7017 num = num * (100 - num3 * 2) / 100;
7029 if (decay + a > MaxDecay)
7031 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
7040 card.AddCard(thing);
7041 if (!IsParentLocked())
7043 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
7052 else if (GetRootCard() ==
EClass.
pc)
7054 if (!IsParentLocked())
7066 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7068 if (!IsParentLocked())
7075 bool IsParentLocked()
7077 if (parent is
Thing)
7079 return (parent as
Thing).c_lockLv > 0;
7087 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7090 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7094 EClass.player.forceTalk =
false;
7098 EClass.player.forceTalk =
false;
7099 if (!isSynced && !forceSync)
7104 GameLang.refDrama1 = ref1;
7105 GameLang.refDrama2 = ref2;
7106 string text = GetTalkText(idTopic, stripPun:
true);
7108 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7114 switch ((condition !=
null) ? condition.
chara.
id :
id)
7127 TalkRaw(text, ref1, ref2, forceSync);
7130 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7132 if ((!isSynced && !forceSync) || text.IsEmpty())
7139 text = text.Replace(
"#1", ref1);
7143 text = text.Replace(
"#2", ref2);
7145 HostRenderer.Say(ApplyNewLine(text));
7146 text = StripTalkSpeiclaCharacters(text);
7147 bool flag = text.StartsWith(
"*");
7151 text = text.Bracket();
7153 Msg.
Say(text.Replace(
"&",
""));
7162 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7164 return text.Substring(2);
7170 return text.Substring(1);
7177 if (text.Contains(
"&"))
7179 string text2 =
"_comma".lang();
7180 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7181 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7182 text = text.Replace(
"&", Environment.NewLine ??
"");
7187 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7189 if (isSynced && !text.IsEmpty())
7193 text = text.Replace(
"#1", ref1);
7197 text = text.Replace(
"#2", ref2);
7199 HostRenderer.Say(text);
7205 Say(
"nothingHappens");
7208 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7217 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7226 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7235 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7239 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7240 if (!text.IsEmpty())
7242 text = text.Split(
'|').RandomItem();
7243 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7245 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7247 text =
"(" + text +
")";
7249 text = text.Replace(
"。)",
")");
7252 return ApplyTone(text, stripPun);
7258 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7261 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7267 string[] array = _tones.IsEmpty(
"").Split(
'|');
7268 string key = array[0];
7273 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7277 if (array[0].IsEmpty())
7286 if (array.Length >= 2)
7288 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7290 if (array.Length >= 3)
7292 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7295 text2 = stringBuilder.ToString();
7299 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7310 return text2.StripLastPun();
7325 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7326 if (list.Count != 0)
7328 int mtp = EClass.core.config.test.extraToneMTP
switch
7341 string text = list.RandomItem()[
"id"];
7342 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7349 return ListCraftBonusTraits().Count > 0;
7354 List<Element> list =
new List<Element>();
7355 string[] tag = sourceCard.
tag;
7356 for (
int i = 0; i < tag.Length; i++)
7358 string[] array = tag[i].Split(
'/');
7359 if (!(array[0] !=
"craft_bonus"))
7375 if (dest.
stack !=
null)
7379 Say(
"stack_thing", t, dest.
stack);
7393 c_idBacker = row.
id;
7399 chara.hostility = hostility2;
7405 Chara.idFaith = row.
deity.ToLowerInvariant();
7410 if (
id ==
"putty_snow")
7423 if (c_idBacker == 164)
7436 c_textureData = GetPaintData();
7446 Sprite sprite = GetSprite();
7447 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7448 int num = sprite.texture.width * 2;
7449 int num2 = sprite.texture.height * 2;
7450 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7451 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7452 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7453 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7454 texture2D2.SetPixels(pixels);
7456 byte[] result = texture2D2.EncodeToJPG();
7457 UnityEngine.Object.Destroy(texture2D);
7458 UnityEngine.Object.Destroy(texture2D2);
7464 if ((
bool)_paintSprite)
7466 UnityEngine.Object.Destroy(_paintSprite.texture);
7467 UnityEngine.Object.Destroy(_paintSprite);
7468 _paintSprite =
null;
7476 byte[] data = c_textureData;
7477 Texture2D texture2D =
new Texture2D(1, 1);
7478 texture2D.LoadImage(data);
7479 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7483 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7486 return _paintSprite;
7491 if (!(GetRestrainer() ==
null || force))
7495 isRestrained =
false;
7496 Say(
"unrestrained",
this);
7507 if (c_rescueState ==
RescueState.WaitingForRescue)
7521 c.DoHostileAction(
item, immediate:
true);
7548 result = row.value * mat.value / 100;
7585 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7586 if (
id ==
"plat" && !sell)
7597 num2 += (float)c_priceCopy * 0.2f;
7598 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7602 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7604 if (IsFood && !
material.tag.Contains(
"food"))
7609 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7627 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7629 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7631 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7632 if (IsEquipmentOrRanged)
7637 num4 += value.
source.value;
7639 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7640 if (rarity >=
Rarity.Legendary)
7642 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7650 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7652 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)))));
7656 num2 *= (float)(tier + 1);
7663 if (priceType ==
PriceType.CopyShop && sell)
7669 if (
id ==
"littleball")
7676 if (
id ==
"crimale2")
7684 case "ticket_fortune":
7690 case "scroll_alias":
7692 case "scroll_biography":
7707 if (!(text ==
"mathammer"))
7709 if (!(text ==
"water_jure"))
7715 return 50 + material.tier * material.tier * 10;
7728 case "hammer_strip":
7758 case "diary_sister":
7762 case "diary_catsister":
7764 case "container_magic":
7766 case "wrench_tent_elec":
7768 case "wrench_tent_soil":
7770 case "wrench_tent_seabed":
7774 case "wrench_storage":
7776 case "wrench_fridge":
7778 case "wrench_extend_v":
7780 case "wrench_extend_h":
7786 case "hammer_garokk":
7788 case "scroll_random":
7802 if (!sell &&
id ==
"casino_coin")
7806 int value = GetValue(priceType, sell);
7816 Trait trait = this.trait;
7821 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7826 p *= 1f + 0.5f * (float)c_containerSize;
7829 if (c_priceFix != 0)
7831 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7841 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7852 if (!sell && category.
id ==
"spellbook")
7856 bool flag = priceType ==
PriceType.CopyShop;
7857 int num = ((!flag) ? 1 : 5);
7858 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7859 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7860 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7865 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7867 p *= 0.20000000298023224;
7870 p *= 0.20000000298023224;
7873 p *= 0.20000000298023224;
7877 p *= 0.20000000298023224;
7883 if ((uint)(priceType - 1) <= 1u)
7895 if (
id ==
"rod_wish")
7897 p *= (sell ? 0.01f : 50f);
7912 p *= 0.20000000298023224;
7916 p *= 0.10000000149011612;
7919 p *= 0.0020000000949949026;
7922 p *= 0.00019999999494757503;
7925 p *= 0.004999999888241291;
7936 p *= (flag ? 1.25f : 0.3f);
7940 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7944 p *= (flag ? 0.9f : 0.5f);
7956 p *= 1f + 0.2f * (float)c.Evalue(1406);
7969 p *= 1.100000023841858;
8003 else if (category.
IsChildOf(
"furniture"))
8023 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
8030 p = ((!sell) ? 1 : 0);
8038 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
8040 else if (p > 10000.0)
8042 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
8044 else if (p > 1000.0)
8046 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
8050 p = Mathf.CeilToInt((
float)p / 100f) * 100;
8054 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8062 if (p > (
double)(sell ? 500000000 : 1000000000))
8075 return Name + GetExtraName();
8092 ForeachPoint(delegate(
Point p,
bool main)
8094 int num2 = DistMulti(p, c);
8102 return DistMulti(pos, c);
8134 isCensored = enable;
8144 if (isDeconstructing != deconstruct)
8154 isDeconstructing = deconstruct;
8168 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8171 sortVal = -GetPrice(
currency) * 1000;
8174 sortVal = -Num * 1000;
8177 sortVal = category.sortVal * 1000;
8180 sortVal = -ChildrenAndSelfWeight * 1000;
8183 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8186 sortVal = -GetPrice(
currency) * 1000;
8189 sortVal = sourceCard._index * 1000;
8199 num =
id.CompareTo(c.
id);
8219 num = encLV - c.
encLV;
8238 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8256 action(pos, arg2:
true);
8270 SE.Play(
"pop_paper");
8300 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8313 if (!HaveFur() || c_fur < 0)
virtual bool CancelWhenDamaged
static void LoveMiracle(Chara tc, Chara c, int power, EffectId idEffect=EffectId.Love, BlessedState? state=null)
static void TryDelay(Action a)
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
void Add(Act a, string s="")
virtual bool IsRoofEditMode(Card c=null)
virtual void OnInstallCard(Card t)
virtual void OnUninstallCard(Card t)
static void ProcShieldEncs(Chara CC, Card TC, int mtpChance=100)
static void GakiConvert(ref string text, string idLang="zako")
Dictionary< int, int > mapInt
Dictionary< int, string > mapStr
void Mod(int a, bool force=false)
SourceElement.Row sourceElement
void WaitForEndOfFrame(Action action)
List< Action > actionsNextFrame
virtual void RefreshPosition()
static void PublishEvent(string eventId, object data=null)
virtual ConditionType Type
static int GetColorInt(ref Color matColor, int p)
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
Vector3 GetThingPosition(Card tg, Point p)
void SetPortrait(Chara c)
virtual void RefreshSprite()
static void SetRarity(Rarity q=Rarity.Normal)
static CardBlueprint current
static void Set(CardBlueprint _bp=null)
static CardBlueprint _Default
GlobalCharaList globalCharas
void ShowEmo(Emo emo, float duration=0f)
void PlayAnime(AnimeID id, bool force)
override void Draw(RenderParam p)
virtual void SetOwner(Card c)
virtual void SetFirst(bool first, Vector3 pos)
void SetCensored(bool enable)
int CountRune(bool countFree=true)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
virtual string AliasMaterialOnCreate
virtual string GetName(NameStyle style, int num=-1)
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
virtual string GetHoverText()
void Teleport(Point point, bool silent=false, bool force=false)
virtual string GetExtraName()
ContainerUpgrade c_containerUpgrade
void PurgeDuplicateArtifact(Thing af)
void RemoveEditorTag(EditorTag tag)
void ApplySocket(int id, int lv, Card mod=null)
SocketData AddRune(Card rune)
bool CanAddRune(TraitMod mod)
void Say(string lang, Card c1, Card c2, string ref1=null, string ref2=null)
virtual void ApplyMaterialElements(bool remove)
virtual void OnSimulateHour(VirtualDate date)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
void SetCensored(bool enable)
ElementContainerCard elements
void _OnDeserialized(StreamingContext context)
bool IsRestrainedResident
SourceBacker.Row sourceBacker
bool TryReserve(AIAct act)
Hostility c_originalHostility
bool IsExcludeFromCraft(Recipe.Ingredient ing)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
void AddBlood(int a=1, int id=-1)
void SetRandomLightColors()
CardRenderer HostRenderer
void OnChildNumChange(Card c)
int Evalue(int ele, bool ignoreGlobalElement)
bool IsStackable(Thing tg)
bool HasElement(string id, int req=1)
void Explode(Point p, Card origin)
SourceMaterial.Row DyeMat
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
void 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 HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
int GetResistPenetrationLevel(int idEle, AttackSource attackSource, Card origin=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
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 SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
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)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Hostility OriginalHostility
Condition AddCondition(string id, int p=100, bool force=false)
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
void SetFeat(int id, int value=1, bool msg=false)
override string ToString()
ElementContainer tempElements
List< Condition > conditions
bool HasCondition(string alias)
override bool IsPCFaction
void CalculateMaxStamina()
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
ConBaseTransmuteMimic mimicry
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Chara SetHostility(Hostility h)
void TrySetEnemy(Chara c)
bool HasCooldown(int idEle)
bool DroppedCard(string id)
CodexCreature GetOrCreate(string id)
void MarkCardDrop(string id)
UD_String_LightData lightColors
UD_String_MatData matColors
override void Reveal(Card attacker=null, bool surprise=false)
virtual bool ShouldRevealOnContact
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
static long GetResistDamage(long dmg, int v, int power=0)
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
void ModExp(int ele, int a)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
bool Equals(int _x, int _z)
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
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)