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;
4014 Say(
"wall_bond", chara3,
this);
4023 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4029 int num = chara4.
Evalue(1241);
4030 int num2 = chara4.
Evalue(438);
4033 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4042 if (origin !=
null && origin.HasElement(1208))
4044 switch (attackSource)
4047 dmg = dmg * 130 / 100;
4048 eleP = eleP * 150 / 100;
4051 dmg = dmg * 120 / 100;
4052 eleP = eleP * 150 / 100;
4057 if (ele == 0 || ele == 926)
4062 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4068 if (attackSource !=
AttackSource.Condition && showEffect)
4078 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4082 if (origin.HasElement(1247))
4087 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4091 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4096 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4097 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4104 if (chara2 !=
null && chara2.
isWet)
4113 if (chara !=
null && chara.
isWet)
4115 dmg = dmg * 150 / 100;
4121 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4129 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4131 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4140 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4145 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4147 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4154 dmg = dmg * 90 / 100;
4158 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4162 dmg = dmg * 90 / 100;
4181 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4185 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4190 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4192 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4194 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4202 int num7 =
MaxHP / 10;
4203 long num8 = dmg - num7;
4204 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4220 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4231 if (hp < 0 && Chara.mana.value >= 0)
4247 Chara.mana.value -= (int)dmg;
4264 float ratio = (float)dmg / (
float)
MaxHP;
4275 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4277 aI_PracticeDummy.hit++;
4278 aI_PracticeDummy.totalDamage += dmg;
4321 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4330 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4351 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4353 EClass.player.invlunerable =
true;
4392 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4399 text =
"dead_" + e.
source.alias;
4403 text =
"dead_attack";
4411 text =
"kill_" + e.source.alias;
4415 text =
"kill_attack";
4417 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4425 Say(
"reboot",
this);
4432 if (HasCondition<ConRebirth>())
4434 Say(
"rebirth",
this);
4446 Msg.alwaysVisible =
true;
4447 Msg.
Say(
"layhand", chara5,
this);
4448 Msg.
Say(
"pray_heal",
this);
4458 if (zoneInstanceBout !=
null)
4490 Die(e, origin, attackSource, originalTarget);
4496 string text2 =
new int[18]
4498 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4499 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4500 }.RandomItem().ToString();
4503 text2 =
"casino_coin";
4507 text2 =
"scratchcard";
4535 if (origin !=
null && origin.isChara)
4557 if (origin.GetInt(106) == 0)
4559 origin.Chara.TalkTopic(
"kill");
4564 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4566 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4570 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4571 if (num9 >= (
float)num13)
4575 Say(
"dmg_" + e.source.alias,
this);
4579 Say(
"dmg" + num9,
this);
4594 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4598 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4602 int num14 = origin.Dist(
this);
4606 if (
id ==
"hedgehog_ether")
4610 Say(
"reflect_thorne",
this, origin);
4611 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4616 Say(
"reflect_acid",
this, origin);
4617 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4629 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4640 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4650 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4656 Condition.ignoreEffect =
true;
4658 Condition.ignoreEffect =
false;
4662 float num16 = (float)
hp / (
float)
MaxHP;
4669 PlaySound(
"heartbeat", 1f - num16 * 2f);
4702 EClass.player.forceTalk =
true;
4704 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4715 void EvadeDeath(Action action)
4720 Chara.mana.value = 0;
4734 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4736 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4737 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4740 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4741 origin.Chara.stamina.Mod(num17);
4747 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4749 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4750 origin.Chara.mana.Mod(num18);
4756 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4758 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4759 origin.Chara.mana.Mod(num19);
4776 bool hostile =
false;
4780 if (Chance(30 + eleP / 5, 100))
4782 MarkHostile().AddCondition<
ConBurning>(eleP);
4788 if (Chance(30 + eleP / 10, 100))
4793 else if (Chance(50 + eleP / 10, 100))
4799 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4805 if (Chance(30 + eleP / 5, 100))
4807 MarkHostile().AddCondition<
ConPoison>(eleP);
4811 if (Chance(30 + eleP / 5, 100))
4818 if (Chance(30 + eleP / 5, 100))
4827 if (Chance(30 + eleP / 5, 100))
4832 else if (Chance(30 + eleP / 5, 100))
4838 if (Chance(50 + eleP / 10, 100))
4846 if (Chance(30 + eleP / 5, 100))
4865 if (Chance(5 + eleP / 25, 40))
4869 if (Chance(5 + eleP / 25, 40))
4873 if (Chance(5 + eleP / 25, 40))
4877 if (Chance(5 + eleP / 25, 40))
4879 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4881 if (Chance(5 + eleP / 25, 40))
4885 if (Chance(5 + eleP / 25, 40))
4889 if (Chance(30 + eleP / 10, 100))
4895 if (Chance(50 + eleP / 10, 100))
4897 MarkHostile().AddCondition<
ConBleed>(eleP);
4901 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4914 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4918 static bool Chance(
int a,
int max)
4920 return Mathf.Min(a, max) >
EClass.
rnd(100);
4931 Card rootCard = GetRootCard();
4933 if (_pos !=
null && !_pos.
IsValid)
4944 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
4945 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
4947 text += e.source.alias;
4951 Msg.
Say(text,
this, rootCard);
4956 Msg.
Say(
"destroyed",
this);
4961 things.ForeachReverse(delegate(
Thing t)
4970 if (e !=
null && _pos !=
null && e.id == 21)
4976 Explode(pos, origin);
4984 origin = origin?.Chara,
4986 aliasEle =
"eleImpact"
4992 PlaySound(
material.GetSoundDead(sourceCard));
5000 Debug.Log(Name +
" is already destroyed.");
5011 Chara.isDead =
true;
5029 for (
int num = things.Count - 1; num >= 0; num--)
5031 things[num].Destroy();
5038 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5044 List<Card> list =
new List<Card>();
5045 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5048 if (this.rarity >=
Rarity.Legendary)
5081 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5093 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5097 if (flag2 && !isUserZone)
5100 bool num2 = text ==
"_meat";
5112 text =
"meat_marble";
5115 if (thing3.
source._origin ==
"meat")
5129 if (!IsPCFaction && !isUserZone)
5131 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5133 string[] array = item2.
Split(
'/');
5134 int num4 = array[1].ToInt();
5183 if (!isBackerContent && !flag)
5219 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5229 if (text2 ==
"big_daddy" || text2 ==
"santa")
5237 List<Thing> list2 =
new List<Thing>();
5238 foreach (
Thing thing4
in things)
5264 if (num5 > 0 && list2.Count > 0)
5267 for (
int j = 0; j < list2.Count && j < num5; j++)
5273 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5276 foreach (
Card item3
in list)
5285 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5290 for (
int k = 0; k < num5; k++)
5313 foreach (
Thing thing5
in things)
5315 if (thing5.
GetInt(116) != 0)
5320 Point nearestPoint = GetRootCard().pos;
5325 foreach (
Card item4
in list)
5331 item4.isHidden =
false;
5388 case "egg_fertilized":
5393 string text =
"c_wilds";
5394 if (
id ==
"_meat" ||
id ==
"meat_marble")
5402 for (
int i = 0; i < 20; i++)
5405 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5415 if (crafter !=
null && crafter.id ==
"big_sister")
5417 cardRow = crafter.source;
5422 if (c_idRefCard.IsEmpty())
5424 MakeRefFrom(cardRow.
model);
5429 MakeFoodFrom(cardRow.
model);
5431 return this as
Thing;
5437 return this as
Thing;
5454 int num = race.
food[0].ToInt();
5455 bool flag =
id ==
"meat_marble";
5457 bool flag2 = category.
IsChildOf(
"meat");
5469 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5472 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5474 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5478 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5496 foreach (
Element value
in c.elements.dict.Values)
5498 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5503 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5504 foreach (KeyValuePair<int, int>
item in race.elementMap)
5508 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5511 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5512 for (
int i = 0; i < num2 && i < list.Count; i++)
5514 Tuple<int, int> tuple = list[i];
5515 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5517 if (c.Chara.IsUndead)
5521 isWeightChanged =
true;
5522 c_weight = race.height * 4 + 100;
5523 c_idMainElement = c.c_idMainElement;
5525 int num3 = c.LV - c.sourceCard.LV;
5531 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5535 if (flag2 && c.IsPCFaction && c.IsUnique)
5550 if (IsIgnoreName(
card))
5554 if (IsIgnoreName(card2))
5558 if (
card ==
null && card2 !=
null)
5565 MakeRefFrom(
card, card2);
5566 if (
card.c_idRefCard !=
null)
5568 c_idRefCard =
card.c_idRefCard;
5569 c_altName = TryGetFoodName(
card);
5574 c_altName2 = TryGetFoodName(card2);
5577 static bool IsIgnoreName(
Card c)
5607 if (!row.aka.IsEmpty())
5609 if (row.name ==
"*r" && row.aka ==
"*r")
5611 return "corpseGeneral".lang();
5613 if (row.name ==
"*r")
5615 return row.GetText(
"aka");
5618 return row.GetName();
5623 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5639 c_idRefCard = c1.
id;
5643 c_idRefCard2 = c2.id;
5644 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5646 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5660 thing.c_idMainElement = c_idMainElement;
5669 return GiveBirth(thing, effect);
5687 int num2 = LV - sourceCard.
LV;
5692 if (num2 >= 10 && !HasElement(1290))
5700 return GiveBirth(thing, effect);
5706 EClass.player.forceTalk =
true;
5707 card.Talk(
"giveBirth");
5711 card.pos.PlayEffect(
"revive");
5712 card.pos.PlaySound(
"egg");
5769 SayNothingHappans();
5772 PlayEffect(
"teleport");
5775 Say(
"antiTeleport",
this);
5776 PlaySound(
"gravity");
5781 PlaySound(
"teleport");
5782 Say(
"teleported",
this);
5791 if (chara.
enemy ==
this)
5802 EClass.player.haltMove =
true;
5804 PlayEffect(
"teleport", useRenderPos:
false);
5811 PlayEffect(
"ripple");
5812 PlaySound(
"Footstep/water");
5828 return elements.
Value(ele) >= req;
5843 if (HasElement(764))
5847 if (HasElement(759))
5851 if (HasElement(703))
5855 if (HasElement(758))
5859 if (HasElement(704))
5877 for (
int i = 0; i < a; i++)
5888 shared.color = 11010048f;
5889 shared.liquidLv = 0;
5891 SetRenderParam(shared);
5911 isDyed = mat !=
null;
5912 c_dyeMat = mat?.id ?? 0;
5924 else if (isElemental)
5960 int num = EClass.game.seed + refVal;
5961 num +=
id[0] % 10000;
5964 num +=
id[1] % 1000;
5967 num +=
id[2] % 1000;
5970 num +=
id[3] % 1000;
5973 num +=
id[4] % 1000;
5982 return ref _randColor;
5999 public void SetImage(Image image,
int dir,
int idSkin = 0)
6001 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6011 Sprite sprite = GetSprite();
6012 if (!c_idSpriteReplacer.IsEmpty())
6015 if (spriteReplacer !=
null)
6019 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6023 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6026 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6028 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6032 renderer.
ShowEmo(_emo, duration);
6040 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6045 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6050 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6055 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6058 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6060 Card rootCard = GetRootCard();
6067 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6092 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6098 Card rootCard = GetRootCard();
6102 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6110 Card rootCard = GetRootCard();
6133 public virtual void Rotate(
bool reverse =
false)
6136 if (sourceCard.
tiles.Length > 4)
6138 num = sourceCard.
tiles.Length;
6196 fx = fx - vector.x + thingPosition.x;
6197 fy = fy - vector.y + thingPosition.y;
6201 float num2 = (fy = 0f);
6225 renderParam.x = v.x;
6226 renderParam.y = v.y;
6227 renderParam.z = v.z;
6229 v.x = renderParam.
x;
6230 v.y = renderParam.
y;
6231 v.z = renderParam.
z;
6245 v.z += thingPosition.z;
6252 if (useCurrentPosition)
6267 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6278 EClass.player.lightRadius = 1;
6286 return GetLightRadius() > 0;
6294 return 0.01f * LightData.color.a * 256f * 1.12f;
6296 if (IsPCFaction && !IsPC)
6362 num2 = traitLightSource.LightRadius;
6367 if (lightRadius > 0)
6369 if (lightRadius > num2)
6389 int radius = GetLightRadius();
6394 float power = GetLightPower();
6421 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6432 int num = (trait.UseLightColor ? c_lightColor : 0);
6435 fov.r = (byte)(num / 1024);
6436 fov.g = (byte)(num % 1024 / 32);
6437 fov.b = (byte)(num % 32);
6478 if (fov !=
null && fov.
lastPoints.Count != 0)
6497 things.ForeachReverse(delegate(
Thing t)
6501 if (sourceCard.
_origin ==
"dish")
6509 else if (!isChara && trait.
Decay != 0)
6511 Decay(trait.
Decay * hour);
6529 int num2 = MaxDecay / 4 * 3;
6534 num =
card.trait.DecaySpeedChild;
6536 num = num * trait.DecaySpeed / 100;
6537 int num3 = Evalue(405);
6540 num = num * (100 - num3 * 2) / 100;
6552 if (decay + a > MaxDecay)
6554 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6563 card.AddCard(thing);
6564 if (!IsParentLocked())
6566 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6575 else if (GetRootCard() ==
EClass.
pc)
6577 if (!IsParentLocked())
6589 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6591 if (!IsParentLocked())
6598 bool IsParentLocked()
6600 if (parent is
Thing)
6602 return (parent as
Thing).c_lockLv > 0;
6610 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6613 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6617 EClass.player.forceTalk =
false;
6621 EClass.player.forceTalk =
false;
6622 if (!isSynced && !forceSync)
6627 GameLang.refDrama1 = ref1;
6628 GameLang.refDrama2 = ref2;
6629 string text = GetTalkText(idTopic, stripPun:
true);
6630 if (HasElement(1232) && idTopic !=
"baby")
6637 if (!(text2 ==
"adv_gaki"))
6639 if (text2 ==
"corgon")
6649 TalkRaw(text, ref1, ref2, forceSync);
6652 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6654 if ((!isSynced && !forceSync) || text.IsEmpty())
6661 text = text.Replace(
"#1", ref1);
6665 text = text.Replace(
"#2", ref2);
6667 HostRenderer.Say(ApplyNewLine(text));
6668 bool flag = text.StartsWith(
"*");
6672 text = text.Bracket();
6674 Msg.
Say(text.Replace(
"&",
""));
6679 if (text.Contains(
"&"))
6681 string text2 =
"_comma".lang();
6682 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6683 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6684 text = text.Replace(
"&", Environment.NewLine ??
"");
6689 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6691 if (isSynced && !text.IsEmpty())
6695 text = text.Replace(
"#1", ref1);
6699 text = text.Replace(
"#2", ref2);
6701 HostRenderer.Say(text);
6707 Say(
"nothingHappens");
6710 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6719 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6728 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6737 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6741 if (!text.IsEmpty())
6743 text = text.Split(
'|').RandomItem();
6744 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6746 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6748 text =
"(" + text +
")";
6750 text = text.Replace(
"。)",
")");
6753 return ApplyTone(text, stripPun);
6759 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6762 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6768 string[] array = _tones.IsEmpty(
"").Split(
'|');
6769 string key = array[0];
6774 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6778 if (array[0].IsEmpty())
6787 if (array.Length >= 2)
6789 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6791 if (array.Length >= 3)
6793 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6796 text2 = stringBuilder.ToString();
6800 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6811 return text2.StripLastPun();
6826 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6827 if (list.Count != 0)
6829 int mtp = EClass.core.config.test.extraToneMTP
switch
6842 string text = list.RandomItem()[
"id"];
6843 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6850 return ListCraftBonusTraits().Count > 0;
6855 List<Element> list =
new List<Element>();
6856 string[] tag = sourceCard.
tag;
6857 for (
int i = 0; i < tag.Length; i++)
6859 string[] array = tag[i].Split(
'/');
6860 if (!(array[0] !=
"craft_bonus"))
6876 if (dest.
stack !=
null)
6880 Say(
"stack_thing", t, dest.
stack);
6888 ChangeRarity(
Rarity.Normal);
6894 c_idBacker = row.
id;
6900 chara.hostility = hostility2;
6906 Chara.idFaith = row.
deity.ToLowerInvariant();
6911 if (
id ==
"putty_snow")
6924 if (c_idBacker == 164)
6937 c_textureData = GetPaintData();
6947 Sprite sprite = GetSprite();
6948 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
6949 int num = sprite.texture.width * 2;
6950 int num2 = sprite.texture.height * 2;
6951 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
6952 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
6953 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
6954 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
6955 texture2D2.SetPixels(pixels);
6957 byte[] result = texture2D2.EncodeToJPG();
6958 UnityEngine.Object.Destroy(texture2D);
6959 UnityEngine.Object.Destroy(texture2D2);
6965 if ((
bool)_paintSprite)
6967 UnityEngine.Object.Destroy(_paintSprite.texture);
6968 UnityEngine.Object.Destroy(_paintSprite);
6969 _paintSprite =
null;
6977 byte[] data = c_textureData;
6978 Texture2D texture2D =
new Texture2D(1, 1);
6979 texture2D.LoadImage(data);
6980 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
6984 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
6987 return _paintSprite;
6992 if (!(GetRestrainer() ==
null || force))
6996 isRestrained =
false;
6997 Say(
"unrestrained",
this);
7008 if (c_rescueState ==
RescueState.WaitingForRescue)
7022 c.DoHostileAction(
item, immediate:
true);
7049 result = row.value * mat.value / 100;
7086 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7087 if (
id ==
"plat" && !sell)
7098 num2 += (float)c_priceCopy * 0.2f;
7099 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7103 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7105 if (IsFood && !
material.tag.Contains(
"food"))
7110 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7128 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7130 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7132 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7133 if (IsEquipmentOrRanged)
7138 num4 += value.
source.value;
7140 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7141 if (rarity >=
Rarity.Legendary)
7143 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7151 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7153 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)))));
7157 num2 *= (float)(tier + 1);
7164 if (priceType ==
PriceType.CopyShop && sell)
7170 if (
id ==
"littleball")
7177 if (
id ==
"crimale2")
7185 case "ticket_fortune":
7204 case "hammer_strip":
7213 if (!(text ==
"lucky_coin"))
7215 if (!(text ==
"book_skill"))
7236 case "diary_sister":
7240 case "diary_catsister":
7242 case "container_magic":
7244 case "wrench_tent_elec":
7246 case "wrench_tent_soil":
7248 case "wrench_tent_seabed":
7252 case "wrench_storage":
7254 case "wrench_fridge":
7256 case "wrench_extend_v":
7258 case "wrench_extend_h":
7264 case "scroll_random":
7278 if (!sell &&
id ==
"casino_coin")
7282 int value = GetValue(priceType, sell);
7292 Trait trait = this.trait;
7297 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7302 p *= 1f + 0.5f * (float)c_containerSize;
7305 if (c_priceFix != 0)
7307 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7317 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7328 if (!sell && category.
id ==
"spellbook")
7332 bool flag = priceType ==
PriceType.CopyShop;
7333 int num = ((!flag) ? 1 : 5);
7334 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7335 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7336 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7341 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7343 p *= 0.20000000298023224;
7346 p *= 0.20000000298023224;
7349 p *= 0.20000000298023224;
7353 p *= 0.20000000298023224;
7359 if ((uint)(priceType - 1) <= 1u)
7371 if (
id ==
"rod_wish")
7373 p *= (sell ? 0.01f : 50f);
7388 p *= 0.20000000298023224;
7392 p *= 0.10000000149011612;
7395 p *= 0.0020000000949949026;
7398 p *= 0.00019999999494757503;
7401 p *= 0.004999999888241291;
7412 p *= (flag ? 1.25f : 0.3f);
7416 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7420 p *= (flag ? 0.9f : 0.5f);
7432 p *= 1f + 0.2f * (float)c.Evalue(1406);
7445 p *= 1.100000023841858;
7479 else if (category.
IsChildOf(
"furniture"))
7499 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7506 p = ((!sell) ? 1 : 0);
7514 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7516 else if (p > 10000.0)
7518 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7520 else if (p > 1000.0)
7522 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7526 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7530 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7538 if (p > (
double)(sell ? 500000000 : 1000000000))
7551 return Name + GetExtraName();
7568 ForeachPoint(delegate(
Point p,
bool main)
7570 int num2 = DistMulti(p, c);
7578 return DistMulti(pos, c);
7610 isCensored = enable;
7620 if (isDeconstructing != deconstruct)
7630 isDeconstructing = deconstruct;
7644 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7647 sortVal = -GetPrice(
currency) * 1000;
7650 sortVal = -Num * 1000;
7653 sortVal = category.sortVal * 1000;
7656 sortVal = -ChildrenAndSelfWeight * 1000;
7659 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7662 sortVal = -GetPrice(
currency) * 1000;
7665 sortVal = sourceCard._index * 1000;
7675 num =
id.CompareTo(c.
id);
7695 num = encLV - c.
encLV;
7714 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7732 action(pos, arg2:
true);
7746 SE.Play(
"pop_paper");
7771 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7784 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)
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)
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
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)