2using System.Collections.Generic;
4using System.Runtime.Serialization;
31 [JsonProperty(PropertyName =
"A")]
32 public int[]
_ints =
new int[30];
34 [JsonProperty(PropertyName =
"B")]
35 public string id =
"";
37 [JsonProperty(PropertyName =
"C")]
40 [JsonProperty(PropertyName =
"D")]
43 [JsonProperty(PropertyName =
"E")]
46 [JsonProperty(PropertyName =
"SC")]
257 return 0.001f * (float)
_ints[15];
261 _ints[15] = (int)(value * 1000f);
269 return 0.001f * (float)
_ints[16];
273 _ints[16] = (int)(value * 1000f);
285 _ints[17] = (int)value;
297 _ints[18] = (int)value;
321 _ints[19] = (int)value * 100;
1019 SetInt(103, value ? 1 : 0);
1031 SetInt(109, value ? 1 : 0);
1043 SetInt(63, value ? 1 : 0);
1055 SetInt(64, value ? 1 : 0);
1067 SetInt(120, value ? 1 : 0);
1079 SetInt(121, value ? 1 : 0);
1091 SetInt(122, value ? 1 : 0);
1776 return GetObj<UniqueData>(6);
1788 return GetObj<Thing>(9);
1800 return GetObj<List<SocketData>>(17);
1812 return GetObj<Thing>(10);
1836 return GetObj<CharaUpgrade>(11);
1848 return GetObj<CharaGenes>(15);
1860 return GetObj<List<int>>(16);
1884 return GetObj<DNA>(14);
1896 return GetObj<CharaList>(13);
1908 return GetObj<MixedFoodData>(18);
1920 return GetObj<Thing>(19);
1932 return GetObj<byte[]>(4);
2031 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2119 if (
Tiles.Length == 1)
2121 return dir % 2 == 1;
2185 return id ==
"grass";
2317 if (
Tiles.Length < 3)
2391 return bio.gender == 2;
2543 if (
card.isSale || !
card.trait.CanUseContent)
2548 if (windowSaveData !=
null)
2560 EClass.player.wasDirtyWeight =
true;
2578 public int Evalue(
int ele,
bool ignoreGlobalElement)
2604 return c_editorTags?.Contains(tag.ToString()) ??
false;
2637 int num2 =
item.Value;
2697 for (
int i = 0; i <
sockets.Count; i++)
2715 thing.parent =
this;
2749 CardBlueprint.current =
null;
2800 if (
id ==
"microchip")
2881 EClass._zone.Boss =
Chara;
2923 int num = elementContainer.Value(value.
id);
2953 public void AddExp(
int a,
bool applyMod =
true)
2978 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2982 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50) / 100;
3013 Say(
"dingExp",
this);
3024 int num = Mathf.Min(1 +
LV / 5, 20);
3025 for (
int i = 0; i < num; i++)
3027 if (
Evalue(1644) < i + 1)
3065 if (rootCard !=
null && rootCard.
IsPC)
3120 Debug.LogWarning(
"already child:" + t);
3125 Debug.Log(
"already in the list" + t);
3140 t.ignoreAutoPick =
false;
3184 if (rootCard !=
null && rootCard.
IsPC)
3193 t.isNPCProperty =
false;
3207 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3210 void TryAdd(
Thing a)
3212 if (!ings.Contains(a.
id))
3230 List<Chara> list =
new List<Chara>();
3246 if (
item.IsPCFactionOrMinion)
3249 if (list2.Count != 0)
3251 foreach (
Thing item2
in list2)
3261 foreach (
Chara item3
in list)
3268 if (list3.Count == 0)
3272 foreach (
Thing item4
in list3)
3274 Msg.
Say(
"destroyed_inv_", item4, item3);
3286 List<Chara> list =
new List<Chara>();
3300 if (
item.IsPCFactionOrMinion)
3314 for (
int num =
things.Count - 1; num >= 0; num--)
3325 rootCard.Chara.held =
null;
3331 instance.selectedButton.card =
null;
3334 ActionMode.AdvOrRegion.updatePlans =
true;
3351 if (thing.
invY == 1)
3353 WidgetCurrentTool.dirty =
true;
3357 if (thing.
props !=
null)
3365 WidgetHotbar.dirtyCurrentItem =
true;
3366 thing.parent =
null;
3371 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3378 thing.parent =
null;
3387 return EClass.ui.layers.Count > 0;
3409 to.c_isImportant =
true;
3434 return card.GetRootCard();
3461 thing.encLV =
encLV;
3462 thing.decay =
decay;
3465 foreach (KeyValuePair<int, int>
item in mapInt)
3469 foreach (KeyValuePair<int, string> item2
in mapStr)
3471 thing.
mapStr[item2.Key] = item2.Value;
3477 thing.sockets = IO.DeepCopy(
sockets);
3493 ModNum(-a, notify:
false);
3505 return this as
Thing;
3508 return this as
Thing;
3514 return this as
Thing;
3517 public void ModNum(
int a,
bool notify =
true)
3556 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3562 for (
int i = 0; i <
sockets.Count; i++)
3580 for (
int i = 0; i <
sockets.Count; i++)
3586 int ele = num / 1000;
3587 int num2 = num % 1000;
3682 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3688 string encSlot = source.
encSlot;
3689 if (encSlot ==
null || encSlot.Length != 0)
3702 string[] array = source.
encSlot.Split(
',');
3703 foreach (
string key
in array)
3751 if (this.placeState == newState)
3757 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3769 float num2 = (
fy = 0f);
3780 this.placeState = newState;
3788 this.placeState = newState;
3843 num = num * (100 +
Quality) / 100;
3880 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3927 public bool TryPay(
int a,
string id =
"money")
3934 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3938 if (
IsPC && !(
id ==
"ration"))
3958 Say(
"spellbookCrumble",
this);
3967 if (
id ==
"influence")
3979 if (
id ==
"influence")
4010 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4012 if (num > 100000000)
4044 int num =
PV + orCreateElement.Value +
DEX / 10;
4051 num2 = num3 / 10 + 1;
4052 sides = num3 / num2 + 1;
4054 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4056 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4057 dmg -= num4 * mod / 100;
4067 DamageHP(dmg, 0, 0, attackSource, origin);
4076 bool flag = originalTarget !=
null;
4077 Action onEvade =
null;
4086 Say(
"wall_bond", chara3,
this);
4095 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4101 int num = chara4.
Evalue(1241);
4102 int num2 = chara4.
Evalue(438);
4105 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4114 if (origin !=
null && origin.HasElement(1208))
4116 switch (attackSource)
4119 dmg = dmg * 130 / 100;
4120 eleP = eleP * 150 / 100;
4123 dmg = dmg * 120 / 100;
4124 eleP = eleP * 150 / 100;
4130 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4133 if (ele == 0 || ele == 926)
4138 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4144 if (attackSource !=
AttackSource.Condition && showEffect)
4154 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4158 if (origin.HasElement(1247))
4163 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4167 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4172 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4173 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4180 if (chara2 !=
null && chara2.
isWet)
4189 if (chara !=
null && chara.
isWet)
4191 dmg = dmg * 150 / 100;
4197 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4205 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4207 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4216 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4221 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4223 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4230 dmg = dmg * 90 / 100;
4234 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4238 dmg = dmg * 90 / 100;
4257 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4261 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4266 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4268 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4270 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4278 int num7 =
MaxHP / 10;
4279 long num8 = dmg - num7;
4280 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4296 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4307 if (hp < 0 && Chara.mana.value >= 0)
4323 Chara.mana.value -= (int)dmg;
4340 float ratio = (float)dmg / (
float)
MaxHP;
4351 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4353 aI_PracticeDummy.hit++;
4354 aI_PracticeDummy.totalDamage += dmg;
4397 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4406 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4427 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4429 EClass.player.invlunerable =
true;
4468 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4475 text =
"dead_" + e.
source.alias;
4479 text =
"dead_attack";
4487 text =
"kill_" + e.source.alias;
4491 text =
"kill_attack";
4493 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4501 Say(
"reboot",
this);
4508 if (HasCondition<ConRebirth>())
4510 Say(
"rebirth",
this);
4522 Msg.alwaysVisible =
true;
4523 Msg.
Say(
"layhand", chara5,
this);
4524 Msg.
Say(
"pray_heal",
this);
4534 if (zoneInstanceBout !=
null)
4566 Die(e, origin, attackSource, originalTarget);
4572 string text2 =
new int[18]
4574 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4575 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4576 }.RandomItem().ToString();
4579 text2 =
"casino_coin";
4583 text2 =
"scratchcard";
4611 if (origin !=
null && origin.isChara)
4633 if (origin.GetInt(106) == 0)
4635 origin.Chara.TalkTopic(
"kill");
4640 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4642 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4646 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4647 if (num9 >= (
float)num13)
4651 Say(
"dmg_" + e.source.alias,
this);
4655 Say(
"dmg" + num9,
this);
4670 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4674 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4678 int num14 = origin.Dist(
this);
4682 if (
id ==
"hedgehog_ether")
4686 Say(
"reflect_thorne",
this, origin);
4687 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4692 Say(
"reflect_acid",
this, origin);
4693 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4705 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4716 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4726 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4732 Condition.ignoreEffect =
true;
4734 Condition.ignoreEffect =
false;
4738 float num16 = (float)
hp / (
float)
MaxHP;
4745 PlaySound(
"heartbeat", 1f - num16 * 2f);
4778 EClass.player.forceTalk =
true;
4780 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4791 void EvadeDeath(Action action)
4796 Chara.mana.value = 0;
4810 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4812 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4813 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4816 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4817 origin.Chara.stamina.Mod(num17);
4823 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4825 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4826 origin.Chara.mana.Mod(num18);
4832 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4834 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4835 origin.Chara.mana.Mod(num19);
4852 bool hostile =
false;
4856 if (Chance(30 + eleP / 5, 100))
4858 MarkHostile().AddCondition<
ConBurning>(eleP);
4864 if (Chance(30 + eleP / 10, 100))
4869 else if (Chance(50 + eleP / 10, 100))
4875 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4881 if (Chance(30 + eleP / 5, 100))
4883 MarkHostile().AddCondition<
ConPoison>(eleP);
4887 if (Chance(30 + eleP / 5, 100))
4894 if (Chance(30 + eleP / 5, 100))
4903 if (Chance(30 + eleP / 5, 100))
4908 else if (Chance(30 + eleP / 5, 100))
4914 if (Chance(50 + eleP / 10, 100))
4922 if (Chance(30 + eleP / 5, 100))
4941 if (Chance(5 + eleP / 25, 40))
4945 if (Chance(5 + eleP / 25, 40))
4949 if (Chance(5 + eleP / 25, 40))
4953 if (Chance(5 + eleP / 25, 40))
4955 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4957 if (Chance(5 + eleP / 25, 40))
4961 if (Chance(5 + eleP / 25, 40))
4965 if (Chance(30 + eleP / 10, 100))
4971 if (Chance(50 + eleP / 10, 100))
4973 MarkHostile().AddCondition<
ConBleed>(eleP);
4977 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4990 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4994 static bool Chance(
int a,
int max)
4996 return Mathf.Min(a, max) >
EClass.
rnd(100);
5007 Card rootCard = GetRootCard();
5009 if (_pos !=
null && !_pos.
IsValid)
5020 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5021 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5023 text += e.source.alias;
5027 Msg.
Say(text,
this, rootCard);
5032 Msg.
Say(
"destroyed",
this);
5037 things.ForeachReverse(delegate(
Thing t)
5046 if (e !=
null && _pos !=
null && e.id == 21)
5052 Explode(pos, origin);
5060 origin = origin?.Chara,
5062 aliasEle =
"eleImpact"
5068 PlaySound(
material.GetSoundDead(sourceCard));
5076 Debug.Log(Name +
" is already destroyed.");
5087 Chara.isDead =
true;
5105 for (
int num = things.Count - 1; num >= 0; num--)
5107 things[num].Destroy();
5114 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5120 List<Card> list =
new List<Card>();
5121 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5124 if (this.rarity >=
Rarity.Legendary)
5157 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5169 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5177 if (flag2 && !isUserZone)
5180 bool num2 = text ==
"_meat";
5192 text =
"meat_marble";
5195 if (thing3.
source._origin ==
"meat")
5209 if (!IsPCFaction && !isUserZone)
5211 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5213 string[] array = item2.
Split(
'/');
5214 int num4 = array[1].ToInt();
5263 if (!isBackerContent && !flag)
5299 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5309 if (text2 ==
"big_daddy" || text2 ==
"santa")
5317 List<Thing> list2 =
new List<Thing>();
5318 foreach (
Thing thing4
in things)
5344 if (num5 > 0 && list2.Count > 0)
5347 for (
int j = 0; j < list2.Count && j < num5; j++)
5353 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5356 foreach (
Card item3
in list)
5365 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5370 for (
int k = 0; k < num5; k++)
5393 foreach (
Thing thing5
in things)
5395 if (thing5.
GetInt(116) != 0)
5400 Point nearestPoint = GetRootCard().pos;
5405 foreach (
Card item4
in list)
5411 item4.isHidden =
false;
5412 item4.isNPCProperty =
false;
5469 case "egg_fertilized":
5474 string text =
"c_wilds";
5475 if (
id ==
"_meat" ||
id ==
"meat_marble")
5483 for (
int i = 0; i < 20; i++)
5486 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5496 if (crafter !=
null && crafter.id ==
"big_sister")
5498 cardRow = crafter.source;
5503 if (c_idRefCard.IsEmpty())
5505 MakeRefFrom(cardRow.
model);
5510 MakeFoodFrom(cardRow.
model);
5512 return this as
Thing;
5518 return this as
Thing;
5535 int num = race.
food[0].ToInt();
5536 bool flag =
id ==
"meat_marble";
5538 bool flag2 = category.
IsChildOf(
"meat");
5550 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5553 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5555 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5559 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5577 foreach (
Element value
in c.elements.dict.Values)
5579 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5584 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5585 foreach (KeyValuePair<int, int>
item in race.elementMap)
5589 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5592 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5593 for (
int i = 0; i < num2 && i < list.Count; i++)
5595 Tuple<int, int> tuple = list[i];
5596 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5598 if (c.Chara.IsUndead)
5600 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5602 isWeightChanged =
true;
5603 c_weight = race.height * 4 + 100;
5604 c_idMainElement = c.c_idMainElement;
5606 int num3 = c.LV - c.sourceCard.LV;
5612 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5616 if (flag2 && c.IsPCFaction && c.IsUnique)
5631 if (IsIgnoreName(
card))
5635 if (IsIgnoreName(card2))
5639 if (
card ==
null && card2 !=
null)
5646 MakeRefFrom(
card, card2);
5647 if (
card.c_idRefCard !=
null)
5649 c_idRefCard =
card.c_idRefCard;
5650 c_altName = TryGetFoodName(
card);
5655 c_altName2 = TryGetFoodName(card2);
5658 static bool IsIgnoreName(
Card c)
5688 if (!row.aka.IsEmpty())
5690 if (row.name ==
"*r" && row.aka ==
"*r")
5692 return "corpseGeneral".lang();
5694 if (row.name ==
"*r")
5696 return row.GetText(
"aka");
5699 return row.GetName();
5704 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5720 c_idRefCard = c1.
id;
5724 c_idRefCard2 = c2.id;
5725 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5727 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5741 thing.c_idMainElement = c_idMainElement;
5750 return GiveBirth(thing, effect);
5768 int num2 = LV - sourceCard.
LV;
5773 if (num2 >= 10 && !HasElement(1290))
5781 return GiveBirth(thing, effect);
5787 EClass.player.forceTalk =
true;
5788 card.Talk(
"giveBirth");
5792 card.pos.PlayEffect(
"revive");
5793 card.pos.PlaySound(
"egg");
5805 string[] array =
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" };
5809 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5811 PlaySound(
"egghatch");
5825 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5878 SayNothingHappans();
5881 PlayEffect(
"teleport");
5884 Say(
"antiTeleport",
this);
5885 PlaySound(
"gravity");
5890 PlaySound(
"teleport");
5891 Say(
"teleported",
this);
5900 if (chara.
enemy ==
this)
5911 EClass.player.haltMove =
true;
5913 PlayEffect(
"teleport", useRenderPos:
false);
5920 PlayEffect(
"ripple");
5921 PlaySound(
"Footstep/water");
5937 if (elements.
Value(ele) <= 0)
5939 if (includeNagative)
5941 return elements.
Value(ele) < 0;
5950 return elements.
Value(ele) >= req;
5965 if (HasElement(764))
5969 if (HasElement(759))
5973 if (HasElement(703))
5977 if (HasElement(758))
5981 if (HasElement(704))
5999 for (
int i = 0; i < a; i++)
6010 shared.color = 11010048f;
6011 shared.liquidLv = 0;
6013 SetRenderParam(shared);
6033 isDyed = mat !=
null;
6034 c_dyeMat = mat?.id ?? 0;
6046 else if (isElemental)
6082 int num = EClass.game.seed + refVal;
6083 num +=
id[0] % 10000;
6086 num +=
id[1] % 1000;
6089 num +=
id[2] % 1000;
6092 num +=
id[3] % 1000;
6095 num +=
id[4] % 1000;
6104 return ref _randColor;
6129 public void SetImage(Image image,
int dir,
int idSkin = 0)
6131 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6141 Sprite sprite = GetSprite();
6142 if (!c_idSpriteReplacer.IsEmpty())
6145 if (spriteReplacer !=
null)
6149 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6153 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6156 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6158 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6162 renderer.
ShowEmo(_emo, duration);
6170 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6175 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6180 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6185 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6188 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6190 Card rootCard = GetRootCard();
6197 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6222 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6228 Card rootCard = GetRootCard();
6232 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6240 Card rootCard = GetRootCard();
6263 public virtual void Rotate(
bool reverse =
false)
6266 if (sourceCard.
tiles.Length > 4)
6268 num = sourceCard.
tiles.Length;
6330 fx = fx - vector.x + thingPosition.x;
6331 fy = fy - vector.y + thingPosition.y;
6335 float num2 = (fy = 0f);
6359 renderParam.x = v.x;
6360 renderParam.y = v.y;
6361 renderParam.z = v.z;
6363 v.x = renderParam.
x;
6364 v.y = renderParam.
y;
6365 v.z = renderParam.
z;
6379 v.z += thingPosition.z;
6386 if (useCurrentPosition)
6401 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6412 EClass.player.lightRadius = 1;
6420 return GetLightRadius() > 0;
6428 return 0.01f * LightData.color.a * 256f * 1.12f;
6430 if (IsPCFaction && !IsPC)
6496 num2 = traitLightSource.LightRadius;
6501 if (lightRadius > 0)
6503 if (lightRadius > num2)
6523 int radius = GetLightRadius();
6528 float power = GetLightPower();
6548 radius += EvalueMax(490);
6549 EClass.player.lightRadius = radius;
6550 EClass.player.lightPower = power;
6556 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6567 int num = (trait.UseLightColor ? c_lightColor : 0);
6570 fov.r = (byte)(num / 1024);
6571 fov.g = (byte)(num % 1024 / 32);
6572 fov.b = (byte)(num % 32);
6613 if (fov !=
null && fov.
lastPoints.Count != 0)
6632 things.ForeachReverse(delegate(
Thing t)
6636 if (sourceCard.
_origin ==
"dish")
6644 else if (!isChara && trait.
Decay != 0)
6646 Decay(trait.
Decay * hour);
6664 int num2 = MaxDecay / 4 * 3;
6669 num =
card.trait.DecaySpeedChild;
6671 num = num * trait.DecaySpeed / 100;
6672 int num3 = Evalue(405);
6675 num = num * (100 - num3 * 2) / 100;
6687 if (decay + a > MaxDecay)
6689 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6698 card.AddCard(thing);
6699 if (!IsParentLocked())
6701 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6710 else if (GetRootCard() ==
EClass.
pc)
6712 if (!IsParentLocked())
6724 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6726 if (!IsParentLocked())
6733 bool IsParentLocked()
6735 if (parent is
Thing)
6737 return (parent as
Thing).c_lockLv > 0;
6745 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6748 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6752 EClass.player.forceTalk =
false;
6756 EClass.player.forceTalk =
false;
6757 if (!isSynced && !forceSync)
6762 GameLang.refDrama1 = ref1;
6763 GameLang.refDrama2 = ref2;
6764 string text = GetTalkText(idTopic, stripPun:
true);
6765 if (HasElement(1232) && idTopic !=
"baby")
6772 if (!(text2 ==
"adv_gaki"))
6774 if (text2 ==
"corgon")
6784 TalkRaw(text, ref1, ref2, forceSync);
6787 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6789 if ((!isSynced && !forceSync) || text.IsEmpty())
6796 text = text.Replace(
"#1", ref1);
6800 text = text.Replace(
"#2", ref2);
6802 HostRenderer.Say(ApplyNewLine(text));
6803 text = StripTalkSpeiclaCharacters(text);
6804 bool flag = text.StartsWith(
"*");
6808 text = text.Bracket();
6810 Msg.
Say(text.Replace(
"&",
""));
6819 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
6821 return text.Substring(2);
6827 return text.Substring(1);
6834 if (text.Contains(
"&"))
6836 string text2 =
"_comma".lang();
6837 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6838 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6839 text = text.Replace(
"&", Environment.NewLine ??
"");
6844 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6846 if (isSynced && !text.IsEmpty())
6850 text = text.Replace(
"#1", ref1);
6854 text = text.Replace(
"#2", ref2);
6856 HostRenderer.Say(text);
6862 Say(
"nothingHappens");
6865 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6874 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6883 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6892 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6896 if (!text.IsEmpty())
6898 text = text.Split(
'|').RandomItem();
6899 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6901 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6903 text =
"(" + text +
")";
6905 text = text.Replace(
"。)",
")");
6908 return ApplyTone(text, stripPun);
6914 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6917 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6923 string[] array = _tones.IsEmpty(
"").Split(
'|');
6924 string key = array[0];
6929 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6933 if (array[0].IsEmpty())
6942 if (array.Length >= 2)
6944 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6946 if (array.Length >= 3)
6948 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6951 text2 = stringBuilder.ToString();
6955 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6966 return text2.StripLastPun();
6981 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6982 if (list.Count != 0)
6984 int mtp = EClass.core.config.test.extraToneMTP
switch
6997 string text = list.RandomItem()[
"id"];
6998 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7005 return ListCraftBonusTraits().Count > 0;
7010 List<Element> list =
new List<Element>();
7011 string[] tag = sourceCard.
tag;
7012 for (
int i = 0; i < tag.Length; i++)
7014 string[] array = tag[i].Split(
'/');
7015 if (!(array[0] !=
"craft_bonus"))
7031 if (dest.
stack !=
null)
7035 Say(
"stack_thing", t, dest.
stack);
7043 ChangeRarity(
Rarity.Normal);
7049 c_idBacker = row.
id;
7055 chara.hostility = hostility2;
7061 Chara.idFaith = row.
deity.ToLowerInvariant();
7066 if (
id ==
"putty_snow")
7079 if (c_idBacker == 164)
7092 c_textureData = GetPaintData();
7102 Sprite sprite = GetSprite();
7103 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7104 int num = sprite.texture.width * 2;
7105 int num2 = sprite.texture.height * 2;
7106 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7107 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7108 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7109 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7110 texture2D2.SetPixels(pixels);
7112 byte[] result = texture2D2.EncodeToJPG();
7113 UnityEngine.Object.Destroy(texture2D);
7114 UnityEngine.Object.Destroy(texture2D2);
7120 if ((
bool)_paintSprite)
7122 UnityEngine.Object.Destroy(_paintSprite.texture);
7123 UnityEngine.Object.Destroy(_paintSprite);
7124 _paintSprite =
null;
7132 byte[] data = c_textureData;
7133 Texture2D texture2D =
new Texture2D(1, 1);
7134 texture2D.LoadImage(data);
7135 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7139 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7142 return _paintSprite;
7147 if (!(GetRestrainer() ==
null || force))
7151 isRestrained =
false;
7152 Say(
"unrestrained",
this);
7163 if (c_rescueState ==
RescueState.WaitingForRescue)
7177 c.DoHostileAction(
item, immediate:
true);
7204 result = row.value * mat.value / 100;
7241 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7242 if (
id ==
"plat" && !sell)
7253 num2 += (float)c_priceCopy * 0.2f;
7254 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7258 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7260 if (IsFood && !
material.tag.Contains(
"food"))
7265 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7283 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7285 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7287 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7288 if (IsEquipmentOrRanged)
7293 num4 += value.
source.value;
7295 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7296 if (rarity >=
Rarity.Legendary)
7298 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7306 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7308 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)))));
7312 num2 *= (float)(tier + 1);
7319 if (priceType ==
PriceType.CopyShop && sell)
7325 if (
id ==
"littleball")
7332 if (
id ==
"crimale2")
7340 case "ticket_fortune":
7359 case "hammer_strip":
7389 case "diary_sister":
7393 case "diary_catsister":
7395 case "container_magic":
7397 case "wrench_tent_elec":
7399 case "wrench_tent_soil":
7401 case "wrench_tent_seabed":
7405 case "wrench_storage":
7407 case "wrench_fridge":
7409 case "wrench_extend_v":
7411 case "wrench_extend_h":
7417 case "scroll_random":
7431 if (!sell &&
id ==
"casino_coin")
7435 int value = GetValue(priceType, sell);
7445 Trait trait = this.trait;
7450 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7455 p *= 1f + 0.5f * (float)c_containerSize;
7458 if (c_priceFix != 0)
7460 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7470 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7481 if (!sell && category.
id ==
"spellbook")
7485 bool flag = priceType ==
PriceType.CopyShop;
7486 int num = ((!flag) ? 1 : 5);
7487 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7488 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7489 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7494 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7496 p *= 0.20000000298023224;
7499 p *= 0.20000000298023224;
7502 p *= 0.20000000298023224;
7506 p *= 0.20000000298023224;
7512 if ((uint)(priceType - 1) <= 1u)
7524 if (
id ==
"rod_wish")
7526 p *= (sell ? 0.01f : 50f);
7541 p *= 0.20000000298023224;
7545 p *= 0.10000000149011612;
7548 p *= 0.0020000000949949026;
7551 p *= 0.00019999999494757503;
7554 p *= 0.004999999888241291;
7565 p *= (flag ? 1.25f : 0.3f);
7569 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7573 p *= (flag ? 0.9f : 0.5f);
7585 p *= 1f + 0.2f * (float)c.Evalue(1406);
7598 p *= 1.100000023841858;
7632 else if (category.
IsChildOf(
"furniture"))
7652 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7659 p = ((!sell) ? 1 : 0);
7667 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7669 else if (p > 10000.0)
7671 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7673 else if (p > 1000.0)
7675 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7679 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7683 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7691 if (p > (
double)(sell ? 500000000 : 1000000000))
7704 return Name + GetExtraName();
7721 ForeachPoint(delegate(
Point p,
bool main)
7723 int num2 = DistMulti(p, c);
7731 return DistMulti(pos, c);
7763 isCensored = enable;
7773 if (isDeconstructing != deconstruct)
7783 isDeconstructing = deconstruct;
7797 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7800 sortVal = -GetPrice(
currency) * 1000;
7803 sortVal = -Num * 1000;
7806 sortVal = category.sortVal * 1000;
7809 sortVal = -ChildrenAndSelfWeight * 1000;
7812 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7815 sortVal = -GetPrice(
currency) * 1000;
7818 sortVal = sourceCard._index * 1000;
7828 num =
id.CompareTo(c.
id);
7848 num = encLV - c.
encLV;
7867 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7885 action(pos, arg2:
true);
7899 SE.Play(
"pop_paper");
7924 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7937 if (!HaveFur() || c_fur < 0)
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
virtual bool CancelWhenDamaged
static void LoveMiracle(Chara tc, Chara c, int power, EffectId idEffect=EffectId.Love, BlessedState? state=null)
static void TryDelay(Action a)
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
void Add(Act a, string s="")
virtual bool IsRoofEditMode(Card c=null)
virtual void OnInstallCard(Card t)
virtual void OnUninstallCard(Card t)
static void ProcShieldEncs(Chara CC, Card TC, int mtpChance=100)
static void GakiConvert(ref string text, string idLang="zako")
Dictionary< int, int > mapInt
void SetStr(int id, string value=null)
void SetObj(int id, object o)
string GetStr(int id, string defaultStr=null)
int GetInt(int id, int? defaultInt=null)
void SetInt(int id, int value=0)
Dictionary< int, string > mapStr
void Mod(int a, bool force=false)
SourceElement.Row sourceElement
void WaitForEndOfFrame(Action action)
List< Action > actionsNextFrame
virtual void RefreshPosition()
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)
Card MakeRefFrom(string id)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
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)
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)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
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()
void MakeRefFrom(Card c1, Card c2=null)
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
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)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
bool HasCraftBonusTrait()
virtual void Rotate(bool reverse=false)
Card SetHidden(bool hide=true)
void SetFreePos(Point point)
int GetDaysTogetherBonus()
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
TraitShackle GetRestrainer()
virtual void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
bool CanReserve(AIAct act)
virtual void OnSerializing()
Window.SaveData c_windowSaveData
BlessedState blessedState
void PlaySoundDrop(bool spatial=true)
ref Color GetRandomColor()
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void TryUnrestrain(bool force=false, Chara c=null)
RescueState c_rescueState
void SetImage(Image image, int dir, int idSkin=0)
virtual CardRow sourceCard
void ModExp(string alias, int a)
List< Element > ListCraftBonusTraits()
int ChildrenAndSelfWeight
int GetTotalQuality(bool applyBonus=true)
Thing Add(string id, int num=1, int lv=1)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void SetDeconstruct(bool deconstruct)
virtual void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
void ModNum(int a, bool notify=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
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()
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)
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
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
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 ColorProfile Colors
static int curve(int _a, int start, int step, int rate=75)
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 GetResistDamage(int dmg, int v, int power=0)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
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)
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()
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
static Religion recentWrath
static 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(bool snow=false)
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)
int GetCurrency(string id, ref int 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 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
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)