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<byte[]>(4);
2019 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2107 if (
Tiles.Length == 1)
2109 return dir % 2 == 1;
2171 return id ==
"grass";
2303 if (
Tiles.Length < 3)
2377 return bio.gender == 2;
2529 if (
card.isSale || !
card.trait.CanUseContent)
2534 if (windowSaveData !=
null)
2546 EClass.player.wasDirtyWeight =
true;
2564 public int Evalue(
int ele,
bool ignoreGlobalElement)
2590 return c_editorTags?.Contains(tag.ToString()) ??
false;
2623 int num2 =
item.Value;
2686 for (
int i = 0; i <
sockets.Count; i++)
2706 thing.parent =
this;
2728 CardBlueprint.current =
null;
2778 if (
id ==
"microchip")
2859 EClass._zone.Boss =
Chara;
2901 int num = elementContainer.Value(value.
id);
2953 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2957 return num * (100 +
Evalue(1237) * 30) / 100;
2988 Say(
"dingExp",
this);
3001 int num = Mathf.Min(1 +
LV / 5, 20);
3002 for (
int i = 0; i < num; i++)
3004 if (
Evalue(1644) < i + 1)
3044 if (rootCard !=
null && rootCard.
IsPC)
3099 Debug.LogWarning(
"already child:" + t);
3104 Debug.Log(
"already in the list" + t);
3119 t.ignoreAutoPick =
false;
3163 if (rootCard !=
null && rootCard.
IsPC)
3172 t.isNPCProperty =
false;
3186 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3189 void TryAdd(
Thing a)
3191 if (!ings.Contains(a.
id))
3209 List<Chara> list =
new List<Chara>();
3223 if (!
item.IsPCFactionOrMinion)
3228 if (list2.Count == 0)
3232 foreach (
Thing item2
in list2)
3242 for (
int num =
things.Count - 1; num >= 0; num--)
3253 rootCard.Chara.held =
null;
3259 instance.selectedButton.card =
null;
3262 ActionMode.AdvOrRegion.updatePlans =
true;
3279 if (thing.
invY == 1)
3281 WidgetCurrentTool.dirty =
true;
3285 if (thing.
props !=
null)
3293 WidgetHotbar.dirtyCurrentItem =
true;
3294 thing.parent =
null;
3299 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3306 thing.parent =
null;
3315 return EClass.ui.layers.Count > 0;
3337 to.c_isImportant =
true;
3362 return card.GetRootCard();
3389 thing.encLV =
encLV;
3390 thing.decay =
decay;
3393 foreach (KeyValuePair<int, int>
item in mapInt)
3397 foreach (KeyValuePair<int, string> item2
in mapStr)
3399 thing.
mapStr[item2.Key] = item2.Value;
3405 thing.sockets = IO.DeepCopy(
sockets);
3421 ModNum(-a, notify:
false);
3433 return this as
Thing;
3436 return this as
Thing;
3442 return this as
Thing;
3445 public void ModNum(
int a,
bool notify =
true)
3484 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3490 for (
int i = 0; i <
sockets.Count; i++)
3508 for (
int i = 0; i <
sockets.Count; i++)
3514 int ele = num / 1000;
3515 int num2 = num % 1000;
3610 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3616 string encSlot = source.
encSlot;
3617 if (encSlot ==
null || encSlot.Length != 0)
3630 string[] array = source.
encSlot.Split(
',');
3631 foreach (
string key
in array)
3679 if (this.placeState == newState)
3685 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3697 float num2 = (
fy = 0f);
3708 this.placeState = newState;
3716 this.placeState = newState;
3771 num = num * (100 +
Quality) / 100;
3808 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3855 public bool TryPay(
int a,
string id =
"money")
3862 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3866 if (
IsPC && !(
id ==
"ration"))
3886 Say(
"spellbookCrumble",
this);
3895 if (
id ==
"influence")
3907 if (
id ==
"influence")
3938 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
3940 if (num > 100000000)
3972 int num =
PV + orCreateElement.Value +
DEX / 10;
3979 num2 = num3 / 10 + 1;
3980 sides = num3 / num2 + 1;
3982 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
3984 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
3985 dmg -= num4 * mod / 100;
3995 DamageHP(dmg, 0, 0, attackSource, origin);
4004 bool flag = originalTarget !=
null;
4005 Action onEvade =
null;
4009 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4015 int num = chara3.
Evalue(1241);
4016 int num2 = chara3.
Evalue(438);
4019 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara3,
this);
4027 if (origin !=
null && origin.HasElement(1208))
4029 switch (attackSource)
4032 dmg = dmg * 130 / 100;
4033 eleP = eleP * 150 / 100;
4036 dmg = dmg * 120 / 100;
4037 eleP = eleP * 150 / 100;
4042 if (ele == 0 || ele == 926)
4047 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4053 if (attackSource !=
AttackSource.Condition && showEffect)
4063 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4067 if (origin.HasElement(1247))
4072 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4076 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4081 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4082 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4089 if (chara2 !=
null && chara2.
isWet)
4098 if (chara !=
null && chara.
isWet)
4100 dmg = dmg * 150 / 100;
4106 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4114 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4116 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4125 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4130 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4132 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4139 dmg = dmg * 90 / 100;
4143 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4147 dmg = dmg * 90 / 100;
4166 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4170 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4175 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4177 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4179 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4187 int num7 =
MaxHP / 10;
4188 long num8 = dmg - num7;
4189 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4205 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4216 if (hp < 0 && Chara.mana.value >= 0)
4232 Chara.mana.value -= (int)dmg;
4249 float ratio = (float)dmg / (
float)
MaxHP;
4260 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4262 aI_PracticeDummy.hit++;
4263 aI_PracticeDummy.totalDamage += dmg;
4306 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4315 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4336 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4338 EClass.player.invlunerable =
true;
4377 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4384 text =
"dead_" + e.
source.alias;
4388 text =
"dead_attack";
4396 text =
"kill_" + e.source.alias;
4400 text =
"kill_attack";
4402 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4410 Say(
"reboot",
this);
4417 if (HasCondition<ConRebirth>())
4419 Say(
"rebirth",
this);
4431 Msg.alwaysVisible =
true;
4432 Msg.
Say(
"layhand", chara4,
this);
4433 Msg.
Say(
"pray_heal",
this);
4443 if (zoneInstanceBout !=
null)
4475 Die(e, origin, attackSource, originalTarget);
4481 string text2 =
new int[18]
4483 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4484 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4485 }.RandomItem().ToString();
4488 text2 =
"casino_coin";
4492 text2 =
"scratchcard";
4520 if (origin !=
null && origin.isChara)
4542 if (origin.GetInt(106) == 0)
4544 origin.Chara.TalkTopic(
"kill");
4549 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4551 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4555 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4556 if (num9 >= (
float)num13)
4560 Say(
"dmg_" + e.source.alias,
this);
4564 Say(
"dmg" + num9,
this);
4579 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4583 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4587 int num14 = origin.Dist(
this);
4591 if (
id ==
"hedgehog_ether")
4595 Say(
"reflect_thorne",
this, origin);
4596 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4601 Say(
"reflect_acid",
this, origin);
4602 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4614 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4625 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4635 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4641 Condition.ignoreEffect =
true;
4643 Condition.ignoreEffect =
false;
4647 float num16 = (float)
hp / (
float)
MaxHP;
4654 PlaySound(
"heartbeat", 1f - num16 * 2f);
4687 EClass.player.forceTalk =
true;
4689 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4700 void EvadeDeath(Action action)
4705 Chara.mana.value = 0;
4719 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4721 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4722 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4725 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4726 origin.Chara.stamina.Mod(num17);
4732 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4734 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4735 origin.Chara.mana.Mod(num18);
4741 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4743 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4744 origin.Chara.mana.Mod(num19);
4761 bool hostile =
false;
4765 if (Chance(30 + eleP / 5, 100))
4767 MarkHostile().AddCondition<
ConBurning>(eleP);
4773 if (Chance(30 + eleP / 10, 100))
4778 else if (Chance(50 + eleP / 10, 100))
4784 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4790 if (Chance(30 + eleP / 5, 100))
4792 MarkHostile().AddCondition<
ConPoison>(eleP);
4796 if (Chance(30 + eleP / 5, 100))
4803 if (Chance(30 + eleP / 5, 100))
4812 if (Chance(30 + eleP / 5, 100))
4817 else if (Chance(30 + eleP / 5, 100))
4823 if (Chance(50 + eleP / 10, 100))
4831 if (Chance(30 + eleP / 5, 100))
4850 if (Chance(5 + eleP / 25, 40))
4854 if (Chance(5 + eleP / 25, 40))
4858 if (Chance(5 + eleP / 25, 40))
4862 if (Chance(5 + eleP / 25, 40))
4864 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4866 if (Chance(5 + eleP / 25, 40))
4870 if (Chance(5 + eleP / 25, 40))
4874 if (Chance(30 + eleP / 10, 100))
4880 if (Chance(50 + eleP / 10, 100))
4882 MarkHostile().AddCondition<
ConBleed>(eleP);
4886 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4899 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4903 static bool Chance(
int a,
int max)
4905 return Mathf.Min(a, max) >
EClass.
rnd(100);
4916 Card rootCard = GetRootCard();
4918 if (_pos !=
null && !_pos.
IsValid)
4929 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
4930 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
4932 text += e.source.alias;
4936 Msg.
Say(text,
this, rootCard);
4941 Msg.
Say(
"destroyed",
this);
4946 things.ForeachReverse(delegate(
Thing t)
4955 if (e !=
null && _pos !=
null && e.id == 21)
4961 Explode(pos, origin);
4969 origin = origin?.Chara,
4971 aliasEle =
"eleImpact"
4977 PlaySound(
material.GetSoundDead(sourceCard));
4985 Debug.Log(Name +
" is already destroyed.");
4996 Chara.isDead =
true;
5014 for (
int num = things.Count - 1; num >= 0; num--)
5016 things[num].Destroy();
5023 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5029 List<Card> list =
new List<Card>();
5030 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5033 if (this.rarity >=
Rarity.Legendary)
5066 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5078 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5082 if (flag2 && !isUserZone)
5085 bool num2 = text ==
"_meat";
5097 text =
"meat_marble";
5100 if (thing3.
source._origin ==
"meat")
5114 if (!IsPCFaction && !isUserZone)
5116 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5118 string[] array = item2.
Split(
'/');
5119 int num4 = array[1].ToInt();
5164 if (!isBackerContent && !flag)
5194 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5204 if (text2 ==
"big_daddy" || text2 ==
"santa")
5212 List<Thing> list2 =
new List<Thing>();
5213 foreach (
Thing thing4
in things)
5239 if (num5 > 0 && list2.Count > 0)
5242 for (
int j = 0; j < list2.Count && j < num5; j++)
5248 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5251 foreach (
Card item3
in list)
5260 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5265 for (
int k = 0; k < num5; k++)
5288 foreach (
Thing thing5
in things)
5290 if (thing5.
GetInt(116) != 0)
5295 Point nearestPoint = GetRootCard().pos;
5300 foreach (
Card item4
in list)
5306 item4.isHidden =
false;
5363 case "egg_fertilized":
5368 string text =
"c_wilds";
5369 if (
id ==
"_meat" ||
id ==
"meat_marble")
5377 for (
int i = 0; i < 20; i++)
5380 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5390 if (crafter !=
null && crafter.id ==
"big_sister")
5392 cardRow = crafter.source;
5397 if (c_idRefCard.IsEmpty())
5399 MakeRefFrom(cardRow.
model);
5404 MakeFoodFrom(cardRow.
model);
5406 return this as
Thing;
5412 return this as
Thing;
5429 int num = race.
food[0].ToInt();
5430 bool flag =
id ==
"meat_marble";
5432 bool flag2 = category.
IsChildOf(
"meat");
5444 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5447 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5449 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5453 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5471 foreach (
Element value
in c.elements.dict.Values)
5473 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5478 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5479 foreach (KeyValuePair<int, int>
item in race.elementMap)
5483 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5486 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5487 for (
int i = 0; i < num2 && i < list.Count; i++)
5489 Tuple<int, int> tuple = list[i];
5490 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5492 if (c.Chara.IsUndead)
5496 isWeightChanged =
true;
5497 c_weight = race.height * 4 + 100;
5498 c_idMainElement = c.c_idMainElement;
5500 int num3 = c.LV - c.sourceCard.LV;
5506 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5510 if (flag2 && c.IsPCFaction && c.IsUnique)
5525 if (IsIgnoreName(
card))
5529 if (IsIgnoreName(card2))
5533 if (
card ==
null && card2 !=
null)
5540 MakeRefFrom(
card, card2);
5541 if (
card.c_idRefCard !=
null)
5543 c_idRefCard =
card.c_idRefCard;
5544 c_altName = TryGetFoodName(
card);
5549 c_altName2 = TryGetFoodName(card2);
5552 static bool IsIgnoreName(
Card c)
5582 if (!row.aka.IsEmpty())
5584 if (row.name ==
"*r" && row.aka ==
"*r")
5586 return "corpseGeneral".lang();
5588 if (row.name ==
"*r")
5590 return row.GetText(
"aka");
5593 return row.GetName();
5598 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5614 c_idRefCard = c1.
id;
5618 c_idRefCard2 = c2.id;
5619 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5621 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5628 thing.c_idMainElement = c_idMainElement;
5637 return GiveBirth(thing, effect);
5648 int num2 = LV - sourceCard.
LV;
5661 return GiveBirth(thing, effect);
5667 EClass.player.forceTalk =
true;
5668 card.Talk(
"giveBirth");
5672 card.pos.PlayEffect(
"revive");
5673 card.pos.PlaySound(
"egg");
5730 SayNothingHappans();
5733 PlayEffect(
"teleport");
5736 Say(
"antiTeleport",
this);
5737 PlaySound(
"gravity");
5742 PlaySound(
"teleport");
5743 Say(
"teleported",
this);
5752 if (chara.
enemy ==
this)
5763 EClass.player.haltMove =
true;
5765 PlayEffect(
"teleport", useRenderPos:
false);
5772 PlayEffect(
"ripple");
5773 PlaySound(
"Footstep/water");
5789 return elements.
Value(ele) >= req;
5804 if (HasElement(764))
5808 if (HasElement(759))
5812 if (HasElement(703))
5816 if (HasElement(758))
5820 if (HasElement(704))
5838 for (
int i = 0; i < a; i++)
5849 shared.color = 11010048f;
5850 shared.liquidLv = 0;
5852 SetRenderParam(shared);
5872 isDyed = mat !=
null;
5873 c_dyeMat = mat?.id ?? 0;
5885 else if (isElemental)
5921 int num = EClass.game.seed + refVal;
5922 num +=
id[0] % 10000;
5925 num +=
id[1] % 1000;
5928 num +=
id[2] % 1000;
5931 num +=
id[3] % 1000;
5934 num +=
id[4] % 1000;
5943 return ref _randColor;
5960 public void SetImage(Image image,
int dir,
int idSkin = 0)
5962 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
5973 sourceRenderCard.
SetImage(image, GetSprite(), colorInt, setNativeSize:
true, 0, 0,
this);
5977 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
5979 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
5983 renderer.
ShowEmo(_emo, duration);
5991 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
5996 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6001 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6006 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6009 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6011 Card rootCard = GetRootCard();
6018 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6043 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6049 Card rootCard = GetRootCard();
6053 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6061 Card rootCard = GetRootCard();
6084 public virtual void Rotate(
bool reverse =
false)
6087 if (sourceCard.
tiles.Length > 4)
6089 num = sourceCard.
tiles.Length;
6147 fx = fx - vector.x + thingPosition.x;
6148 fy = fy - vector.y + thingPosition.y;
6152 float num2 = (fy = 0f);
6176 renderParam.x = v.x;
6177 renderParam.y = v.y;
6178 renderParam.z = v.z;
6180 v.x = renderParam.
x;
6181 v.y = renderParam.
y;
6182 v.z = renderParam.
z;
6196 v.z += thingPosition.z;
6203 if (useCurrentPosition)
6218 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6229 EClass.player.lightRadius = 1;
6237 return GetLightRadius() > 0;
6245 return 0.01f * LightData.color.a * 256f * 1.12f;
6247 if (IsPCFaction && !IsPC)
6313 num2 = traitLightSource.LightRadius;
6318 if (lightRadius > 0)
6320 if (lightRadius > num2)
6340 int radius = GetLightRadius();
6345 float power = GetLightPower();
6372 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6383 int num = (trait.UseLightColor ? c_lightColor : 0);
6386 fov.r = (byte)(num / 1024);
6387 fov.g = (byte)(num % 1024 / 32);
6388 fov.b = (byte)(num % 32);
6429 if (fov !=
null && fov.
lastPoints.Count != 0)
6448 things.ForeachReverse(delegate(
Thing t)
6452 if (sourceCard.
_origin ==
"dish")
6460 else if (!isChara && trait.
Decay != 0)
6462 Decay(trait.
Decay * hour);
6480 int num2 = MaxDecay / 4 * 3;
6485 num =
card.trait.DecaySpeedChild;
6487 num = num * trait.DecaySpeed / 100;
6488 int num3 = Evalue(405);
6491 num = num * (100 - num3 * 2) / 100;
6503 if (decay + a > MaxDecay)
6505 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6514 card.AddCard(thing);
6515 if (!IsParentLocked())
6517 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6526 else if (GetRootCard() ==
EClass.
pc)
6528 if (!IsParentLocked())
6540 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6542 if (!IsParentLocked())
6549 bool IsParentLocked()
6551 if (parent is
Thing)
6553 return (parent as
Thing).c_lockLv > 0;
6561 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6564 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6568 EClass.player.forceTalk =
false;
6572 EClass.player.forceTalk =
false;
6573 if (!isSynced && !forceSync)
6578 GameLang.refDrama1 = ref1;
6579 GameLang.refDrama2 = ref2;
6580 string text = GetTalkText(idTopic, stripPun:
true);
6581 if (HasElement(1232) && idTopic !=
"baby")
6588 if (!(text2 ==
"adv_gaki"))
6590 if (text2 ==
"corgon")
6600 TalkRaw(text, ref1, ref2, forceSync);
6603 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6605 if ((!isSynced && !forceSync) || text.IsEmpty())
6612 text = text.Replace(
"#1", ref1);
6616 text = text.Replace(
"#2", ref2);
6618 HostRenderer.Say(ApplyNewLine(text));
6619 bool flag = text.StartsWith(
"*");
6623 text = text.Bracket();
6625 Msg.
Say(text.Replace(
"&",
""));
6630 if (text.Contains(
"&"))
6632 string text2 =
"_comma".lang();
6633 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6634 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6635 text = text.Replace(
"&", Environment.NewLine ??
"");
6640 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6642 if (isSynced && !text.IsEmpty())
6646 text = text.Replace(
"#1", ref1);
6650 text = text.Replace(
"#2", ref2);
6652 HostRenderer.Say(text);
6658 Say(
"nothingHappens");
6661 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6670 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6679 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6688 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6692 if (!text.IsEmpty())
6694 text = text.Split(
'|').RandomItem();
6695 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6697 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6699 text =
"(" + text +
")";
6701 text = text.Replace(
"。)",
")");
6704 return ApplyTone(text, stripPun);
6710 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6713 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6719 string[] array = _tones.IsEmpty(
"").Split(
'|');
6720 string key = array[0];
6725 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6729 if (array[0].IsEmpty())
6738 if (array.Length >= 2)
6740 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6742 if (array.Length >= 3)
6744 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6747 text2 = stringBuilder.ToString();
6751 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6762 return text2.StripLastPun();
6777 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6778 if (list.Count != 0)
6780 int mtp = EClass.core.config.test.extraToneMTP
switch
6793 string text = list.RandomItem()[
"id"];
6794 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6801 return ListCraftBonusTraits().Count > 0;
6806 List<Element> list =
new List<Element>();
6807 string[] tag = sourceCard.
tag;
6808 for (
int i = 0; i < tag.Length; i++)
6810 string[] array = tag[i].Split(
'/');
6811 if (!(array[0] !=
"craft_bonus"))
6827 if (dest.
stack !=
null)
6831 Say(
"stack_thing", t, dest.
stack);
6839 ChangeRarity(
Rarity.Normal);
6845 c_idBacker = row.
id;
6851 chara.hostility = hostility2;
6857 Chara.idFaith = row.
deity.ToLowerInvariant();
6862 if (
id ==
"putty_snow")
6875 if (c_idBacker == 164)
6888 c_textureData = GetPaintData();
6898 Sprite sprite = GetSprite();
6899 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
6900 int num = sprite.texture.width * 2;
6901 int num2 = sprite.texture.height * 2;
6902 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
6903 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
6904 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
6905 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
6906 texture2D2.SetPixels(pixels);
6908 byte[] result = texture2D2.EncodeToJPG();
6909 UnityEngine.Object.Destroy(texture2D);
6910 UnityEngine.Object.Destroy(texture2D2);
6916 if ((
bool)_paintSprite)
6918 UnityEngine.Object.Destroy(_paintSprite.texture);
6919 UnityEngine.Object.Destroy(_paintSprite);
6920 _paintSprite =
null;
6928 byte[] data = c_textureData;
6929 Texture2D texture2D =
new Texture2D(1, 1);
6930 texture2D.LoadImage(data);
6931 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
6935 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
6938 return _paintSprite;
6943 if (!(GetRestrainer() ==
null || force))
6947 isRestrained =
false;
6948 Say(
"unrestrained",
this);
6959 if (c_rescueState ==
RescueState.WaitingForRescue)
6973 c.DoHostileAction(
item, immediate:
true);
7000 result = row.value * mat.value / 100;
7037 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7038 if (
id ==
"plat" && !sell)
7049 num2 += (float)c_priceCopy * 0.2f;
7050 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7054 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7056 if (IsFood && !
material.tag.Contains(
"food"))
7061 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7079 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7081 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7083 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7084 if (IsEquipmentOrRanged)
7089 num4 += value.
source.value;
7091 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7092 if (rarity >=
Rarity.Legendary)
7094 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7102 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7104 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)))));
7108 num2 *= (float)(tier + 1);
7115 if (priceType ==
PriceType.CopyShop && sell)
7121 if (
id ==
"littleball")
7130 case "ticket_fortune":
7149 case "hammer_strip":
7158 if (!(text ==
"lucky_coin"))
7160 if (!(text ==
"book_skill"))
7181 case "diary_sister":
7185 case "diary_catsister":
7187 case "container_magic":
7189 case "wrench_tent_elec":
7191 case "wrench_tent_soil":
7193 case "wrench_tent_seabed":
7197 case "wrench_storage":
7199 case "wrench_fridge":
7201 case "wrench_extend_v":
7203 case "wrench_extend_h":
7209 case "scroll_random":
7223 if (!sell &&
id ==
"casino_coin")
7227 int value = GetValue(priceType, sell);
7237 Trait trait = this.trait;
7242 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7247 p *= 1f + 0.5f * (float)c_containerSize;
7250 if (c_priceFix != 0)
7252 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7262 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7273 if (!sell && category.
id ==
"spellbook")
7277 bool flag = priceType ==
PriceType.CopyShop;
7278 int num = ((!flag) ? 1 : 5);
7279 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7280 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7281 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7286 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7288 p *= 0.20000000298023224;
7291 p *= 0.20000000298023224;
7294 p *= 0.20000000298023224;
7298 p *= 0.20000000298023224;
7304 if ((uint)(priceType - 1) <= 1u)
7316 if (
id ==
"rod_wish")
7318 p *= (sell ? 0.01f : 50f);
7333 p *= 0.20000000298023224;
7337 p *= 0.10000000149011612;
7340 p *= 0.0020000000949949026;
7343 p *= 0.00019999999494757503;
7346 p *= 0.004999999888241291;
7357 p *= (flag ? 1.25f : 0.3f);
7361 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7365 p *= (flag ? 0.9f : 0.5f);
7377 p *= 1f + 0.2f * (float)c.Evalue(1406);
7390 p *= 1.100000023841858;
7424 else if (category.
IsChildOf(
"furniture"))
7444 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7451 p = ((!sell) ? 1 : 0);
7459 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7461 else if (p > 10000.0)
7463 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7465 else if (p > 1000.0)
7467 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7471 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7475 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7483 if (p > (
double)(sell ? 500000000 : 1000000000))
7496 return Name + GetExtraName();
7513 ForeachPoint(delegate(
Point p,
bool main)
7515 int num2 = DistMulti(p, c);
7523 return DistMulti(pos, c);
7555 isCensored = enable;
7565 if (isDeconstructing != deconstruct)
7575 isDeconstructing = deconstruct;
7589 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7592 sortVal = -GetPrice(
currency) * 1000;
7595 sortVal = -Num * 1000;
7598 sortVal = category.sortVal * 1000;
7601 sortVal = -ChildrenAndSelfWeight * 1000;
7604 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7607 sortVal = -GetPrice(
currency) * 1000;
7610 sortVal = sourceCard._index * 1000;
7620 num =
id.CompareTo(c.
id);
7640 num = encLV - c.
encLV;
7659 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7677 action(pos, arg2:
true);
7691 SE.Play(
"pop_paper");
7716 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7729 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)
bool HasElement(int ele, int req=1)
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)
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
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 SpawnLoot(Card origin)
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()
void TryUpgrade(bool msg=true)
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)
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
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 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
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)