2using System.Collections.Generic;
4using System.Runtime.Serialization;
32 [JsonProperty(PropertyName =
"A")]
33 public int[]
_ints =
new int[30];
35 [JsonProperty(PropertyName =
"B")]
36 public string id =
"";
38 [JsonProperty(PropertyName =
"C")]
41 [JsonProperty(PropertyName =
"D")]
44 [JsonProperty(PropertyName =
"E")]
47 [JsonProperty(PropertyName =
"SC")]
258 return 0.001f * (float)
_ints[15];
262 _ints[15] = (int)(value * 1000f);
270 return 0.001f * (float)
_ints[16];
274 _ints[16] = (int)(value * 1000f);
286 _ints[17] = (int)value;
298 _ints[18] = (int)value;
322 _ints[19] = (int)value * 100;
1032 SetInt(103, value ? 1 : 0);
1044 SetInt(109, value ? 1 : 0);
1056 SetInt(63, value ? 1 : 0);
1068 SetInt(64, value ? 1 : 0);
1080 SetInt(120, value ? 1 : 0);
1092 SetInt(121, value ? 1 : 0);
1104 SetInt(122, value ? 1 : 0);
1802 return GetObj<UniqueData>(6);
1814 return GetObj<Thing>(9);
1826 return GetObj<List<SocketData>>(17);
1838 return GetObj<Thing>(10);
1862 return GetObj<CharaUpgrade>(11);
1874 return GetObj<LoveData>(20);
1886 return GetObj<CharaGenes>(15);
1898 return GetObj<List<int>>(16);
1922 return GetObj<DNA>(14);
1934 return GetObj<CharaList>(13);
1946 return GetObj<MixedFoodData>(18);
1958 return GetObj<Thing>(19);
1970 return GetObj<byte[]>(4);
2046 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2069 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2157 if (
Tiles.Length == 1)
2159 return dir % 2 == 1;
2223 return id ==
"grass";
2355 if (
Tiles.Length < 3)
2429 return bio.gender == 2;
2581 if (
card.isSale || !
card.trait.CanUseContent)
2586 if (windowSaveData !=
null)
2598 EClass.player.wasDirtyWeight =
true;
2616 public int Evalue(
int ele,
bool ignoreGlobalElement)
2642 return c_editorTags?.Contains(tag.ToString()) ??
false;
2675 int num2 =
item.Value;
2750 for (
int i = 0; i <
sockets.Count; i++)
2768 thing.parent =
this;
2818 CardBlueprint.current =
null;
2869 if (
id ==
"microchip")
2951 EClass._zone.Boss =
Chara;
2993 int num = elementContainer.Value(value.
id);
3023 public void AddExp(
int a,
bool applyMod =
true)
3048 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3052 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3083 Say(
"dingExp",
this);
3098 int num = Mathf.Min(1 +
LV / 5, 20);
3099 for (
int i = 0; i < num; i++)
3101 if (
Evalue(1644) < i + 1)
3139 if (rootCard !=
null && rootCard.
IsPC)
3194 Debug.LogWarning(
"already child:" + t);
3199 Debug.Log(
"already in the list" + t);
3214 t.ignoreAutoPick =
false;
3258 if (rootCard !=
null && rootCard.
IsPC)
3267 t.isNPCProperty =
false;
3281 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3284 void TryAdd(
Thing a)
3286 if (!ings.Contains(a.
id))
3304 List<Chara> list =
new List<Chara>();
3320 if (!
item.IsPCFactionOrMinion)
3325 if (list2.Count == 0)
3329 foreach (
Thing item2
in list2)
3334 item.body.Unequip(item2);
3336 item2.c_idDeity = artifactDeity?.
id ??
null;
3337 Msg.
Say(
"waterCurse", item2);
3341 foreach (
Chara item3
in list)
3348 if (list3.Count == 0)
3352 foreach (
Thing item4
in list3)
3354 Msg.
Say(
"destroyed_inv_", item4, item3);
3366 List<Chara> list =
new List<Chara>();
3380 if (
item.IsPCFactionOrMinion)
3394 for (
int num =
things.Count - 1; num >= 0; num--)
3405 rootCard.Chara.held =
null;
3411 instance.selectedButton.card =
null;
3414 ActionMode.AdvOrRegion.updatePlans =
true;
3431 if (thing.
invY == 1)
3433 WidgetCurrentTool.dirty =
true;
3437 if (thing.
props !=
null)
3445 WidgetHotbar.dirtyCurrentItem =
true;
3446 thing.parent =
null;
3451 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3458 thing.parent =
null;
3467 return EClass.ui.layers.Count > 0;
3489 to.c_isImportant =
true;
3514 return card.GetRootCard();
3541 thing.encLV =
encLV;
3542 thing.decay =
decay;
3545 foreach (KeyValuePair<int, int>
item in mapInt)
3549 foreach (KeyValuePair<int, string> item2
in mapStr)
3551 thing.
mapStr[item2.Key] = item2.Value;
3557 thing.sockets = IO.DeepCopy(
sockets);
3573 ModNum(-a, notify:
false);
3585 return this as
Thing;
3588 return this as
Thing;
3594 return this as
Thing;
3597 public void ModNum(
int a,
bool notify =
true)
3636 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3642 for (
int i = 0; i <
sockets.Count; i++)
3660 for (
int i = 0; i <
sockets.Count; i++)
3666 int ele = num / 1000;
3667 int num2 = num % 1000;
3762 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3768 string encSlot = source.
encSlot;
3769 if (encSlot ==
null || encSlot.Length != 0)
3782 string[] array = source.
encSlot.Split(
',');
3783 foreach (
string key
in array)
3831 if (this.placeState == newState)
3837 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3849 float num2 = (
fy = 0f);
3860 this.placeState = newState;
3868 this.placeState = newState;
3923 num = num * (100 +
Quality) / 100;
3960 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4007 public bool TryPay(
int a,
string id =
"money")
4014 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4018 if (
IsPC && !(
id ==
"ration"))
4038 Say(
"spellbookCrumble",
this);
4047 if (
id ==
"influence")
4059 if (
id ==
"influence")
4066 if (sum >
int.MaxValue)
4094 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4096 if (num > 100000000)
4128 int num =
PV + orCreateElement.Value +
DEX / 10;
4135 num2 = num3 / 10 + 1;
4136 sides = num3 / num2 + 1;
4138 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4140 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4141 dmg -= num4 * mod / 100;
4151 DamageHP(dmg, 0, 0, attackSource, origin);
4160 bool flag = originalTarget !=
null;
4161 Action onEvade =
null;
4170 Say(
"wall_bond", chara3,
this);
4179 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4185 int num = chara4.
Evalue(1241);
4186 int num2 = chara4.
Evalue(438);
4189 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4198 if (origin !=
null && origin.HasElement(1208))
4200 switch (attackSource)
4203 dmg = dmg * 130 / 100;
4204 eleP = eleP * 150 / 100;
4207 dmg = dmg * 120 / 100;
4208 eleP = eleP * 150 / 100;
4214 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4217 if (ele == 0 || ele == 926)
4222 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4228 if (attackSource !=
AttackSource.Condition && showEffect)
4238 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4242 if (origin.HasElement(1247))
4247 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4251 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4256 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4257 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4264 if (chara2 !=
null && chara2.
isWet)
4273 if (chara !=
null && chara.
isWet)
4275 dmg = dmg * 150 / 100;
4281 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4289 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4291 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4300 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4305 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4307 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4314 dmg = dmg * 90 / 100;
4318 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4322 dmg = dmg * 90 / 100;
4341 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4345 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4350 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4352 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4354 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4362 int num7 =
MaxHP / 10;
4363 long num8 = dmg - num7;
4364 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4380 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4391 if (hp < 0 && Chara.mana.value >= 0)
4407 Chara.mana.value -= (int)dmg;
4424 float ratio = (float)dmg / (
float)
MaxHP;
4435 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4437 aI_PracticeDummy.hit++;
4438 aI_PracticeDummy.totalDamage += dmg;
4481 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4490 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4511 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4513 EClass.player.invlunerable =
true;
4552 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4559 text =
"dead_" + e.
source.alias;
4563 text =
"dead_attack";
4571 text =
"kill_" + e.source.alias;
4575 text =
"kill_attack";
4577 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4585 Say(
"reboot",
this);
4592 if (HasCondition<ConRebirth>())
4594 Say(
"rebirth",
this);
4606 Msg.alwaysVisible =
true;
4607 Msg.
Say(
"layhand", chara5,
this);
4608 Msg.
Say(
"pray_heal",
this);
4618 if (zoneInstanceBout !=
null)
4650 Die(e, origin, attackSource, originalTarget);
4656 string text2 =
new int[18]
4658 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4659 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4660 }.RandomItem().ToString();
4663 text2 =
"casino_coin";
4667 text2 =
"scratchcard";
4695 if (origin !=
null && origin.isChara)
4717 if (origin.GetInt(106) == 0)
4719 origin.Chara.TalkTopic(
"kill");
4724 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4726 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4730 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4731 if (num9 >= (
float)num13)
4735 Say(
"dmg_" + e.source.alias,
this);
4739 Say(
"dmg" + num9,
this);
4762 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4766 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4770 int num14 = origin.Dist(
this);
4774 if (
id ==
"hedgehog_ether")
4778 Say(
"reflect_thorne", origin,
this);
4779 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4784 Say(
"reflect_acid",
this, origin);
4785 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4797 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4808 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4818 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4824 Condition.ignoreEffect =
true;
4826 Condition.ignoreEffect =
false;
4830 float num16 = (float)
hp / (
float)
MaxHP;
4837 PlaySound(
"heartbeat", 1f - num16 * 2f);
4870 EClass.player.forceTalk =
true;
4872 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4883 void EvadeDeath(Action action)
4888 Chara.mana.value = 0;
4902 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4904 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4905 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4908 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4909 origin.Chara.stamina.Mod(num17);
4915 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4917 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4918 origin.Chara.mana.Mod(num18);
4924 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4926 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4927 origin.Chara.mana.Mod(num19);
4944 bool hostile =
false;
4948 if (Chance(30 + eleP / 5, 100))
4950 MarkHostile().AddCondition<
ConBurning>(eleP);
4956 if (Chance(30 + eleP / 10, 100))
4961 else if (Chance(50 + eleP / 10, 100))
4967 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4973 if (Chance(30 + eleP / 5, 100))
4975 MarkHostile().AddCondition<
ConPoison>(eleP);
4979 if (Chance(30 + eleP / 5, 100))
4986 if (Chance(30 + eleP / 5, 100))
4995 if (Chance(30 + eleP / 5, 100))
5000 else if (Chance(30 + eleP / 5, 100))
5006 if (Chance(50 + eleP / 10, 100))
5014 if (Chance(30 + eleP / 5, 100))
5033 if (Chance(5 + eleP / 25, 40))
5037 if (Chance(5 + eleP / 25, 40))
5041 if (Chance(5 + eleP / 25, 40))
5045 if (Chance(5 + eleP / 25, 40))
5047 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5049 if (Chance(5 + eleP / 25, 40))
5053 if (Chance(5 + eleP / 25, 40))
5057 if (Chance(30 + eleP / 10, 100))
5063 if (Chance(50 + eleP / 10, 100))
5065 MarkHostile().AddCondition<
ConBleed>(eleP);
5069 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5082 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5086 static bool Chance(
int a,
int max)
5088 return Mathf.Min(a, max) >
EClass.
rnd(100);
5099 Card rootCard = GetRootCard();
5101 if (_pos !=
null && !_pos.
IsValid)
5112 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5113 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5115 text += e.source.alias;
5119 Msg.
Say(text,
this, rootCard);
5124 Msg.
Say(
"destroyed",
this);
5129 things.ForeachReverse(delegate(
Thing t)
5138 if (e !=
null && _pos !=
null && e.id == 21)
5144 Explode(pos, origin);
5152 origin = origin?.Chara,
5154 aliasEle =
"eleImpact"
5160 PlaySound(
material.GetSoundDead(sourceCard));
5168 Debug.Log(Name +
" is already destroyed.");
5179 Chara.isDead =
true;
5197 for (
int num = things.Count - 1; num >= 0; num--)
5199 things[num].Destroy();
5206 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5212 List<Card> list =
new List<Card>();
5213 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5216 if (this.rarity >=
Rarity.Legendary)
5249 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5261 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5269 if (flag2 && !isUserZone)
5272 bool num2 = text ==
"_meat";
5284 text =
"meat_marble";
5287 if (thing3.
source._origin ==
"meat")
5301 if (!IsPCFaction && !isUserZone)
5303 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5305 string[] array = item2.
Split(
'/');
5306 int num4 = array[1].ToInt();
5355 if (!isBackerContent && !flag)
5391 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5401 if (text2 ==
"big_daddy" || text2 ==
"santa")
5409 List<Thing> list2 =
new List<Thing>();
5410 foreach (
Thing thing4
in things)
5436 if (num5 > 0 && list2.Count > 0)
5439 for (
int j = 0; j < list2.Count && j < num5; j++)
5445 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5448 foreach (
Card item3
in list)
5457 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5462 for (
int k = 0; k < num5; k++)
5485 foreach (
Thing thing5
in things)
5487 if (thing5.
GetInt(116) != 0)
5492 Point nearestPoint = GetRootCard().pos;
5497 foreach (
Card item4
in list)
5503 item4.isHidden =
false;
5504 item4.isNPCProperty =
false;
5561 case "egg_fertilized":
5566 string text =
"c_wilds";
5567 if (
id ==
"_meat" ||
id ==
"meat_marble")
5575 for (
int i = 0; i < 20; i++)
5578 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5588 if (crafter !=
null && crafter.id ==
"big_sister")
5590 cardRow = crafter.source;
5595 if (c_idRefCard.IsEmpty())
5597 MakeRefFrom(cardRow.
model);
5602 MakeFoodFrom(cardRow.
model);
5604 return this as
Thing;
5610 return this as
Thing;
5627 int num = race.
food[0].ToInt();
5628 bool flag =
id ==
"meat_marble";
5630 bool flag2 = category.
IsChildOf(
"meat");
5642 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5645 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5647 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5651 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5669 foreach (
Element value
in c.elements.dict.Values)
5671 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5676 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5677 foreach (KeyValuePair<int, int>
item in race.elementMap)
5681 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5684 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5685 for (
int i = 0; i < num2 && i < list.Count; i++)
5687 Tuple<int, int> tuple = list[i];
5688 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5690 if (c.Chara.IsUndead)
5692 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5694 isWeightChanged =
true;
5695 c_weight = race.height * 4 + 100;
5696 c_idMainElement = c.c_idMainElement;
5698 int num3 = c.LV - c.sourceCard.LV;
5704 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5708 if (flag2 && c.IsPCFaction && c.IsUnique)
5723 if (IsIgnoreName(
card))
5727 if (IsIgnoreName(card2))
5731 if (
card ==
null && card2 !=
null)
5738 MakeRefFrom(
card, card2);
5739 if (
card.c_idRefCard !=
null)
5741 c_idRefCard =
card.c_idRefCard;
5742 c_altName = TryGetFoodName(
card);
5747 c_altName2 = TryGetFoodName(card2);
5750 static bool IsIgnoreName(
Card c)
5780 if (!row.aka.IsEmpty())
5782 if (row.name ==
"*r" && row.aka ==
"*r")
5784 return "corpseGeneral".lang();
5786 if (row.name ==
"*r")
5788 return row.GetText(
"aka");
5791 return row.GetName();
5796 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5812 c_idRefCard = c1.
id;
5816 c_idRefCard2 = c2.id;
5817 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5819 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5833 thing.c_idMainElement = c_idMainElement;
5842 return GiveBirth(thing, effect);
5860 int num2 = LV - sourceCard.
LV;
5865 if (num2 >= 10 && !HasElement(1290))
5873 return GiveBirth(thing, effect);
5879 EClass.player.forceTalk =
true;
5880 card.Talk(
"giveBirth");
5884 card.pos.PlayEffect(
"revive");
5885 card.pos.PlaySound(
"egg");
5897 string[] array =
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" };
5901 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5903 PlaySound(
"egghatch");
5912 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5965 SayNothingHappans();
5968 PlayEffect(
"teleport");
5971 Say(
"antiTeleport",
this);
5972 PlaySound(
"gravity");
5977 PlaySound(
"teleport");
5978 Say(
"teleported",
this);
5987 if (chara.
enemy ==
this)
5998 EClass.player.haltMove =
true;
6000 PlayEffect(
"teleport", useRenderPos:
false);
6007 PlayEffect(
"ripple");
6008 PlaySound(
"Footstep/water");
6019 int num = p.x - pos.
x;
6020 int num2 = p.z - pos.
z;
6037 if (num == 0 && num2 == 0)
6047 return TryMove(point, allowDestroyPath:
false);
6054 return _Move(newPoint);
6057 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6061 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6065 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6067 if (!IsAliveInCurrentZone)
6093 Say(
"kick",
this, t);
6124 if (elements.
Value(ele) <= 0)
6126 if (includeNagative)
6128 return elements.
Value(ele) < 0;
6137 return elements.
Value(ele) >= req;
6152 if (HasElement(764))
6156 if (HasElement(759))
6160 if (HasElement(703))
6164 if (HasElement(758))
6168 if (HasElement(704))
6186 for (
int i = 0; i < a; i++)
6197 shared.color = 11010048f;
6198 shared.liquidLv = 0;
6200 SetRenderParam(shared);
6220 isDyed = mat !=
null;
6221 c_dyeMat = mat?.id ?? 0;
6233 else if (isElemental)
6269 int num = EClass.game.seed + refVal;
6270 num +=
id[0] % 10000;
6273 num +=
id[1] % 1000;
6276 num +=
id[2] % 1000;
6279 num +=
id[3] % 1000;
6282 num +=
id[4] % 1000;
6291 return ref _randColor;
6316 public void SetImage(Image image,
int dir,
int idSkin = 0)
6318 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6328 Sprite sprite = GetSprite();
6329 if (!c_idSpriteReplacer.IsEmpty())
6332 if (spriteReplacer !=
null)
6336 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6340 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6343 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6345 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6349 renderer.
ShowEmo(_emo, duration);
6357 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6362 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6367 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6372 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6375 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6377 Card rootCard = GetRootCard();
6384 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6409 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6415 Card rootCard = GetRootCard();
6419 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6427 Card rootCard = GetRootCard();
6450 public virtual void Rotate(
bool reverse =
false)
6453 if (sourceCard.
tiles.Length > 4)
6455 num = sourceCard.
tiles.Length;
6517 fx = fx - vector.x + thingPosition.x;
6518 fy = fy - vector.y + thingPosition.y;
6522 float num2 = (fy = 0f);
6546 renderParam.x = v.x;
6547 renderParam.y = v.y;
6548 renderParam.z = v.z;
6550 v.x = renderParam.
x;
6551 v.y = renderParam.
y;
6552 v.z = renderParam.
z;
6566 v.z += thingPosition.z;
6573 if (useCurrentPosition)
6588 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6599 EClass.player.lightRadius = 1;
6607 return GetLightRadius() > 0;
6615 return 0.01f * LightData.color.a * 256f * 1.12f;
6617 if (IsPCFaction && !IsPC)
6683 num2 = traitLightSource.LightRadius;
6688 if (lightRadius > 0)
6690 if (lightRadius > num2)
6710 int radius = GetLightRadius();
6715 float power = GetLightPower();
6736 EClass.player.lightRadius = radius;
6737 EClass.player.lightPower = power;
6743 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6754 int num = (trait.UseLightColor ? c_lightColor : 0);
6757 fov.r = (byte)(num / 1024);
6758 fov.g = (byte)(num % 1024 / 32);
6759 fov.b = (byte)(num % 32);
6800 if (fov !=
null && fov.
lastPoints.Count != 0)
6819 things.ForeachReverse(delegate(
Thing t)
6823 if (sourceCard.
_origin ==
"dish")
6831 else if (!isChara && trait.
Decay != 0)
6833 Decay(trait.
Decay * hour);
6851 int num2 = MaxDecay / 4 * 3;
6856 num =
card.trait.DecaySpeedChild;
6858 num = num * trait.DecaySpeed / 100;
6859 int num3 = Evalue(405);
6862 num = num * (100 - num3 * 2) / 100;
6874 if (decay + a > MaxDecay)
6876 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6885 card.AddCard(thing);
6886 if (!IsParentLocked())
6888 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6897 else if (GetRootCard() ==
EClass.
pc)
6899 if (!IsParentLocked())
6911 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6913 if (!IsParentLocked())
6920 bool IsParentLocked()
6922 if (parent is
Thing)
6924 return (parent as
Thing).c_lockLv > 0;
6932 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6935 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6939 EClass.player.forceTalk =
false;
6943 EClass.player.forceTalk =
false;
6944 if (!isSynced && !forceSync)
6949 GameLang.refDrama1 = ref1;
6950 GameLang.refDrama2 = ref2;
6951 string text = GetTalkText(idTopic, stripPun:
true);
6952 if (HasElement(1232) && idTopic !=
"baby")
6971 TalkRaw(text, ref1, ref2, forceSync);
6974 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6976 if ((!isSynced && !forceSync) || text.IsEmpty())
6983 text = text.Replace(
"#1", ref1);
6987 text = text.Replace(
"#2", ref2);
6989 HostRenderer.Say(ApplyNewLine(text));
6990 text = StripTalkSpeiclaCharacters(text);
6991 bool flag = text.StartsWith(
"*");
6995 text = text.Bracket();
6997 Msg.
Say(text.Replace(
"&",
""));
7006 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7008 return text.Substring(2);
7014 return text.Substring(1);
7021 if (text.Contains(
"&"))
7023 string text2 =
"_comma".lang();
7024 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7025 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7026 text = text.Replace(
"&", Environment.NewLine ??
"");
7031 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7033 if (isSynced && !text.IsEmpty())
7037 text = text.Replace(
"#1", ref1);
7041 text = text.Replace(
"#2", ref2);
7043 HostRenderer.Say(text);
7049 Say(
"nothingHappens");
7052 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7061 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7070 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7079 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7083 if (!text.IsEmpty())
7085 text = text.Split(
'|').RandomItem();
7086 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7088 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7090 text =
"(" + text +
")";
7092 text = text.Replace(
"。)",
")");
7095 return ApplyTone(text, stripPun);
7101 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7104 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7110 string[] array = _tones.IsEmpty(
"").Split(
'|');
7111 string key = array[0];
7116 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7120 if (array[0].IsEmpty())
7129 if (array.Length >= 2)
7131 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7133 if (array.Length >= 3)
7135 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7138 text2 = stringBuilder.ToString();
7142 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7153 return text2.StripLastPun();
7168 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7169 if (list.Count != 0)
7171 int mtp = EClass.core.config.test.extraToneMTP
switch
7184 string text = list.RandomItem()[
"id"];
7185 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7192 return ListCraftBonusTraits().Count > 0;
7197 List<Element> list =
new List<Element>();
7198 string[] tag = sourceCard.
tag;
7199 for (
int i = 0; i < tag.Length; i++)
7201 string[] array = tag[i].Split(
'/');
7202 if (!(array[0] !=
"craft_bonus"))
7218 if (dest.
stack !=
null)
7222 Say(
"stack_thing", t, dest.
stack);
7236 c_idBacker = row.
id;
7242 chara.hostility = hostility2;
7248 Chara.idFaith = row.
deity.ToLowerInvariant();
7253 if (
id ==
"putty_snow")
7266 if (c_idBacker == 164)
7279 c_textureData = GetPaintData();
7289 Sprite sprite = GetSprite();
7290 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7291 int num = sprite.texture.width * 2;
7292 int num2 = sprite.texture.height * 2;
7293 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7294 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7295 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7296 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7297 texture2D2.SetPixels(pixels);
7299 byte[] result = texture2D2.EncodeToJPG();
7300 UnityEngine.Object.Destroy(texture2D);
7301 UnityEngine.Object.Destroy(texture2D2);
7307 if ((
bool)_paintSprite)
7309 UnityEngine.Object.Destroy(_paintSprite.texture);
7310 UnityEngine.Object.Destroy(_paintSprite);
7311 _paintSprite =
null;
7319 byte[] data = c_textureData;
7320 Texture2D texture2D =
new Texture2D(1, 1);
7321 texture2D.LoadImage(data);
7322 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7326 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7329 return _paintSprite;
7334 if (!(GetRestrainer() ==
null || force))
7338 isRestrained =
false;
7339 Say(
"unrestrained",
this);
7350 if (c_rescueState ==
RescueState.WaitingForRescue)
7364 c.DoHostileAction(
item, immediate:
true);
7391 result = row.value * mat.value / 100;
7428 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7429 if (
id ==
"plat" && !sell)
7440 num2 += (float)c_priceCopy * 0.2f;
7441 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7445 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7447 if (IsFood && !
material.tag.Contains(
"food"))
7452 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7470 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7472 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7474 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7475 if (IsEquipmentOrRanged)
7480 num4 += value.
source.value;
7482 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7483 if (rarity >=
Rarity.Legendary)
7485 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7493 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7495 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)))));
7499 num2 *= (float)(tier + 1);
7506 if (priceType ==
PriceType.CopyShop && sell)
7512 if (
id ==
"littleball")
7519 if (
id ==
"crimale2")
7527 case "ticket_fortune":
7546 case "hammer_strip":
7576 case "diary_sister":
7580 case "diary_catsister":
7582 case "container_magic":
7584 case "wrench_tent_elec":
7586 case "wrench_tent_soil":
7588 case "wrench_tent_seabed":
7592 case "wrench_storage":
7594 case "wrench_fridge":
7596 case "wrench_extend_v":
7598 case "wrench_extend_h":
7604 case "hammer_garokk":
7606 case "scroll_random":
7620 if (!sell &&
id ==
"casino_coin")
7624 int value = GetValue(priceType, sell);
7634 Trait trait = this.trait;
7639 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7644 p *= 1f + 0.5f * (float)c_containerSize;
7647 if (c_priceFix != 0)
7649 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7659 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7670 if (!sell && category.
id ==
"spellbook")
7674 bool flag = priceType ==
PriceType.CopyShop;
7675 int num = ((!flag) ? 1 : 5);
7676 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7677 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7678 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7683 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7685 p *= 0.20000000298023224;
7688 p *= 0.20000000298023224;
7691 p *= 0.20000000298023224;
7695 p *= 0.20000000298023224;
7701 if ((uint)(priceType - 1) <= 1u)
7713 if (
id ==
"rod_wish")
7715 p *= (sell ? 0.01f : 50f);
7730 p *= 0.20000000298023224;
7734 p *= 0.10000000149011612;
7737 p *= 0.0020000000949949026;
7740 p *= 0.00019999999494757503;
7743 p *= 0.004999999888241291;
7754 p *= (flag ? 1.25f : 0.3f);
7758 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7762 p *= (flag ? 0.9f : 0.5f);
7774 p *= 1f + 0.2f * (float)c.Evalue(1406);
7787 p *= 1.100000023841858;
7821 else if (category.
IsChildOf(
"furniture"))
7841 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7848 p = ((!sell) ? 1 : 0);
7856 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7858 else if (p > 10000.0)
7860 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7862 else if (p > 1000.0)
7864 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7868 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7872 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7880 if (p > (
double)(sell ? 500000000 : 1000000000))
7893 return Name + GetExtraName();
7910 ForeachPoint(delegate(
Point p,
bool main)
7912 int num2 = DistMulti(p, c);
7920 return DistMulti(pos, c);
7952 isCensored = enable;
7962 if (isDeconstructing != deconstruct)
7972 isDeconstructing = deconstruct;
7986 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7989 sortVal = -GetPrice(
currency) * 1000;
7992 sortVal = -Num * 1000;
7995 sortVal = category.sortVal * 1000;
7998 sortVal = -ChildrenAndSelfWeight * 1000;
8001 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8004 sortVal = -GetPrice(
currency) * 1000;
8007 sortVal = sourceCard._index * 1000;
8017 num =
id.CompareTo(c.
id);
8037 num = encLV - c.
encLV;
8056 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8074 action(pos, arg2:
true);
8088 SE.Play(
"pop_paper");
8118 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8131 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()
static void PublishEvent(string eventId, object data=null)
virtual ConditionType Type
static int GetColorInt(ref Color matColor, int p)
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
Vector3 GetThingPosition(Card tg, Point p)
void SetPortrait(Chara c)
virtual void RefreshSprite()
static void SetRarity(Rarity q=Rarity.Normal)
static CardBlueprint current
static void Set(CardBlueprint _bp=null)
static CardBlueprint _Default
GlobalCharaList globalCharas
void ShowEmo(Emo emo, float duration=0f)
void PlayAnime(AnimeID id, bool force)
override void Draw(RenderParam p)
virtual void SetOwner(Card c)
virtual void SetFirst(bool first, Vector3 pos)
void SetCensored(bool enable)
int CountRune(bool countFree=true)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
virtual string AliasMaterialOnCreate
virtual string GetName(NameStyle style, int num=-1)
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
virtual string GetHoverText()
void Teleport(Point point, bool silent=false, bool force=false)
virtual string GetExtraName()
ContainerUpgrade c_containerUpgrade
void PurgeDuplicateArtifact(Thing af)
void RemoveEditorTag(EditorTag tag)
void ApplySocket(int id, int lv, Card mod=null)
SocketData AddRune(Card rune)
bool CanAddRune(TraitMod mod)
void Say(string lang, Card c1, Card c2, string ref1=null, string ref2=null)
virtual void ApplyMaterialElements(bool remove)
virtual void OnSimulateHour(VirtualDate date)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
void SetCensored(bool enable)
ElementContainerCard elements
void _OnDeserialized(StreamingContext context)
bool IsRestrainedResident
SourceBacker.Row sourceBacker
bool TryReserve(AIAct act)
Hostility c_originalHostility
bool IsExcludeFromCraft(Recipe.Ingredient ing)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
void AddBlood(int a=1, int id=-1)
void SetRandomLightColors()
CardRenderer HostRenderer
void OnChildNumChange(Card c)
int Evalue(int ele, bool ignoreGlobalElement)
bool IsStackable(Thing tg)
bool HasElement(string id, int req=1)
void Explode(Point p, Card origin)
SourceMaterial.Row DyeMat
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
void MakeRefFrom(Card c1, Card c2=null, bool simple=false)
Card MakeRefFrom(string id)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
void DamageHP(long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
int GetCurrency(string id="money")
void ForeachPoint(Action< Point, bool > action)
void Dye(SourceMaterial.Row mat)
virtual bool IsPCPartyMinion
string c_idSpriteReplacer
SourceMaterial.Row _material
bool HasElement(int ele, int req)
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
void ModExpParty(int ele, int a)
bool HasTalk(string idTopic)
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
void DecayNatural(int hour=1)
bool IsInMutterDistance(int d=10)
virtual void OnCreate(int genLv)
virtual void LookAt(Card c)
void RenderMarker(Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
virtual long ApplyProtection(long dmg, int mod=100)
void MakeFoodRef(Card c1, Card c2=null)
MoveResult TryMoveFrom(Point p)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
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)
virtual MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
void ModNum(int a, bool notify=true)
void Kick(Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
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)
ConTransmuteMimic mimicry
override bool IsPCFaction
void CalculateMaxStamina()
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
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 RevealMimicry(Card c, bool surprise)
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
static long GetResistDamage(long dmg, int v, int power=0)
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
void ModExp(int ele, int a)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
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 Religion GetArtifactDeity(string id)
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(bool snow=false)
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
long GetCurrency(string id, ref long sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
virtual int SightRadiusBonus
Chara SpawnMob(string id, Point pos=null)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)