2using System.Collections.Generic;
4using System.Runtime.Serialization;
31 [JsonProperty(PropertyName =
"A")]
32 public int[]
_ints =
new int[30];
34 [JsonProperty(PropertyName =
"B")]
35 public string id =
"";
37 [JsonProperty(PropertyName =
"C")]
40 [JsonProperty(PropertyName =
"D")]
43 [JsonProperty(PropertyName =
"E")]
46 [JsonProperty(PropertyName =
"SC")]
257 return 0.001f * (float)
_ints[15];
261 _ints[15] = (int)(value * 1000f);
269 return 0.001f * (float)
_ints[16];
273 _ints[16] = (int)(value * 1000f);
285 _ints[17] = (int)value;
297 _ints[18] = (int)value;
321 _ints[19] = (int)value * 100;
1019 SetInt(103, value ? 1 : 0);
1031 SetInt(109, value ? 1 : 0);
1043 SetInt(63, value ? 1 : 0);
1055 SetInt(64, value ? 1 : 0);
1067 SetInt(120, value ? 1 : 0);
1079 SetInt(121, value ? 1 : 0);
1091 SetInt(122, value ? 1 : 0);
1776 return GetObj<UniqueData>(6);
1788 return GetObj<Thing>(9);
1800 return GetObj<List<SocketData>>(17);
1812 return GetObj<Thing>(10);
1836 return GetObj<CharaUpgrade>(11);
1848 return GetObj<CharaGenes>(15);
1860 return GetObj<List<int>>(16);
1884 return GetObj<DNA>(14);
1896 return GetObj<CharaList>(13);
1908 return GetObj<MixedFoodData>(18);
1920 return GetObj<Thing>(19);
1932 return GetObj<byte[]>(4);
2031 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2119 if (
Tiles.Length == 1)
2121 return dir % 2 == 1;
2183 return id ==
"grass";
2315 if (
Tiles.Length < 3)
2389 return bio.gender == 2;
2541 if (
card.isSale || !
card.trait.CanUseContent)
2546 if (windowSaveData !=
null)
2558 EClass.player.wasDirtyWeight =
true;
2576 public int Evalue(
int ele,
bool ignoreGlobalElement)
2602 return c_editorTags?.Contains(tag.ToString()) ??
false;
2635 int num2 =
item.Value;
2695 for (
int i = 0; i <
sockets.Count; i++)
2713 thing.parent =
this;
2743 CardBlueprint.current =
null;
2794 if (
id ==
"microchip")
2875 EClass._zone.Boss =
Chara;
2917 int num = elementContainer.Value(value.
id);
2969 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2973 return num * (100 +
Evalue(1237) * 30) / 100;
3004 Say(
"dingExp",
this);
3017 int num = Mathf.Min(1 +
LV / 5, 20);
3018 for (
int i = 0; i < num; i++)
3020 if (
Evalue(1644) < i + 1)
3060 if (rootCard !=
null && rootCard.
IsPC)
3115 Debug.LogWarning(
"already child:" + t);
3120 Debug.Log(
"already in the list" + t);
3135 t.ignoreAutoPick =
false;
3179 if (rootCard !=
null && rootCard.
IsPC)
3188 t.isNPCProperty =
false;
3202 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3205 void TryAdd(
Thing a)
3207 if (!ings.Contains(a.
id))
3225 List<Chara> list =
new List<Chara>();
3241 if (
item.IsPCFactionOrMinion)
3244 if (list2.Count != 0)
3246 foreach (
Thing item2
in list2)
3256 foreach (
Chara item3
in list)
3263 if (list3.Count == 0)
3267 foreach (
Thing item4
in list3)
3269 Msg.
Say(
"destroyed_inv_", item4, item3);
3281 List<Chara> list =
new List<Chara>();
3295 if (
item.IsPCFactionOrMinion)
3309 for (
int num =
things.Count - 1; num >= 0; num--)
3320 rootCard.Chara.held =
null;
3326 instance.selectedButton.card =
null;
3329 ActionMode.AdvOrRegion.updatePlans =
true;
3346 if (thing.
invY == 1)
3348 WidgetCurrentTool.dirty =
true;
3352 if (thing.
props !=
null)
3360 WidgetHotbar.dirtyCurrentItem =
true;
3361 thing.parent =
null;
3366 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3373 thing.parent =
null;
3382 return EClass.ui.layers.Count > 0;
3404 to.c_isImportant =
true;
3429 return card.GetRootCard();
3456 thing.encLV =
encLV;
3457 thing.decay =
decay;
3460 foreach (KeyValuePair<int, int>
item in mapInt)
3464 foreach (KeyValuePair<int, string> item2
in mapStr)
3466 thing.
mapStr[item2.Key] = item2.Value;
3472 thing.sockets = IO.DeepCopy(
sockets);
3488 ModNum(-a, notify:
false);
3500 return this as
Thing;
3503 return this as
Thing;
3509 return this as
Thing;
3512 public void ModNum(
int a,
bool notify =
true)
3551 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3557 for (
int i = 0; i <
sockets.Count; i++)
3575 for (
int i = 0; i <
sockets.Count; i++)
3581 int ele = num / 1000;
3582 int num2 = num % 1000;
3677 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3683 string encSlot = source.
encSlot;
3684 if (encSlot ==
null || encSlot.Length != 0)
3697 string[] array = source.
encSlot.Split(
',');
3698 foreach (
string key
in array)
3746 if (this.placeState == newState)
3752 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3764 float num2 = (
fy = 0f);
3775 this.placeState = newState;
3783 this.placeState = newState;
3838 num = num * (100 +
Quality) / 100;
3875 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3922 public bool TryPay(
int a,
string id =
"money")
3929 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3933 if (
IsPC && !(
id ==
"ration"))
3953 Say(
"spellbookCrumble",
this);
3962 if (
id ==
"influence")
3974 if (
id ==
"influence")
4005 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4007 if (num > 100000000)
4039 int num =
PV + orCreateElement.Value +
DEX / 10;
4046 num2 = num3 / 10 + 1;
4047 sides = num3 / num2 + 1;
4049 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4051 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4052 dmg -= num4 * mod / 100;
4062 DamageHP(dmg, 0, 0, attackSource, origin);
4071 bool flag = originalTarget !=
null;
4072 Action onEvade =
null;
4081 Say(
"wall_bond", chara3,
this);
4090 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4096 int num = chara4.
Evalue(1241);
4097 int num2 = chara4.
Evalue(438);
4100 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4109 if (origin !=
null && origin.HasElement(1208))
4111 switch (attackSource)
4114 dmg = dmg * 130 / 100;
4115 eleP = eleP * 150 / 100;
4118 dmg = dmg * 120 / 100;
4119 eleP = eleP * 150 / 100;
4125 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4128 if (ele == 0 || ele == 926)
4133 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4139 if (attackSource !=
AttackSource.Condition && showEffect)
4149 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4153 if (origin.HasElement(1247))
4158 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4162 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4167 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4168 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4175 if (chara2 !=
null && chara2.
isWet)
4184 if (chara !=
null && chara.
isWet)
4186 dmg = dmg * 150 / 100;
4192 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4200 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4202 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4211 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4216 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4218 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4225 dmg = dmg * 90 / 100;
4229 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4233 dmg = dmg * 90 / 100;
4252 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4256 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4261 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4263 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4265 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4273 int num7 =
MaxHP / 10;
4274 long num8 = dmg - num7;
4275 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4291 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4302 if (hp < 0 && Chara.mana.value >= 0)
4318 Chara.mana.value -= (int)dmg;
4335 float ratio = (float)dmg / (
float)
MaxHP;
4346 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4348 aI_PracticeDummy.hit++;
4349 aI_PracticeDummy.totalDamage += dmg;
4392 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4401 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4422 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4424 EClass.player.invlunerable =
true;
4463 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4470 text =
"dead_" + e.
source.alias;
4474 text =
"dead_attack";
4482 text =
"kill_" + e.source.alias;
4486 text =
"kill_attack";
4488 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4496 Say(
"reboot",
this);
4503 if (HasCondition<ConRebirth>())
4505 Say(
"rebirth",
this);
4517 Msg.alwaysVisible =
true;
4518 Msg.
Say(
"layhand", chara5,
this);
4519 Msg.
Say(
"pray_heal",
this);
4529 if (zoneInstanceBout !=
null)
4561 Die(e, origin, attackSource, originalTarget);
4567 string text2 =
new int[18]
4569 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4570 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4571 }.RandomItem().ToString();
4574 text2 =
"casino_coin";
4578 text2 =
"scratchcard";
4606 if (origin !=
null && origin.isChara)
4628 if (origin.GetInt(106) == 0)
4630 origin.Chara.TalkTopic(
"kill");
4635 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4637 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4641 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4642 if (num9 >= (
float)num13)
4646 Say(
"dmg_" + e.source.alias,
this);
4650 Say(
"dmg" + num9,
this);
4665 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4669 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4673 int num14 = origin.Dist(
this);
4677 if (
id ==
"hedgehog_ether")
4681 Say(
"reflect_thorne",
this, origin);
4682 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4687 Say(
"reflect_acid",
this, origin);
4688 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4700 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4711 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4721 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4727 Condition.ignoreEffect =
true;
4729 Condition.ignoreEffect =
false;
4733 float num16 = (float)
hp / (
float)
MaxHP;
4740 PlaySound(
"heartbeat", 1f - num16 * 2f);
4773 EClass.player.forceTalk =
true;
4775 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4786 void EvadeDeath(Action action)
4791 Chara.mana.value = 0;
4805 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4807 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4808 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4811 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4812 origin.Chara.stamina.Mod(num17);
4818 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4820 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4821 origin.Chara.mana.Mod(num18);
4827 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4829 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4830 origin.Chara.mana.Mod(num19);
4847 bool hostile =
false;
4851 if (Chance(30 + eleP / 5, 100))
4853 MarkHostile().AddCondition<
ConBurning>(eleP);
4859 if (Chance(30 + eleP / 10, 100))
4864 else if (Chance(50 + eleP / 10, 100))
4870 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4876 if (Chance(30 + eleP / 5, 100))
4878 MarkHostile().AddCondition<
ConPoison>(eleP);
4882 if (Chance(30 + eleP / 5, 100))
4889 if (Chance(30 + eleP / 5, 100))
4898 if (Chance(30 + eleP / 5, 100))
4903 else if (Chance(30 + eleP / 5, 100))
4909 if (Chance(50 + eleP / 10, 100))
4917 if (Chance(30 + eleP / 5, 100))
4936 if (Chance(5 + eleP / 25, 40))
4940 if (Chance(5 + eleP / 25, 40))
4944 if (Chance(5 + eleP / 25, 40))
4948 if (Chance(5 + eleP / 25, 40))
4950 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4952 if (Chance(5 + eleP / 25, 40))
4956 if (Chance(5 + eleP / 25, 40))
4960 if (Chance(30 + eleP / 10, 100))
4966 if (Chance(50 + eleP / 10, 100))
4968 MarkHostile().AddCondition<
ConBleed>(eleP);
4972 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4985 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4989 static bool Chance(
int a,
int max)
4991 return Mathf.Min(a, max) >
EClass.
rnd(100);
5002 Card rootCard = GetRootCard();
5004 if (_pos !=
null && !_pos.
IsValid)
5015 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5016 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5018 text += e.source.alias;
5022 Msg.
Say(text,
this, rootCard);
5027 Msg.
Say(
"destroyed",
this);
5032 things.ForeachReverse(delegate(
Thing t)
5041 if (e !=
null && _pos !=
null && e.id == 21)
5047 Explode(pos, origin);
5055 origin = origin?.Chara,
5057 aliasEle =
"eleImpact"
5063 PlaySound(
material.GetSoundDead(sourceCard));
5071 Debug.Log(Name +
" is already destroyed.");
5082 Chara.isDead =
true;
5100 for (
int num = things.Count - 1; num >= 0; num--)
5102 things[num].Destroy();
5109 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5115 List<Card> list =
new List<Card>();
5116 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5119 if (this.rarity >=
Rarity.Legendary)
5152 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5164 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5168 if (flag2 && !isUserZone)
5171 bool num2 = text ==
"_meat";
5183 text =
"meat_marble";
5186 if (thing3.
source._origin ==
"meat")
5200 if (!IsPCFaction && !isUserZone)
5202 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5204 string[] array = item2.
Split(
'/');
5205 int num4 = array[1].ToInt();
5254 if (!isBackerContent && !flag)
5290 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5300 if (text2 ==
"big_daddy" || text2 ==
"santa")
5308 List<Thing> list2 =
new List<Thing>();
5309 foreach (
Thing thing4
in things)
5335 if (num5 > 0 && list2.Count > 0)
5338 for (
int j = 0; j < list2.Count && j < num5; j++)
5344 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5347 foreach (
Card item3
in list)
5356 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5361 for (
int k = 0; k < num5; k++)
5384 foreach (
Thing thing5
in things)
5386 if (thing5.
GetInt(116) != 0)
5391 Point nearestPoint = GetRootCard().pos;
5396 foreach (
Card item4
in list)
5402 item4.isHidden =
false;
5459 case "egg_fertilized":
5464 string text =
"c_wilds";
5465 if (
id ==
"_meat" ||
id ==
"meat_marble")
5473 for (
int i = 0; i < 20; i++)
5476 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5486 if (crafter !=
null && crafter.id ==
"big_sister")
5488 cardRow = crafter.source;
5493 if (c_idRefCard.IsEmpty())
5495 MakeRefFrom(cardRow.
model);
5500 MakeFoodFrom(cardRow.
model);
5502 return this as
Thing;
5508 return this as
Thing;
5525 int num = race.
food[0].ToInt();
5526 bool flag =
id ==
"meat_marble";
5528 bool flag2 = category.
IsChildOf(
"meat");
5540 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5543 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5545 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5549 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5567 foreach (
Element value
in c.elements.dict.Values)
5569 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5574 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5575 foreach (KeyValuePair<int, int>
item in race.elementMap)
5579 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5582 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5583 for (
int i = 0; i < num2 && i < list.Count; i++)
5585 Tuple<int, int> tuple = list[i];
5586 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5588 if (c.Chara.IsUndead)
5592 isWeightChanged =
true;
5593 c_weight = race.height * 4 + 100;
5594 c_idMainElement = c.c_idMainElement;
5596 int num3 = c.LV - c.sourceCard.LV;
5602 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5606 if (flag2 && c.IsPCFaction && c.IsUnique)
5621 if (IsIgnoreName(
card))
5625 if (IsIgnoreName(card2))
5629 if (
card ==
null && card2 !=
null)
5636 MakeRefFrom(
card, card2);
5637 if (
card.c_idRefCard !=
null)
5639 c_idRefCard =
card.c_idRefCard;
5640 c_altName = TryGetFoodName(
card);
5645 c_altName2 = TryGetFoodName(card2);
5648 static bool IsIgnoreName(
Card c)
5678 if (!row.aka.IsEmpty())
5680 if (row.name ==
"*r" && row.aka ==
"*r")
5682 return "corpseGeneral".lang();
5684 if (row.name ==
"*r")
5686 return row.GetText(
"aka");
5689 return row.GetName();
5694 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5710 c_idRefCard = c1.
id;
5714 c_idRefCard2 = c2.id;
5715 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5717 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5731 thing.c_idMainElement = c_idMainElement;
5740 return GiveBirth(thing, effect);
5758 int num2 = LV - sourceCard.
LV;
5763 if (num2 >= 10 && !HasElement(1290))
5771 return GiveBirth(thing, effect);
5777 EClass.player.forceTalk =
true;
5778 card.Talk(
"giveBirth");
5782 card.pos.PlayEffect(
"revive");
5783 card.pos.PlaySound(
"egg");
5840 SayNothingHappans();
5843 PlayEffect(
"teleport");
5846 Say(
"antiTeleport",
this);
5847 PlaySound(
"gravity");
5852 PlaySound(
"teleport");
5853 Say(
"teleported",
this);
5862 if (chara.
enemy ==
this)
5873 EClass.player.haltMove =
true;
5875 PlayEffect(
"teleport", useRenderPos:
false);
5882 PlayEffect(
"ripple");
5883 PlaySound(
"Footstep/water");
5899 return elements.
Value(ele) >= req;
5914 if (HasElement(764))
5918 if (HasElement(759))
5922 if (HasElement(703))
5926 if (HasElement(758))
5930 if (HasElement(704))
5948 for (
int i = 0; i < a; i++)
5959 shared.color = 11010048f;
5960 shared.liquidLv = 0;
5962 SetRenderParam(shared);
5982 isDyed = mat !=
null;
5983 c_dyeMat = mat?.id ?? 0;
5995 else if (isElemental)
6031 int num = EClass.game.seed + refVal;
6032 num +=
id[0] % 10000;
6035 num +=
id[1] % 1000;
6038 num +=
id[2] % 1000;
6041 num +=
id[3] % 1000;
6044 num +=
id[4] % 1000;
6053 return ref _randColor;
6070 public void SetImage(Image image,
int dir,
int idSkin = 0)
6072 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6082 Sprite sprite = GetSprite();
6083 if (!c_idSpriteReplacer.IsEmpty())
6086 if (spriteReplacer !=
null)
6090 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6094 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6097 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6099 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6103 renderer.
ShowEmo(_emo, duration);
6111 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6116 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6121 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6126 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6129 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6131 Card rootCard = GetRootCard();
6138 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6163 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6169 Card rootCard = GetRootCard();
6173 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6181 Card rootCard = GetRootCard();
6204 public virtual void Rotate(
bool reverse =
false)
6207 if (sourceCard.
tiles.Length > 4)
6209 num = sourceCard.
tiles.Length;
6267 fx = fx - vector.x + thingPosition.x;
6268 fy = fy - vector.y + thingPosition.y;
6272 float num2 = (fy = 0f);
6296 renderParam.x = v.x;
6297 renderParam.y = v.y;
6298 renderParam.z = v.z;
6300 v.x = renderParam.
x;
6301 v.y = renderParam.
y;
6302 v.z = renderParam.
z;
6316 v.z += thingPosition.z;
6323 if (useCurrentPosition)
6338 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6349 EClass.player.lightRadius = 1;
6357 return GetLightRadius() > 0;
6365 return 0.01f * LightData.color.a * 256f * 1.12f;
6367 if (IsPCFaction && !IsPC)
6433 num2 = traitLightSource.LightRadius;
6438 if (lightRadius > 0)
6440 if (lightRadius > num2)
6460 int radius = GetLightRadius();
6465 float power = GetLightPower();
6492 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6503 int num = (trait.UseLightColor ? c_lightColor : 0);
6506 fov.r = (byte)(num / 1024);
6507 fov.g = (byte)(num % 1024 / 32);
6508 fov.b = (byte)(num % 32);
6549 if (fov !=
null && fov.
lastPoints.Count != 0)
6568 things.ForeachReverse(delegate(
Thing t)
6572 if (sourceCard.
_origin ==
"dish")
6580 else if (!isChara && trait.
Decay != 0)
6582 Decay(trait.
Decay * hour);
6600 int num2 = MaxDecay / 4 * 3;
6605 num =
card.trait.DecaySpeedChild;
6607 num = num * trait.DecaySpeed / 100;
6608 int num3 = Evalue(405);
6611 num = num * (100 - num3 * 2) / 100;
6623 if (decay + a > MaxDecay)
6625 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6634 card.AddCard(thing);
6635 if (!IsParentLocked())
6637 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6646 else if (GetRootCard() ==
EClass.
pc)
6648 if (!IsParentLocked())
6660 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6662 if (!IsParentLocked())
6669 bool IsParentLocked()
6671 if (parent is
Thing)
6673 return (parent as
Thing).c_lockLv > 0;
6681 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6684 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6688 EClass.player.forceTalk =
false;
6692 EClass.player.forceTalk =
false;
6693 if (!isSynced && !forceSync)
6698 GameLang.refDrama1 = ref1;
6699 GameLang.refDrama2 = ref2;
6700 string text = GetTalkText(idTopic, stripPun:
true);
6701 if (HasElement(1232) && idTopic !=
"baby")
6708 if (!(text2 ==
"adv_gaki"))
6710 if (text2 ==
"corgon")
6720 TalkRaw(text, ref1, ref2, forceSync);
6723 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6725 if ((!isSynced && !forceSync) || text.IsEmpty())
6732 text = text.Replace(
"#1", ref1);
6736 text = text.Replace(
"#2", ref2);
6738 HostRenderer.Say(ApplyNewLine(text));
6739 bool flag = text.StartsWith(
"*");
6743 text = text.Bracket();
6745 Msg.
Say(text.Replace(
"&",
""));
6750 if (text.Contains(
"&"))
6752 string text2 =
"_comma".lang();
6753 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6754 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6755 text = text.Replace(
"&", Environment.NewLine ??
"");
6760 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6762 if (isSynced && !text.IsEmpty())
6766 text = text.Replace(
"#1", ref1);
6770 text = text.Replace(
"#2", ref2);
6772 HostRenderer.Say(text);
6778 Say(
"nothingHappens");
6781 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6790 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6799 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6808 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6812 if (!text.IsEmpty())
6814 text = text.Split(
'|').RandomItem();
6815 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6817 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6819 text =
"(" + text +
")";
6821 text = text.Replace(
"。)",
")");
6824 return ApplyTone(text, stripPun);
6830 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6833 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6839 string[] array = _tones.IsEmpty(
"").Split(
'|');
6840 string key = array[0];
6845 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6849 if (array[0].IsEmpty())
6858 if (array.Length >= 2)
6860 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6862 if (array.Length >= 3)
6864 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6867 text2 = stringBuilder.ToString();
6871 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6882 return text2.StripLastPun();
6897 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6898 if (list.Count != 0)
6900 int mtp = EClass.core.config.test.extraToneMTP
switch
6913 string text = list.RandomItem()[
"id"];
6914 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6921 return ListCraftBonusTraits().Count > 0;
6926 List<Element> list =
new List<Element>();
6927 string[] tag = sourceCard.
tag;
6928 for (
int i = 0; i < tag.Length; i++)
6930 string[] array = tag[i].Split(
'/');
6931 if (!(array[0] !=
"craft_bonus"))
6947 if (dest.
stack !=
null)
6951 Say(
"stack_thing", t, dest.
stack);
6959 ChangeRarity(
Rarity.Normal);
6965 c_idBacker = row.
id;
6971 chara.hostility = hostility2;
6977 Chara.idFaith = row.
deity.ToLowerInvariant();
6982 if (
id ==
"putty_snow")
6995 if (c_idBacker == 164)
7008 c_textureData = GetPaintData();
7018 Sprite sprite = GetSprite();
7019 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7020 int num = sprite.texture.width * 2;
7021 int num2 = sprite.texture.height * 2;
7022 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7023 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7024 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7025 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7026 texture2D2.SetPixels(pixels);
7028 byte[] result = texture2D2.EncodeToJPG();
7029 UnityEngine.Object.Destroy(texture2D);
7030 UnityEngine.Object.Destroy(texture2D2);
7036 if ((
bool)_paintSprite)
7038 UnityEngine.Object.Destroy(_paintSprite.texture);
7039 UnityEngine.Object.Destroy(_paintSprite);
7040 _paintSprite =
null;
7048 byte[] data = c_textureData;
7049 Texture2D texture2D =
new Texture2D(1, 1);
7050 texture2D.LoadImage(data);
7051 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7055 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7058 return _paintSprite;
7063 if (!(GetRestrainer() ==
null || force))
7067 isRestrained =
false;
7068 Say(
"unrestrained",
this);
7079 if (c_rescueState ==
RescueState.WaitingForRescue)
7093 c.DoHostileAction(
item, immediate:
true);
7120 result = row.value * mat.value / 100;
7157 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7158 if (
id ==
"plat" && !sell)
7169 num2 += (float)c_priceCopy * 0.2f;
7170 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7174 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7176 if (IsFood && !
material.tag.Contains(
"food"))
7181 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7199 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7201 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7203 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7204 if (IsEquipmentOrRanged)
7209 num4 += value.
source.value;
7211 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7212 if (rarity >=
Rarity.Legendary)
7214 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7222 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7224 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)))));
7228 num2 *= (float)(tier + 1);
7235 if (priceType ==
PriceType.CopyShop && sell)
7241 if (
id ==
"littleball")
7248 if (
id ==
"crimale2")
7256 case "ticket_fortune":
7275 case "hammer_strip":
7284 if (!(text ==
"lucky_coin"))
7286 if (!(text ==
"book_skill"))
7307 case "diary_sister":
7311 case "diary_catsister":
7313 case "container_magic":
7315 case "wrench_tent_elec":
7317 case "wrench_tent_soil":
7319 case "wrench_tent_seabed":
7323 case "wrench_storage":
7325 case "wrench_fridge":
7327 case "wrench_extend_v":
7329 case "wrench_extend_h":
7335 case "scroll_random":
7349 if (!sell &&
id ==
"casino_coin")
7353 int value = GetValue(priceType, sell);
7363 Trait trait = this.trait;
7368 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7373 p *= 1f + 0.5f * (float)c_containerSize;
7376 if (c_priceFix != 0)
7378 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7388 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7399 if (!sell && category.
id ==
"spellbook")
7403 bool flag = priceType ==
PriceType.CopyShop;
7404 int num = ((!flag) ? 1 : 5);
7405 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7406 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7407 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7412 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7414 p *= 0.20000000298023224;
7417 p *= 0.20000000298023224;
7420 p *= 0.20000000298023224;
7424 p *= 0.20000000298023224;
7430 if ((uint)(priceType - 1) <= 1u)
7442 if (
id ==
"rod_wish")
7444 p *= (sell ? 0.01f : 50f);
7459 p *= 0.20000000298023224;
7463 p *= 0.10000000149011612;
7466 p *= 0.0020000000949949026;
7469 p *= 0.00019999999494757503;
7472 p *= 0.004999999888241291;
7483 p *= (flag ? 1.25f : 0.3f);
7487 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7491 p *= (flag ? 0.9f : 0.5f);
7503 p *= 1f + 0.2f * (float)c.Evalue(1406);
7516 p *= 1.100000023841858;
7550 else if (category.
IsChildOf(
"furniture"))
7570 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7577 p = ((!sell) ? 1 : 0);
7585 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7587 else if (p > 10000.0)
7589 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7591 else if (p > 1000.0)
7593 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7597 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7601 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7609 if (p > (
double)(sell ? 500000000 : 1000000000))
7622 return Name + GetExtraName();
7639 ForeachPoint(delegate(
Point p,
bool main)
7641 int num2 = DistMulti(p, c);
7649 return DistMulti(pos, c);
7681 isCensored = enable;
7691 if (isDeconstructing != deconstruct)
7701 isDeconstructing = deconstruct;
7715 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7718 sortVal = -GetPrice(
currency) * 1000;
7721 sortVal = -Num * 1000;
7724 sortVal = category.sortVal * 1000;
7727 sortVal = -ChildrenAndSelfWeight * 1000;
7730 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7733 sortVal = -GetPrice(
currency) * 1000;
7736 sortVal = sourceCard._index * 1000;
7746 num =
id.CompareTo(c.
id);
7766 num = encLV - c.
encLV;
7785 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7803 action(pos, arg2:
true);
7817 SE.Play(
"pop_paper");
7842 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7855 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)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
void TrySetEnemy(Chara c)
bool HasCooldown(int idEle)
bool DroppedCard(string id)
CodexCreature GetOrCreate(string id)
void MarkCardDrop(string id)
UD_String_LightData lightColors
UD_String_MatData matColors
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static ColorProfile Colors
static int curve(int a, int start, int step, int rate=75)
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistDamage(int dmg, int v, int power=0)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
static Religion recentWrath
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(bool snow=false)
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
int GetCurrency(string id, ref int sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)