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;
2747 CardBlueprint.current =
null;
2798 if (
id ==
"microchip")
2879 EClass._zone.Boss =
Chara;
2921 int num = elementContainer.Value(value.
id);
2951 public void AddExp(
int a,
bool applyMod =
true)
2976 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2980 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50) / 100;
3011 Say(
"dingExp",
this);
3022 int num = Mathf.Min(1 +
LV / 5, 20);
3023 for (
int i = 0; i < num; i++)
3025 if (
Evalue(1644) < i + 1)
3063 if (rootCard !=
null && rootCard.
IsPC)
3118 Debug.LogWarning(
"already child:" + t);
3123 Debug.Log(
"already in the list" + t);
3138 t.ignoreAutoPick =
false;
3182 if (rootCard !=
null && rootCard.
IsPC)
3191 t.isNPCProperty =
false;
3205 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3208 void TryAdd(
Thing a)
3210 if (!ings.Contains(a.
id))
3228 List<Chara> list =
new List<Chara>();
3244 if (
item.IsPCFactionOrMinion)
3247 if (list2.Count != 0)
3249 foreach (
Thing item2
in list2)
3259 foreach (
Chara item3
in list)
3266 if (list3.Count == 0)
3270 foreach (
Thing item4
in list3)
3272 Msg.
Say(
"destroyed_inv_", item4, item3);
3284 List<Chara> list =
new List<Chara>();
3298 if (
item.IsPCFactionOrMinion)
3312 for (
int num =
things.Count - 1; num >= 0; num--)
3323 rootCard.Chara.held =
null;
3329 instance.selectedButton.card =
null;
3332 ActionMode.AdvOrRegion.updatePlans =
true;
3349 if (thing.
invY == 1)
3351 WidgetCurrentTool.dirty =
true;
3355 if (thing.
props !=
null)
3363 WidgetHotbar.dirtyCurrentItem =
true;
3364 thing.parent =
null;
3369 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3376 thing.parent =
null;
3385 return EClass.ui.layers.Count > 0;
3407 to.c_isImportant =
true;
3432 return card.GetRootCard();
3459 thing.encLV =
encLV;
3460 thing.decay =
decay;
3463 foreach (KeyValuePair<int, int>
item in mapInt)
3467 foreach (KeyValuePair<int, string> item2
in mapStr)
3469 thing.
mapStr[item2.Key] = item2.Value;
3475 thing.sockets = IO.DeepCopy(
sockets);
3491 ModNum(-a, notify:
false);
3503 return this as
Thing;
3506 return this as
Thing;
3512 return this as
Thing;
3515 public void ModNum(
int a,
bool notify =
true)
3554 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3560 for (
int i = 0; i <
sockets.Count; i++)
3578 for (
int i = 0; i <
sockets.Count; i++)
3584 int ele = num / 1000;
3585 int num2 = num % 1000;
3680 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3686 string encSlot = source.
encSlot;
3687 if (encSlot ==
null || encSlot.Length != 0)
3700 string[] array = source.
encSlot.Split(
',');
3701 foreach (
string key
in array)
3749 if (this.placeState == newState)
3755 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3767 float num2 = (
fy = 0f);
3778 this.placeState = newState;
3786 this.placeState = newState;
3841 num = num * (100 +
Quality) / 100;
3878 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3925 public bool TryPay(
int a,
string id =
"money")
3932 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3936 if (
IsPC && !(
id ==
"ration"))
3956 Say(
"spellbookCrumble",
this);
3965 if (
id ==
"influence")
3977 if (
id ==
"influence")
4008 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4010 if (num > 100000000)
4042 int num =
PV + orCreateElement.Value +
DEX / 10;
4049 num2 = num3 / 10 + 1;
4050 sides = num3 / num2 + 1;
4052 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4054 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4055 dmg -= num4 * mod / 100;
4065 DamageHP(dmg, 0, 0, attackSource, origin);
4074 bool flag = originalTarget !=
null;
4075 Action onEvade =
null;
4084 Say(
"wall_bond", chara3,
this);
4093 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4099 int num = chara4.
Evalue(1241);
4100 int num2 = chara4.
Evalue(438);
4103 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4112 if (origin !=
null && origin.HasElement(1208))
4114 switch (attackSource)
4117 dmg = dmg * 130 / 100;
4118 eleP = eleP * 150 / 100;
4121 dmg = dmg * 120 / 100;
4122 eleP = eleP * 150 / 100;
4128 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4131 if (ele == 0 || ele == 926)
4136 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4142 if (attackSource !=
AttackSource.Condition && showEffect)
4152 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4156 if (origin.HasElement(1247))
4161 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4165 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4170 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4171 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4178 if (chara2 !=
null && chara2.
isWet)
4187 if (chara !=
null && chara.
isWet)
4189 dmg = dmg * 150 / 100;
4195 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4203 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4205 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4214 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4219 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4221 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4228 dmg = dmg * 90 / 100;
4232 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4236 dmg = dmg * 90 / 100;
4255 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4259 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4264 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4266 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4268 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4276 int num7 =
MaxHP / 10;
4277 long num8 = dmg - num7;
4278 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4294 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4305 if (hp < 0 && Chara.mana.value >= 0)
4321 Chara.mana.value -= (int)dmg;
4338 float ratio = (float)dmg / (
float)
MaxHP;
4349 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4351 aI_PracticeDummy.hit++;
4352 aI_PracticeDummy.totalDamage += dmg;
4395 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4404 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4425 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4427 EClass.player.invlunerable =
true;
4466 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4473 text =
"dead_" + e.
source.alias;
4477 text =
"dead_attack";
4485 text =
"kill_" + e.source.alias;
4489 text =
"kill_attack";
4491 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4499 Say(
"reboot",
this);
4506 if (HasCondition<ConRebirth>())
4508 Say(
"rebirth",
this);
4520 Msg.alwaysVisible =
true;
4521 Msg.
Say(
"layhand", chara5,
this);
4522 Msg.
Say(
"pray_heal",
this);
4532 if (zoneInstanceBout !=
null)
4564 Die(e, origin, attackSource, originalTarget);
4570 string text2 =
new int[18]
4572 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4573 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4574 }.RandomItem().ToString();
4577 text2 =
"casino_coin";
4581 text2 =
"scratchcard";
4609 if (origin !=
null && origin.isChara)
4631 if (origin.GetInt(106) == 0)
4633 origin.Chara.TalkTopic(
"kill");
4638 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4640 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4644 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4645 if (num9 >= (
float)num13)
4649 Say(
"dmg_" + e.source.alias,
this);
4653 Say(
"dmg" + num9,
this);
4668 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4672 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4676 int num14 = origin.Dist(
this);
4680 if (
id ==
"hedgehog_ether")
4684 Say(
"reflect_thorne",
this, origin);
4685 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4690 Say(
"reflect_acid",
this, origin);
4691 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4703 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4714 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4724 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4730 Condition.ignoreEffect =
true;
4732 Condition.ignoreEffect =
false;
4736 float num16 = (float)
hp / (
float)
MaxHP;
4743 PlaySound(
"heartbeat", 1f - num16 * 2f);
4776 EClass.player.forceTalk =
true;
4778 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4789 void EvadeDeath(Action action)
4794 Chara.mana.value = 0;
4808 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4810 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4811 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4814 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4815 origin.Chara.stamina.Mod(num17);
4821 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4823 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4824 origin.Chara.mana.Mod(num18);
4830 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4832 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4833 origin.Chara.mana.Mod(num19);
4850 bool hostile =
false;
4854 if (Chance(30 + eleP / 5, 100))
4856 MarkHostile().AddCondition<
ConBurning>(eleP);
4862 if (Chance(30 + eleP / 10, 100))
4867 else if (Chance(50 + eleP / 10, 100))
4873 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4879 if (Chance(30 + eleP / 5, 100))
4881 MarkHostile().AddCondition<
ConPoison>(eleP);
4885 if (Chance(30 + eleP / 5, 100))
4892 if (Chance(30 + eleP / 5, 100))
4901 if (Chance(30 + eleP / 5, 100))
4906 else if (Chance(30 + eleP / 5, 100))
4912 if (Chance(50 + eleP / 10, 100))
4920 if (Chance(30 + eleP / 5, 100))
4939 if (Chance(5 + eleP / 25, 40))
4943 if (Chance(5 + eleP / 25, 40))
4947 if (Chance(5 + eleP / 25, 40))
4951 if (Chance(5 + eleP / 25, 40))
4953 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4955 if (Chance(5 + eleP / 25, 40))
4959 if (Chance(5 + eleP / 25, 40))
4963 if (Chance(30 + eleP / 10, 100))
4969 if (Chance(50 + eleP / 10, 100))
4971 MarkHostile().AddCondition<
ConBleed>(eleP);
4975 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4988 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4992 static bool Chance(
int a,
int max)
4994 return Mathf.Min(a, max) >
EClass.
rnd(100);
5005 Card rootCard = GetRootCard();
5007 if (_pos !=
null && !_pos.
IsValid)
5018 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5019 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5021 text += e.source.alias;
5025 Msg.
Say(text,
this, rootCard);
5030 Msg.
Say(
"destroyed",
this);
5035 things.ForeachReverse(delegate(
Thing t)
5044 if (e !=
null && _pos !=
null && e.id == 21)
5050 Explode(pos, origin);
5058 origin = origin?.Chara,
5060 aliasEle =
"eleImpact"
5066 PlaySound(
material.GetSoundDead(sourceCard));
5074 Debug.Log(Name +
" is already destroyed.");
5085 Chara.isDead =
true;
5103 for (
int num = things.Count - 1; num >= 0; num--)
5105 things[num].Destroy();
5112 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5118 List<Card> list =
new List<Card>();
5119 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5122 if (this.rarity >=
Rarity.Legendary)
5155 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5167 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5175 if (flag2 && !isUserZone)
5178 bool num2 = text ==
"_meat";
5190 text =
"meat_marble";
5193 if (thing3.
source._origin ==
"meat")
5207 if (!IsPCFaction && !isUserZone)
5209 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5211 string[] array = item2.
Split(
'/');
5212 int num4 = array[1].ToInt();
5261 if (!isBackerContent && !flag)
5297 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5307 if (text2 ==
"big_daddy" || text2 ==
"santa")
5315 List<Thing> list2 =
new List<Thing>();
5316 foreach (
Thing thing4
in things)
5342 if (num5 > 0 && list2.Count > 0)
5345 for (
int j = 0; j < list2.Count && j < num5; j++)
5351 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5354 foreach (
Card item3
in list)
5363 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5368 for (
int k = 0; k < num5; k++)
5391 foreach (
Thing thing5
in things)
5393 if (thing5.
GetInt(116) != 0)
5398 Point nearestPoint = GetRootCard().pos;
5403 foreach (
Card item4
in list)
5409 item4.isHidden =
false;
5410 item4.isNPCProperty =
false;
5467 case "egg_fertilized":
5472 string text =
"c_wilds";
5473 if (
id ==
"_meat" ||
id ==
"meat_marble")
5481 for (
int i = 0; i < 20; i++)
5484 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5494 if (crafter !=
null && crafter.id ==
"big_sister")
5496 cardRow = crafter.source;
5501 if (c_idRefCard.IsEmpty())
5503 MakeRefFrom(cardRow.
model);
5508 MakeFoodFrom(cardRow.
model);
5510 return this as
Thing;
5516 return this as
Thing;
5533 int num = race.
food[0].ToInt();
5534 bool flag =
id ==
"meat_marble";
5536 bool flag2 = category.
IsChildOf(
"meat");
5548 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5551 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5553 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5557 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5575 foreach (
Element value
in c.elements.dict.Values)
5577 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5582 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5583 foreach (KeyValuePair<int, int>
item in race.elementMap)
5587 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5590 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5591 for (
int i = 0; i < num2 && i < list.Count; i++)
5593 Tuple<int, int> tuple = list[i];
5594 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5596 if (c.Chara.IsUndead)
5598 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5600 isWeightChanged =
true;
5601 c_weight = race.height * 4 + 100;
5602 c_idMainElement = c.c_idMainElement;
5604 int num3 = c.LV - c.sourceCard.LV;
5610 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5614 if (flag2 && c.IsPCFaction && c.IsUnique)
5629 if (IsIgnoreName(
card))
5633 if (IsIgnoreName(card2))
5637 if (
card ==
null && card2 !=
null)
5644 MakeRefFrom(
card, card2);
5645 if (
card.c_idRefCard !=
null)
5647 c_idRefCard =
card.c_idRefCard;
5648 c_altName = TryGetFoodName(
card);
5653 c_altName2 = TryGetFoodName(card2);
5656 static bool IsIgnoreName(
Card c)
5686 if (!row.aka.IsEmpty())
5688 if (row.name ==
"*r" && row.aka ==
"*r")
5690 return "corpseGeneral".lang();
5692 if (row.name ==
"*r")
5694 return row.GetText(
"aka");
5697 return row.GetName();
5702 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5718 c_idRefCard = c1.
id;
5722 c_idRefCard2 = c2.id;
5723 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5725 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5739 thing.c_idMainElement = c_idMainElement;
5748 return GiveBirth(thing, effect);
5766 int num2 = LV - sourceCard.
LV;
5771 if (num2 >= 10 && !HasElement(1290))
5779 return GiveBirth(thing, effect);
5785 EClass.player.forceTalk =
true;
5786 card.Talk(
"giveBirth");
5790 card.pos.PlayEffect(
"revive");
5791 card.pos.PlaySound(
"egg");
5803 string[] array =
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" };
5807 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5809 PlaySound(
"egghatch");
5823 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5876 SayNothingHappans();
5879 PlayEffect(
"teleport");
5882 Say(
"antiTeleport",
this);
5883 PlaySound(
"gravity");
5888 PlaySound(
"teleport");
5889 Say(
"teleported",
this);
5898 if (chara.
enemy ==
this)
5909 EClass.player.haltMove =
true;
5911 PlayEffect(
"teleport", useRenderPos:
false);
5918 PlayEffect(
"ripple");
5919 PlaySound(
"Footstep/water");
5935 if (elements.
Value(ele) <= 0)
5937 if (includeNagative)
5939 return elements.
Value(ele) < 0;
5948 return elements.
Value(ele) >= req;
5963 if (HasElement(764))
5967 if (HasElement(759))
5971 if (HasElement(703))
5975 if (HasElement(758))
5979 if (HasElement(704))
5997 for (
int i = 0; i < a; i++)
6008 shared.color = 11010048f;
6009 shared.liquidLv = 0;
6011 SetRenderParam(shared);
6031 isDyed = mat !=
null;
6032 c_dyeMat = mat?.id ?? 0;
6044 else if (isElemental)
6080 int num = EClass.game.seed + refVal;
6081 num +=
id[0] % 10000;
6084 num +=
id[1] % 1000;
6087 num +=
id[2] % 1000;
6090 num +=
id[3] % 1000;
6093 num +=
id[4] % 1000;
6102 return ref _randColor;
6119 public void SetImage(Image image,
int dir,
int idSkin = 0)
6121 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6131 Sprite sprite = GetSprite();
6132 if (!c_idSpriteReplacer.IsEmpty())
6135 if (spriteReplacer !=
null)
6139 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6143 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6146 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6148 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6152 renderer.
ShowEmo(_emo, duration);
6160 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6165 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6170 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6175 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6178 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6180 Card rootCard = GetRootCard();
6187 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6212 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6218 Card rootCard = GetRootCard();
6222 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6230 Card rootCard = GetRootCard();
6253 public virtual void Rotate(
bool reverse =
false)
6256 if (sourceCard.
tiles.Length > 4)
6258 num = sourceCard.
tiles.Length;
6316 fx = fx - vector.x + thingPosition.x;
6317 fy = fy - vector.y + thingPosition.y;
6321 float num2 = (fy = 0f);
6345 renderParam.x = v.x;
6346 renderParam.y = v.y;
6347 renderParam.z = v.z;
6349 v.x = renderParam.
x;
6350 v.y = renderParam.
y;
6351 v.z = renderParam.
z;
6365 v.z += thingPosition.z;
6372 if (useCurrentPosition)
6387 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6398 EClass.player.lightRadius = 1;
6406 return GetLightRadius() > 0;
6414 return 0.01f * LightData.color.a * 256f * 1.12f;
6416 if (IsPCFaction && !IsPC)
6482 num2 = traitLightSource.LightRadius;
6487 if (lightRadius > 0)
6489 if (lightRadius > num2)
6509 int radius = GetLightRadius();
6514 float power = GetLightPower();
6534 radius += EvalueMax(490);
6535 EClass.player.lightRadius = radius;
6536 EClass.player.lightPower = power;
6542 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6553 int num = (trait.UseLightColor ? c_lightColor : 0);
6556 fov.r = (byte)(num / 1024);
6557 fov.g = (byte)(num % 1024 / 32);
6558 fov.b = (byte)(num % 32);
6599 if (fov !=
null && fov.
lastPoints.Count != 0)
6618 things.ForeachReverse(delegate(
Thing t)
6622 if (sourceCard.
_origin ==
"dish")
6630 else if (!isChara && trait.
Decay != 0)
6632 Decay(trait.
Decay * hour);
6650 int num2 = MaxDecay / 4 * 3;
6655 num =
card.trait.DecaySpeedChild;
6657 num = num * trait.DecaySpeed / 100;
6658 int num3 = Evalue(405);
6661 num = num * (100 - num3 * 2) / 100;
6673 if (decay + a > MaxDecay)
6675 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6684 card.AddCard(thing);
6685 if (!IsParentLocked())
6687 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6696 else if (GetRootCard() ==
EClass.
pc)
6698 if (!IsParentLocked())
6710 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6712 if (!IsParentLocked())
6719 bool IsParentLocked()
6721 if (parent is
Thing)
6723 return (parent as
Thing).c_lockLv > 0;
6731 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6734 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6738 EClass.player.forceTalk =
false;
6742 EClass.player.forceTalk =
false;
6743 if (!isSynced && !forceSync)
6748 GameLang.refDrama1 = ref1;
6749 GameLang.refDrama2 = ref2;
6750 string text = GetTalkText(idTopic, stripPun:
true);
6751 if (HasElement(1232) && idTopic !=
"baby")
6758 if (!(text2 ==
"adv_gaki"))
6760 if (text2 ==
"corgon")
6770 TalkRaw(text, ref1, ref2, forceSync);
6773 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6775 if ((!isSynced && !forceSync) || text.IsEmpty())
6782 text = text.Replace(
"#1", ref1);
6786 text = text.Replace(
"#2", ref2);
6788 HostRenderer.Say(ApplyNewLine(text));
6789 text = StripTalkSpeiclaCharacters(text);
6790 bool flag = text.StartsWith(
"*");
6794 text = text.Bracket();
6796 Msg.
Say(text.Replace(
"&",
""));
6805 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
6807 return text.Substring(2);
6813 return text.Substring(1);
6820 if (text.Contains(
"&"))
6822 string text2 =
"_comma".lang();
6823 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6824 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6825 text = text.Replace(
"&", Environment.NewLine ??
"");
6830 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6832 if (isSynced && !text.IsEmpty())
6836 text = text.Replace(
"#1", ref1);
6840 text = text.Replace(
"#2", ref2);
6842 HostRenderer.Say(text);
6848 Say(
"nothingHappens");
6851 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6860 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6869 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6878 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6882 if (!text.IsEmpty())
6884 text = text.Split(
'|').RandomItem();
6885 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6887 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6889 text =
"(" + text +
")";
6891 text = text.Replace(
"。)",
")");
6894 return ApplyTone(text, stripPun);
6900 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6903 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6909 string[] array = _tones.IsEmpty(
"").Split(
'|');
6910 string key = array[0];
6915 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6919 if (array[0].IsEmpty())
6928 if (array.Length >= 2)
6930 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6932 if (array.Length >= 3)
6934 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6937 text2 = stringBuilder.ToString();
6941 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6952 return text2.StripLastPun();
6967 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6968 if (list.Count != 0)
6970 int mtp = EClass.core.config.test.extraToneMTP
switch
6983 string text = list.RandomItem()[
"id"];
6984 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6991 return ListCraftBonusTraits().Count > 0;
6996 List<Element> list =
new List<Element>();
6997 string[] tag = sourceCard.
tag;
6998 for (
int i = 0; i < tag.Length; i++)
7000 string[] array = tag[i].Split(
'/');
7001 if (!(array[0] !=
"craft_bonus"))
7017 if (dest.
stack !=
null)
7021 Say(
"stack_thing", t, dest.
stack);
7029 ChangeRarity(
Rarity.Normal);
7035 c_idBacker = row.
id;
7041 chara.hostility = hostility2;
7047 Chara.idFaith = row.
deity.ToLowerInvariant();
7052 if (
id ==
"putty_snow")
7065 if (c_idBacker == 164)
7078 c_textureData = GetPaintData();
7088 Sprite sprite = GetSprite();
7089 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7090 int num = sprite.texture.width * 2;
7091 int num2 = sprite.texture.height * 2;
7092 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7093 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7094 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7095 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7096 texture2D2.SetPixels(pixels);
7098 byte[] result = texture2D2.EncodeToJPG();
7099 UnityEngine.Object.Destroy(texture2D);
7100 UnityEngine.Object.Destroy(texture2D2);
7106 if ((
bool)_paintSprite)
7108 UnityEngine.Object.Destroy(_paintSprite.texture);
7109 UnityEngine.Object.Destroy(_paintSprite);
7110 _paintSprite =
null;
7118 byte[] data = c_textureData;
7119 Texture2D texture2D =
new Texture2D(1, 1);
7120 texture2D.LoadImage(data);
7121 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7125 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7128 return _paintSprite;
7133 if (!(GetRestrainer() ==
null || force))
7137 isRestrained =
false;
7138 Say(
"unrestrained",
this);
7149 if (c_rescueState ==
RescueState.WaitingForRescue)
7163 c.DoHostileAction(
item, immediate:
true);
7190 result = row.value * mat.value / 100;
7227 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7228 if (
id ==
"plat" && !sell)
7239 num2 += (float)c_priceCopy * 0.2f;
7240 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7244 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7246 if (IsFood && !
material.tag.Contains(
"food"))
7251 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7269 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7271 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7273 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7274 if (IsEquipmentOrRanged)
7279 num4 += value.
source.value;
7281 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7282 if (rarity >=
Rarity.Legendary)
7284 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7292 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7294 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)))));
7298 num2 *= (float)(tier + 1);
7305 if (priceType ==
PriceType.CopyShop && sell)
7311 if (
id ==
"littleball")
7318 if (
id ==
"crimale2")
7326 case "ticket_fortune":
7345 case "hammer_strip":
7375 case "diary_sister":
7379 case "diary_catsister":
7381 case "container_magic":
7383 case "wrench_tent_elec":
7385 case "wrench_tent_soil":
7387 case "wrench_tent_seabed":
7391 case "wrench_storage":
7393 case "wrench_fridge":
7395 case "wrench_extend_v":
7397 case "wrench_extend_h":
7403 case "scroll_random":
7417 if (!sell &&
id ==
"casino_coin")
7421 int value = GetValue(priceType, sell);
7431 Trait trait = this.trait;
7436 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7441 p *= 1f + 0.5f * (float)c_containerSize;
7444 if (c_priceFix != 0)
7446 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7456 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7467 if (!sell && category.
id ==
"spellbook")
7471 bool flag = priceType ==
PriceType.CopyShop;
7472 int num = ((!flag) ? 1 : 5);
7473 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7474 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7475 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7480 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7482 p *= 0.20000000298023224;
7485 p *= 0.20000000298023224;
7488 p *= 0.20000000298023224;
7492 p *= 0.20000000298023224;
7498 if ((uint)(priceType - 1) <= 1u)
7510 if (
id ==
"rod_wish")
7512 p *= (sell ? 0.01f : 50f);
7527 p *= 0.20000000298023224;
7531 p *= 0.10000000149011612;
7534 p *= 0.0020000000949949026;
7537 p *= 0.00019999999494757503;
7540 p *= 0.004999999888241291;
7551 p *= (flag ? 1.25f : 0.3f);
7555 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7559 p *= (flag ? 0.9f : 0.5f);
7571 p *= 1f + 0.2f * (float)c.Evalue(1406);
7584 p *= 1.100000023841858;
7618 else if (category.
IsChildOf(
"furniture"))
7638 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7645 p = ((!sell) ? 1 : 0);
7653 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7655 else if (p > 10000.0)
7657 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7659 else if (p > 1000.0)
7661 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7665 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7669 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7677 if (p > (
double)(sell ? 500000000 : 1000000000))
7690 return Name + GetExtraName();
7707 ForeachPoint(delegate(
Point p,
bool main)
7709 int num2 = DistMulti(p, c);
7717 return DistMulti(pos, c);
7749 isCensored = enable;
7759 if (isDeconstructing != deconstruct)
7769 isDeconstructing = deconstruct;
7783 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7786 sortVal = -GetPrice(
currency) * 1000;
7789 sortVal = -Num * 1000;
7792 sortVal = category.sortVal * 1000;
7795 sortVal = -ChildrenAndSelfWeight * 1000;
7798 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7801 sortVal = -GetPrice(
currency) * 1000;
7804 sortVal = sourceCard._index * 1000;
7814 num =
id.CompareTo(c.
id);
7834 num = encLV - c.
encLV;
7853 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7871 action(pos, arg2:
true);
7885 SE.Play(
"pop_paper");
7910 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7923 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)
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)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
int GetCurrency(string id="money")
void ForeachPoint(Action< Point, bool > action)
void Dye(SourceMaterial.Row mat)
virtual bool IsPCPartyMinion
string c_idSpriteReplacer
SourceMaterial.Row _material
bool HasElement(int ele, int req)
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
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 AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void 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()
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
Chara SpawnMob(string id, Point pos=null)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)