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>();
3225 if (
item.IsPCFactionOrMinion)
3228 if (list2.Count != 0)
3230 foreach (
Thing item2
in list2)
3240 foreach (
Chara item3
in list)
3247 if (list3.Count == 0)
3251 foreach (
Thing item4
in list3)
3253 Msg.
Say(
"destroyed_inv_", item4, item3);
3261 for (
int num =
things.Count - 1; num >= 0; num--)
3272 rootCard.Chara.held =
null;
3278 instance.selectedButton.card =
null;
3281 ActionMode.AdvOrRegion.updatePlans =
true;
3298 if (thing.
invY == 1)
3300 WidgetCurrentTool.dirty =
true;
3304 if (thing.
props !=
null)
3312 WidgetHotbar.dirtyCurrentItem =
true;
3313 thing.parent =
null;
3318 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3325 thing.parent =
null;
3334 return EClass.ui.layers.Count > 0;
3356 to.c_isImportant =
true;
3381 return card.GetRootCard();
3408 thing.encLV =
encLV;
3409 thing.decay =
decay;
3412 foreach (KeyValuePair<int, int>
item in mapInt)
3416 foreach (KeyValuePair<int, string> item2
in mapStr)
3418 thing.
mapStr[item2.Key] = item2.Value;
3424 thing.sockets = IO.DeepCopy(
sockets);
3440 ModNum(-a, notify:
false);
3452 return this as
Thing;
3455 return this as
Thing;
3461 return this as
Thing;
3464 public void ModNum(
int a,
bool notify =
true)
3503 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3509 for (
int i = 0; i <
sockets.Count; i++)
3527 for (
int i = 0; i <
sockets.Count; i++)
3533 int ele = num / 1000;
3534 int num2 = num % 1000;
3629 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3635 string encSlot = source.
encSlot;
3636 if (encSlot ==
null || encSlot.Length != 0)
3649 string[] array = source.
encSlot.Split(
',');
3650 foreach (
string key
in array)
3698 if (this.placeState == newState)
3704 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3716 float num2 = (
fy = 0f);
3727 this.placeState = newState;
3735 this.placeState = newState;
3790 num = num * (100 +
Quality) / 100;
3827 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3874 public bool TryPay(
int a,
string id =
"money")
3881 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3885 if (
IsPC && !(
id ==
"ration"))
3905 Say(
"spellbookCrumble",
this);
3914 if (
id ==
"influence")
3926 if (
id ==
"influence")
3957 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
3959 if (num > 100000000)
3991 int num =
PV + orCreateElement.Value +
DEX / 10;
3998 num2 = num3 / 10 + 1;
3999 sides = num3 / num2 + 1;
4001 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4003 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4004 dmg -= num4 * mod / 100;
4014 DamageHP(dmg, 0, 0, attackSource, origin);
4023 bool flag = originalTarget !=
null;
4024 Action onEvade =
null;
4033 Say(
"wall_bond", chara3,
this);
4042 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4048 int num = chara4.
Evalue(1241);
4049 int num2 = chara4.
Evalue(438);
4052 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4061 if (origin !=
null && origin.HasElement(1208))
4063 switch (attackSource)
4066 dmg = dmg * 130 / 100;
4067 eleP = eleP * 150 / 100;
4070 dmg = dmg * 120 / 100;
4071 eleP = eleP * 150 / 100;
4076 if (ele == 0 || ele == 926)
4081 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4087 if (attackSource !=
AttackSource.Condition && showEffect)
4097 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4101 if (origin.HasElement(1247))
4106 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4110 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4115 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4116 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4123 if (chara2 !=
null && chara2.
isWet)
4132 if (chara !=
null && chara.
isWet)
4134 dmg = dmg * 150 / 100;
4140 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4148 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4150 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4159 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4164 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4166 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4173 dmg = dmg * 90 / 100;
4177 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4181 dmg = dmg * 90 / 100;
4200 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4204 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4209 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4211 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4213 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4221 int num7 =
MaxHP / 10;
4222 long num8 = dmg - num7;
4223 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4239 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4250 if (hp < 0 && Chara.mana.value >= 0)
4266 Chara.mana.value -= (int)dmg;
4283 float ratio = (float)dmg / (
float)
MaxHP;
4294 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4296 aI_PracticeDummy.hit++;
4297 aI_PracticeDummy.totalDamage += dmg;
4340 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4349 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4370 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4372 EClass.player.invlunerable =
true;
4411 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4418 text =
"dead_" + e.
source.alias;
4422 text =
"dead_attack";
4430 text =
"kill_" + e.source.alias;
4434 text =
"kill_attack";
4436 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4444 Say(
"reboot",
this);
4451 if (HasCondition<ConRebirth>())
4453 Say(
"rebirth",
this);
4465 Msg.alwaysVisible =
true;
4466 Msg.
Say(
"layhand", chara5,
this);
4467 Msg.
Say(
"pray_heal",
this);
4477 if (zoneInstanceBout !=
null)
4509 Die(e, origin, attackSource, originalTarget);
4515 string text2 =
new int[18]
4517 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4518 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4519 }.RandomItem().ToString();
4522 text2 =
"casino_coin";
4526 text2 =
"scratchcard";
4554 if (origin !=
null && origin.isChara)
4576 if (origin.GetInt(106) == 0)
4578 origin.Chara.TalkTopic(
"kill");
4583 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4585 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4589 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4590 if (num9 >= (
float)num13)
4594 Say(
"dmg_" + e.source.alias,
this);
4598 Say(
"dmg" + num9,
this);
4613 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4617 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4621 int num14 = origin.Dist(
this);
4625 if (
id ==
"hedgehog_ether")
4629 Say(
"reflect_thorne",
this, origin);
4630 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4635 Say(
"reflect_acid",
this, origin);
4636 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4648 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4659 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4669 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4675 Condition.ignoreEffect =
true;
4677 Condition.ignoreEffect =
false;
4681 float num16 = (float)
hp / (
float)
MaxHP;
4688 PlaySound(
"heartbeat", 1f - num16 * 2f);
4721 EClass.player.forceTalk =
true;
4723 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4734 void EvadeDeath(Action action)
4739 Chara.mana.value = 0;
4753 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4755 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4756 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4759 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4760 origin.Chara.stamina.Mod(num17);
4766 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4768 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4769 origin.Chara.mana.Mod(num18);
4775 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4777 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4778 origin.Chara.mana.Mod(num19);
4795 bool hostile =
false;
4799 if (Chance(30 + eleP / 5, 100))
4801 MarkHostile().AddCondition<
ConBurning>(eleP);
4807 if (Chance(30 + eleP / 10, 100))
4812 else if (Chance(50 + eleP / 10, 100))
4818 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4824 if (Chance(30 + eleP / 5, 100))
4826 MarkHostile().AddCondition<
ConPoison>(eleP);
4830 if (Chance(30 + eleP / 5, 100))
4837 if (Chance(30 + eleP / 5, 100))
4846 if (Chance(30 + eleP / 5, 100))
4851 else if (Chance(30 + eleP / 5, 100))
4857 if (Chance(50 + eleP / 10, 100))
4865 if (Chance(30 + eleP / 5, 100))
4884 if (Chance(5 + eleP / 25, 40))
4888 if (Chance(5 + eleP / 25, 40))
4892 if (Chance(5 + eleP / 25, 40))
4896 if (Chance(5 + eleP / 25, 40))
4898 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4900 if (Chance(5 + eleP / 25, 40))
4904 if (Chance(5 + eleP / 25, 40))
4908 if (Chance(30 + eleP / 10, 100))
4914 if (Chance(50 + eleP / 10, 100))
4916 MarkHostile().AddCondition<
ConBleed>(eleP);
4920 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4933 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4937 static bool Chance(
int a,
int max)
4939 return Mathf.Min(a, max) >
EClass.
rnd(100);
4950 Card rootCard = GetRootCard();
4952 if (_pos !=
null && !_pos.
IsValid)
4963 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
4964 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
4966 text += e.source.alias;
4970 Msg.
Say(text,
this, rootCard);
4975 Msg.
Say(
"destroyed",
this);
4980 things.ForeachReverse(delegate(
Thing t)
4989 if (e !=
null && _pos !=
null && e.id == 21)
4995 Explode(pos, origin);
5003 origin = origin?.Chara,
5005 aliasEle =
"eleImpact"
5011 PlaySound(
material.GetSoundDead(sourceCard));
5019 Debug.Log(Name +
" is already destroyed.");
5030 Chara.isDead =
true;
5048 for (
int num = things.Count - 1; num >= 0; num--)
5050 things[num].Destroy();
5057 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5063 List<Card> list =
new List<Card>();
5064 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5067 if (this.rarity >=
Rarity.Legendary)
5100 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5112 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5116 if (flag2 && !isUserZone)
5119 bool num2 = text ==
"_meat";
5131 text =
"meat_marble";
5134 if (thing3.
source._origin ==
"meat")
5148 if (!IsPCFaction && !isUserZone)
5150 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5152 string[] array = item2.
Split(
'/');
5153 int num4 = array[1].ToInt();
5202 if (!isBackerContent && !flag)
5238 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5248 if (text2 ==
"big_daddy" || text2 ==
"santa")
5256 List<Thing> list2 =
new List<Thing>();
5257 foreach (
Thing thing4
in things)
5283 if (num5 > 0 && list2.Count > 0)
5286 for (
int j = 0; j < list2.Count && j < num5; j++)
5292 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5295 foreach (
Card item3
in list)
5304 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5309 for (
int k = 0; k < num5; k++)
5332 foreach (
Thing thing5
in things)
5334 if (thing5.
GetInt(116) != 0)
5339 Point nearestPoint = GetRootCard().pos;
5344 foreach (
Card item4
in list)
5350 item4.isHidden =
false;
5407 case "egg_fertilized":
5412 string text =
"c_wilds";
5413 if (
id ==
"_meat" ||
id ==
"meat_marble")
5421 for (
int i = 0; i < 20; i++)
5424 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5434 if (crafter !=
null && crafter.id ==
"big_sister")
5436 cardRow = crafter.source;
5441 if (c_idRefCard.IsEmpty())
5443 MakeRefFrom(cardRow.
model);
5448 MakeFoodFrom(cardRow.
model);
5450 return this as
Thing;
5456 return this as
Thing;
5473 int num = race.
food[0].ToInt();
5474 bool flag =
id ==
"meat_marble";
5476 bool flag2 = category.
IsChildOf(
"meat");
5488 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5491 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5493 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5497 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5515 foreach (
Element value
in c.elements.dict.Values)
5517 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5522 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5523 foreach (KeyValuePair<int, int>
item in race.elementMap)
5527 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5530 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5531 for (
int i = 0; i < num2 && i < list.Count; i++)
5533 Tuple<int, int> tuple = list[i];
5534 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5536 if (c.Chara.IsUndead)
5540 isWeightChanged =
true;
5541 c_weight = race.height * 4 + 100;
5542 c_idMainElement = c.c_idMainElement;
5544 int num3 = c.LV - c.sourceCard.LV;
5550 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5554 if (flag2 && c.IsPCFaction && c.IsUnique)
5569 if (IsIgnoreName(
card))
5573 if (IsIgnoreName(card2))
5577 if (
card ==
null && card2 !=
null)
5584 MakeRefFrom(
card, card2);
5585 if (
card.c_idRefCard !=
null)
5587 c_idRefCard =
card.c_idRefCard;
5588 c_altName = TryGetFoodName(
card);
5593 c_altName2 = TryGetFoodName(card2);
5596 static bool IsIgnoreName(
Card c)
5626 if (!row.aka.IsEmpty())
5628 if (row.name ==
"*r" && row.aka ==
"*r")
5630 return "corpseGeneral".lang();
5632 if (row.name ==
"*r")
5634 return row.GetText(
"aka");
5637 return row.GetName();
5642 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5658 c_idRefCard = c1.
id;
5662 c_idRefCard2 = c2.id;
5663 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5665 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5679 thing.c_idMainElement = c_idMainElement;
5688 return GiveBirth(thing, effect);
5706 int num2 = LV - sourceCard.
LV;
5711 if (num2 >= 10 && !HasElement(1290))
5719 return GiveBirth(thing, effect);
5725 EClass.player.forceTalk =
true;
5726 card.Talk(
"giveBirth");
5730 card.pos.PlayEffect(
"revive");
5731 card.pos.PlaySound(
"egg");
5788 SayNothingHappans();
5791 PlayEffect(
"teleport");
5794 Say(
"antiTeleport",
this);
5795 PlaySound(
"gravity");
5800 PlaySound(
"teleport");
5801 Say(
"teleported",
this);
5810 if (chara.
enemy ==
this)
5821 EClass.player.haltMove =
true;
5823 PlayEffect(
"teleport", useRenderPos:
false);
5830 PlayEffect(
"ripple");
5831 PlaySound(
"Footstep/water");
5847 return elements.
Value(ele) >= req;
5862 if (HasElement(764))
5866 if (HasElement(759))
5870 if (HasElement(703))
5874 if (HasElement(758))
5878 if (HasElement(704))
5896 for (
int i = 0; i < a; i++)
5907 shared.color = 11010048f;
5908 shared.liquidLv = 0;
5910 SetRenderParam(shared);
5930 isDyed = mat !=
null;
5931 c_dyeMat = mat?.id ?? 0;
5943 else if (isElemental)
5979 int num = EClass.game.seed + refVal;
5980 num +=
id[0] % 10000;
5983 num +=
id[1] % 1000;
5986 num +=
id[2] % 1000;
5989 num +=
id[3] % 1000;
5992 num +=
id[4] % 1000;
6001 return ref _randColor;
6018 public void SetImage(Image image,
int dir,
int idSkin = 0)
6020 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6030 Sprite sprite = GetSprite();
6031 if (!c_idSpriteReplacer.IsEmpty())
6034 if (spriteReplacer !=
null)
6038 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6042 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6045 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6047 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6051 renderer.
ShowEmo(_emo, duration);
6059 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6064 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6069 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6074 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6077 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6079 Card rootCard = GetRootCard();
6086 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6111 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6117 Card rootCard = GetRootCard();
6121 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6129 Card rootCard = GetRootCard();
6152 public virtual void Rotate(
bool reverse =
false)
6155 if (sourceCard.
tiles.Length > 4)
6157 num = sourceCard.
tiles.Length;
6215 fx = fx - vector.x + thingPosition.x;
6216 fy = fy - vector.y + thingPosition.y;
6220 float num2 = (fy = 0f);
6244 renderParam.x = v.x;
6245 renderParam.y = v.y;
6246 renderParam.z = v.z;
6248 v.x = renderParam.
x;
6249 v.y = renderParam.
y;
6250 v.z = renderParam.
z;
6264 v.z += thingPosition.z;
6271 if (useCurrentPosition)
6286 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6297 EClass.player.lightRadius = 1;
6305 return GetLightRadius() > 0;
6313 return 0.01f * LightData.color.a * 256f * 1.12f;
6315 if (IsPCFaction && !IsPC)
6381 num2 = traitLightSource.LightRadius;
6386 if (lightRadius > 0)
6388 if (lightRadius > num2)
6408 int radius = GetLightRadius();
6413 float power = GetLightPower();
6440 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6451 int num = (trait.UseLightColor ? c_lightColor : 0);
6454 fov.r = (byte)(num / 1024);
6455 fov.g = (byte)(num % 1024 / 32);
6456 fov.b = (byte)(num % 32);
6497 if (fov !=
null && fov.
lastPoints.Count != 0)
6516 things.ForeachReverse(delegate(
Thing t)
6520 if (sourceCard.
_origin ==
"dish")
6528 else if (!isChara && trait.
Decay != 0)
6530 Decay(trait.
Decay * hour);
6548 int num2 = MaxDecay / 4 * 3;
6553 num =
card.trait.DecaySpeedChild;
6555 num = num * trait.DecaySpeed / 100;
6556 int num3 = Evalue(405);
6559 num = num * (100 - num3 * 2) / 100;
6571 if (decay + a > MaxDecay)
6573 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6582 card.AddCard(thing);
6583 if (!IsParentLocked())
6585 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6594 else if (GetRootCard() ==
EClass.
pc)
6596 if (!IsParentLocked())
6608 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6610 if (!IsParentLocked())
6617 bool IsParentLocked()
6619 if (parent is
Thing)
6621 return (parent as
Thing).c_lockLv > 0;
6629 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6632 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6636 EClass.player.forceTalk =
false;
6640 EClass.player.forceTalk =
false;
6641 if (!isSynced && !forceSync)
6646 GameLang.refDrama1 = ref1;
6647 GameLang.refDrama2 = ref2;
6648 string text = GetTalkText(idTopic, stripPun:
true);
6649 if (HasElement(1232) && idTopic !=
"baby")
6656 if (!(text2 ==
"adv_gaki"))
6658 if (text2 ==
"corgon")
6668 TalkRaw(text, ref1, ref2, forceSync);
6671 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6673 if ((!isSynced && !forceSync) || text.IsEmpty())
6680 text = text.Replace(
"#1", ref1);
6684 text = text.Replace(
"#2", ref2);
6686 HostRenderer.Say(ApplyNewLine(text));
6687 bool flag = text.StartsWith(
"*");
6691 text = text.Bracket();
6693 Msg.
Say(text.Replace(
"&",
""));
6698 if (text.Contains(
"&"))
6700 string text2 =
"_comma".lang();
6701 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6702 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6703 text = text.Replace(
"&", Environment.NewLine ??
"");
6708 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6710 if (isSynced && !text.IsEmpty())
6714 text = text.Replace(
"#1", ref1);
6718 text = text.Replace(
"#2", ref2);
6720 HostRenderer.Say(text);
6726 Say(
"nothingHappens");
6729 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6738 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6747 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6756 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6760 if (!text.IsEmpty())
6762 text = text.Split(
'|').RandomItem();
6763 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6765 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6767 text =
"(" + text +
")";
6769 text = text.Replace(
"。)",
")");
6772 return ApplyTone(text, stripPun);
6778 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6781 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6787 string[] array = _tones.IsEmpty(
"").Split(
'|');
6788 string key = array[0];
6793 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6797 if (array[0].IsEmpty())
6806 if (array.Length >= 2)
6808 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6810 if (array.Length >= 3)
6812 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6815 text2 = stringBuilder.ToString();
6819 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6830 return text2.StripLastPun();
6845 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6846 if (list.Count != 0)
6848 int mtp = EClass.core.config.test.extraToneMTP
switch
6861 string text = list.RandomItem()[
"id"];
6862 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6869 return ListCraftBonusTraits().Count > 0;
6874 List<Element> list =
new List<Element>();
6875 string[] tag = sourceCard.
tag;
6876 for (
int i = 0; i < tag.Length; i++)
6878 string[] array = tag[i].Split(
'/');
6879 if (!(array[0] !=
"craft_bonus"))
6895 if (dest.
stack !=
null)
6899 Say(
"stack_thing", t, dest.
stack);
6907 ChangeRarity(
Rarity.Normal);
6913 c_idBacker = row.
id;
6919 chara.hostility = hostility2;
6925 Chara.idFaith = row.
deity.ToLowerInvariant();
6930 if (
id ==
"putty_snow")
6943 if (c_idBacker == 164)
6956 c_textureData = GetPaintData();
6966 Sprite sprite = GetSprite();
6967 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
6968 int num = sprite.texture.width * 2;
6969 int num2 = sprite.texture.height * 2;
6970 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
6971 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
6972 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
6973 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
6974 texture2D2.SetPixels(pixels);
6976 byte[] result = texture2D2.EncodeToJPG();
6977 UnityEngine.Object.Destroy(texture2D);
6978 UnityEngine.Object.Destroy(texture2D2);
6984 if ((
bool)_paintSprite)
6986 UnityEngine.Object.Destroy(_paintSprite.texture);
6987 UnityEngine.Object.Destroy(_paintSprite);
6988 _paintSprite =
null;
6996 byte[] data = c_textureData;
6997 Texture2D texture2D =
new Texture2D(1, 1);
6998 texture2D.LoadImage(data);
6999 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7003 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7006 return _paintSprite;
7011 if (!(GetRestrainer() ==
null || force))
7015 isRestrained =
false;
7016 Say(
"unrestrained",
this);
7027 if (c_rescueState ==
RescueState.WaitingForRescue)
7041 c.DoHostileAction(
item, immediate:
true);
7068 result = row.value * mat.value / 100;
7105 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7106 if (
id ==
"plat" && !sell)
7117 num2 += (float)c_priceCopy * 0.2f;
7118 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7122 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7124 if (IsFood && !
material.tag.Contains(
"food"))
7129 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7147 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7149 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7151 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7152 if (IsEquipmentOrRanged)
7157 num4 += value.
source.value;
7159 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7160 if (rarity >=
Rarity.Legendary)
7162 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7170 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7172 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)))));
7176 num2 *= (float)(tier + 1);
7183 if (priceType ==
PriceType.CopyShop && sell)
7189 if (
id ==
"littleball")
7196 if (
id ==
"crimale2")
7204 case "ticket_fortune":
7223 case "hammer_strip":
7232 if (!(text ==
"lucky_coin"))
7234 if (!(text ==
"book_skill"))
7255 case "diary_sister":
7259 case "diary_catsister":
7261 case "container_magic":
7263 case "wrench_tent_elec":
7265 case "wrench_tent_soil":
7267 case "wrench_tent_seabed":
7271 case "wrench_storage":
7273 case "wrench_fridge":
7275 case "wrench_extend_v":
7277 case "wrench_extend_h":
7283 case "scroll_random":
7297 if (!sell &&
id ==
"casino_coin")
7301 int value = GetValue(priceType, sell);
7311 Trait trait = this.trait;
7316 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7321 p *= 1f + 0.5f * (float)c_containerSize;
7324 if (c_priceFix != 0)
7326 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7336 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7347 if (!sell && category.
id ==
"spellbook")
7351 bool flag = priceType ==
PriceType.CopyShop;
7352 int num = ((!flag) ? 1 : 5);
7353 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7354 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7355 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7360 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7362 p *= 0.20000000298023224;
7365 p *= 0.20000000298023224;
7368 p *= 0.20000000298023224;
7372 p *= 0.20000000298023224;
7378 if ((uint)(priceType - 1) <= 1u)
7390 if (
id ==
"rod_wish")
7392 p *= (sell ? 0.01f : 50f);
7407 p *= 0.20000000298023224;
7411 p *= 0.10000000149011612;
7414 p *= 0.0020000000949949026;
7417 p *= 0.00019999999494757503;
7420 p *= 0.004999999888241291;
7431 p *= (flag ? 1.25f : 0.3f);
7435 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7439 p *= (flag ? 0.9f : 0.5f);
7451 p *= 1f + 0.2f * (float)c.Evalue(1406);
7464 p *= 1.100000023841858;
7498 else if (category.
IsChildOf(
"furniture"))
7518 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7525 p = ((!sell) ? 1 : 0);
7533 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7535 else if (p > 10000.0)
7537 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7539 else if (p > 1000.0)
7541 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7545 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7549 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7557 if (p > (
double)(sell ? 500000000 : 1000000000))
7570 return Name + GetExtraName();
7587 ForeachPoint(delegate(
Point p,
bool main)
7589 int num2 = DistMulti(p, c);
7597 return DistMulti(pos, c);
7629 isCensored = enable;
7639 if (isDeconstructing != deconstruct)
7649 isDeconstructing = deconstruct;
7663 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7666 sortVal = -GetPrice(
currency) * 1000;
7669 sortVal = -Num * 1000;
7672 sortVal = category.sortVal * 1000;
7675 sortVal = -ChildrenAndSelfWeight * 1000;
7678 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7681 sortVal = -GetPrice(
currency) * 1000;
7684 sortVal = sourceCard._index * 1000;
7694 num =
id.CompareTo(c.
id);
7714 num = encLV - c.
encLV;
7733 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7751 action(pos, arg2:
true);
7765 SE.Play(
"pop_paper");
7790 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7803 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)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
int GetCurrency(string id, ref int sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)