2using System.Collections.Generic;
4using System.Runtime.Serialization;
32 [JsonProperty(PropertyName =
"A")]
33 public int[]
_ints =
new int[30];
35 [JsonProperty(PropertyName =
"B")]
36 public string id =
"";
38 [JsonProperty(PropertyName =
"C")]
41 [JsonProperty(PropertyName =
"D")]
44 [JsonProperty(PropertyName =
"E")]
47 [JsonProperty(PropertyName =
"SC")]
258 return 0.001f * (float)
_ints[15];
262 _ints[15] = (int)(value * 1000f);
270 return 0.001f * (float)
_ints[16];
274 _ints[16] = (int)(value * 1000f);
286 _ints[17] = (int)value;
298 _ints[18] = (int)value;
322 _ints[19] = (int)value * 100;
1032 SetInt(103, value ? 1 : 0);
1044 SetInt(109, value ? 1 : 0);
1056 SetInt(63, value ? 1 : 0);
1068 SetInt(64, value ? 1 : 0);
1080 SetInt(120, value ? 1 : 0);
1092 SetInt(121, value ? 1 : 0);
1104 SetInt(122, value ? 1 : 0);
1802 return GetObj<UniqueData>(6);
1814 return GetObj<Thing>(9);
1826 return GetObj<List<SocketData>>(17);
1838 return GetObj<Thing>(10);
1862 return GetObj<CharaUpgrade>(11);
1874 return GetObj<LoveData>(20);
1886 return GetObj<CharaGenes>(15);
1898 return GetObj<List<int>>(16);
1922 return GetObj<DNA>(14);
1934 return GetObj<CharaList>(13);
1946 return GetObj<MixedFoodData>(18);
1958 return GetObj<Thing>(19);
1970 return GetObj<byte[]>(4);
2046 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2069 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2157 if (
Tiles.Length == 1)
2159 return dir % 2 == 1;
2223 return id ==
"grass";
2355 if (
Tiles.Length < 3)
2429 return bio.gender == 2;
2581 if (
card.isSale || !
card.trait.CanUseContent)
2586 if (windowSaveData !=
null)
2598 EClass.player.wasDirtyWeight =
true;
2616 public int Evalue(
int ele,
bool ignoreGlobalElement)
2642 return c_editorTags?.Contains(tag.ToString()) ??
false;
2675 int num2 =
item.Value;
2750 for (
int i = 0; i <
sockets.Count; i++)
2768 thing.parent =
this;
2818 CardBlueprint.current =
null;
2869 if (
id ==
"microchip")
2951 EClass._zone.Boss =
Chara;
2993 int num = elementContainer.Value(value.
id);
3023 public void AddExp(
int a,
bool applyMod =
true)
3048 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3052 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3083 Say(
"dingExp",
this);
3098 int num = Mathf.Min(1 +
LV / 5, 20);
3099 for (
int i = 0; i < num; i++)
3101 if (
Evalue(1644) < i + 1)
3139 if (rootCard !=
null && rootCard.
IsPC)
3194 Debug.LogWarning(
"already child:" + t);
3199 Debug.Log(
"already in the list" + t);
3214 t.ignoreAutoPick =
false;
3258 if (rootCard !=
null && rootCard.
IsPC)
3267 t.isNPCProperty =
false;
3281 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3284 void TryAdd(
Thing a)
3286 if (!ings.Contains(a.
id))
3304 List<Chara> list =
new List<Chara>();
3320 if (!
item.IsPCFactionOrMinion)
3325 if (list2.Count == 0)
3329 foreach (
Thing item2
in list2)
3334 item.body.Unequip(item2);
3336 item2.c_idDeity = artifactDeity?.
id ??
null;
3337 Msg.
Say(
"waterCurse", item2);
3341 foreach (
Chara item3
in list)
3348 if (list3.Count == 0)
3352 foreach (
Thing item4
in list3)
3354 Msg.
Say(
"destroyed_inv_", item4, item3);
3366 List<Chara> list =
new List<Chara>();
3380 if (
item.IsPCFactionOrMinion)
3394 for (
int num =
things.Count - 1; num >= 0; num--)
3405 rootCard.Chara.held =
null;
3411 instance.selectedButton.card =
null;
3414 ActionMode.AdvOrRegion.updatePlans =
true;
3431 if (thing.
invY == 1)
3433 WidgetCurrentTool.dirty =
true;
3437 if (thing.
props !=
null)
3445 WidgetHotbar.dirtyCurrentItem =
true;
3446 thing.parent =
null;
3451 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3458 thing.parent =
null;
3467 return EClass.ui.layers.Count > 0;
3489 to.c_isImportant =
true;
3514 return card.GetRootCard();
3541 thing.encLV =
encLV;
3542 thing.decay =
decay;
3545 foreach (KeyValuePair<int, int>
item in mapInt)
3549 foreach (KeyValuePair<int, string> item2
in mapStr)
3551 thing.
mapStr[item2.Key] = item2.Value;
3557 thing.sockets = IO.DeepCopy(
sockets);
3573 ModNum(-a, notify:
false);
3585 return this as
Thing;
3588 return this as
Thing;
3594 return this as
Thing;
3597 public void ModNum(
int a,
bool notify =
true)
3636 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3642 for (
int i = 0; i <
sockets.Count; i++)
3660 for (
int i = 0; i <
sockets.Count; i++)
3666 int ele = num / 1000;
3667 int num2 = num % 1000;
3762 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3768 string encSlot = source.
encSlot;
3769 if (encSlot ==
null || encSlot.Length != 0)
3782 string[] array = source.
encSlot.Split(
',');
3783 foreach (
string key
in array)
3831 if (this.placeState == newState)
3837 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3849 float num2 = (
fy = 0f);
3860 this.placeState = newState;
3868 this.placeState = newState;
3923 num = num * (100 +
Quality) / 100;
3960 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4007 public bool TryPay(
int a,
string id =
"money")
4014 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4018 if (
IsPC && !(
id ==
"ration"))
4038 Say(
"spellbookCrumble",
this);
4047 if (
id ==
"influence")
4059 if (
id ==
"influence")
4066 if (sum >
int.MaxValue)
4094 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4096 if (num > 100000000)
4128 int num =
PV + orCreateElement.Value +
DEX / 10;
4135 num2 = num3 / 10 + 1;
4136 sides = num3 / num2 + 1;
4138 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4140 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4141 dmg -= num4 * mod / 100;
4151 DamageHP(dmg, 0, 0, attackSource, origin);
4160 bool flag = originalTarget !=
null;
4161 Action onEvade =
null;
4170 Say(
"wall_bond", chara3,
this);
4179 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4185 int num = chara4.
Evalue(1241);
4186 int num2 = chara4.
Evalue(438);
4189 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4198 if (origin !=
null && origin.HasElement(1208))
4200 switch (attackSource)
4203 dmg = dmg * 130 / 100;
4204 eleP = eleP * 150 / 100;
4207 dmg = dmg * 120 / 100;
4208 eleP = eleP * 150 / 100;
4214 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4217 if (ele == 0 || ele == 926)
4222 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4228 if (attackSource !=
AttackSource.Condition && showEffect)
4238 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4242 if (origin.HasElement(1247))
4247 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4251 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4256 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4257 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4264 if (chara2 !=
null && chara2.
isWet)
4273 if (chara !=
null && chara.
isWet)
4275 dmg = dmg * 150 / 100;
4281 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4289 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4291 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4300 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4305 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4307 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4314 dmg = dmg * 90 / 100;
4318 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4322 dmg = dmg * 90 / 100;
4341 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4345 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4350 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4352 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4354 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4362 int num7 =
MaxHP / 10;
4363 long num8 = dmg - num7;
4364 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4376 long num9 = 99999999L;
4380 if (condition !=
null)
4382 num9 = num9 * (100 + condition.lv * 5) / 100;
4389 float num10 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4400 if (hp < 0 && Chara.mana.value >= 0)
4416 Chara.mana.value -= (int)dmg;
4433 float ratio = (float)dmg / (
float)
MaxHP;
4444 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4446 aI_PracticeDummy.hit++;
4447 aI_PracticeDummy.totalDamage += dmg;
4490 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4499 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4520 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4522 EClass.player.invlunerable =
true;
4561 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4568 text =
"dead_" + e.
source.alias;
4572 text =
"dead_attack";
4580 text =
"kill_" + e.source.alias;
4584 text =
"kill_attack";
4586 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4594 Say(
"reboot",
this);
4601 if (HasCondition<ConRebirth>())
4603 Say(
"rebirth",
this);
4615 Msg.alwaysVisible =
true;
4616 Msg.
Say(
"layhand", chara5,
this);
4617 Msg.
Say(
"pray_heal",
this);
4627 if (zoneInstanceBout !=
null)
4659 Die(e, origin, attackSource, originalTarget);
4660 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4662 origin.isSummon =
true;
4663 origin.c_summonDuration = 4;
4670 string text2 =
new int[18]
4672 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4673 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4674 }.RandomItem().ToString();
4677 text2 =
"casino_coin";
4681 text2 =
"scratchcard";
4709 if (origin !=
null && origin.isChara)
4731 if (origin.GetInt(106) == 0)
4733 origin.Chara.TalkTopic(
"kill");
4738 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4740 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num10 + (
IsPC ?
"pc" :
""), origin,
this);
4744 int num14 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4745 if (num10 >= (
float)num14)
4749 Say(
"dmg_" + e.source.alias,
this);
4753 Say(
"dmg" + num10,
this);
4776 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4780 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4784 int num15 = origin.Dist(
this);
4788 if (
id ==
"hedgehog_ether")
4792 Say(
"reflect_thorne", origin,
this);
4793 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4798 Say(
"reflect_acid",
this, origin);
4799 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4811 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4822 int num16 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4832 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4838 Condition.ignoreEffect =
true;
4840 Condition.ignoreEffect =
false;
4844 float num17 = (float)
hp / (
float)
MaxHP;
4851 PlaySound(
"heartbeat", 1f - num17 * 2f);
4884 EClass.player.forceTalk =
true;
4886 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4897 void EvadeDeath(Action action)
4902 Chara.mana.value = 0;
4916 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4918 int num18 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
4919 int num19 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
4926 int num20 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
4927 origin.Chara.stamina.Mod(num20);
4933 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4935 int num21 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4936 origin.Chara.mana.Mod(num21);
4944 int num22 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
4945 origin.Chara.mana.Mod(num22);
4962 bool hostile =
false;
4966 if (Chance(30 + eleP / 5, 100))
4968 MarkHostile().AddCondition<
ConBurning>(eleP);
4974 if (Chance(30 + eleP / 10, 100))
4979 else if (Chance(50 + eleP / 10, 100))
4985 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4991 if (Chance(30 + eleP / 5, 100))
4993 MarkHostile().AddCondition<
ConPoison>(eleP);
4997 if (Chance(30 + eleP / 5, 100))
5004 if (Chance(30 + eleP / 5, 100))
5013 if (Chance(30 + eleP / 5, 100))
5018 else if (Chance(30 + eleP / 5, 100))
5024 if (Chance(50 + eleP / 10, 100))
5032 if (Chance(30 + eleP / 5, 100))
5051 if (Chance(5 + eleP / 25, 40))
5055 if (Chance(5 + eleP / 25, 40))
5059 if (Chance(5 + eleP / 25, 40))
5063 if (Chance(5 + eleP / 25, 40))
5065 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5067 if (Chance(5 + eleP / 25, 40))
5071 if (Chance(5 + eleP / 25, 40))
5075 if (Chance(30 + eleP / 10, 100))
5081 if (Chance(50 + eleP / 10, 100))
5083 MarkHostile().AddCondition<
ConBleed>(eleP);
5087 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5100 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5104 static bool Chance(
int a,
int max)
5106 return Mathf.Min(a, max) >
EClass.
rnd(100);
5117 Card rootCard = GetRootCard();
5119 if (_pos !=
null && !_pos.
IsValid)
5130 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5131 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5133 text += e.source.alias;
5137 Msg.
Say(text,
this, rootCard);
5142 Msg.
Say(
"destroyed",
this);
5147 things.ForeachReverse(delegate(
Thing t)
5156 if (e !=
null && _pos !=
null && e.id == 21)
5162 Explode(pos, origin);
5170 origin = origin?.Chara,
5172 aliasEle =
"eleImpact"
5178 PlaySound(
material.GetSoundDead(sourceCard));
5186 Debug.Log(Name +
" is already destroyed.");
5197 Chara.isDead =
true;
5215 for (
int num = things.Count - 1; num >= 0; num--)
5217 things[num].Destroy();
5224 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5230 List<Card> list =
new List<Card>();
5231 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5234 if (this.rarity >=
Rarity.Legendary)
5267 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5279 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5287 if (flag2 && !isUserZone)
5290 bool num2 = text ==
"_meat";
5302 text =
"meat_marble";
5305 if (thing3.
source._origin ==
"meat")
5319 if (!IsPCFaction && !isUserZone)
5321 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5323 string[] array = item2.
Split(
'/');
5324 int num4 = array[1].ToInt();
5373 if (!isBackerContent && !flag)
5409 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5419 if (text2 ==
"big_daddy" || text2 ==
"santa")
5427 List<Thing> list2 =
new List<Thing>();
5428 foreach (
Thing thing6
in things)
5454 if (num5 > 0 && list2.Count > 0)
5457 for (
int j = 0; j < list2.Count && j < num5; j++)
5463 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5466 foreach (
Card item3
in list)
5475 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5480 for (
int k = 0; k < num5; k++)
5509 List<Thing> list3 = thing4.
things.ToList();
5519 while (num8 > 0 && list3.Count != 0)
5521 Thing thing5 = list3.First();
5522 list3.Remove(thing5);
5533 foreach (
Thing thing7
in things)
5535 if (thing7.
GetInt(116) != 0)
5540 Point nearestPoint = GetRootCard().pos;
5545 foreach (
Card item4
in list)
5551 item4.isHidden =
false;
5552 item4.isNPCProperty =
false;
5609 case "egg_fertilized":
5614 string text =
"c_wilds";
5615 if (
id ==
"_meat" ||
id ==
"meat_marble")
5623 for (
int i = 0; i < 20; i++)
5626 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5636 if (crafter !=
null && crafter.id ==
"big_sister")
5638 cardRow = crafter.source;
5643 if (c_idRefCard.IsEmpty())
5645 MakeRefFrom(cardRow.
model);
5650 MakeFoodFrom(cardRow.
model);
5652 return this as
Thing;
5658 return this as
Thing;
5675 int num = race.
food[0].ToInt();
5676 bool flag =
id ==
"meat_marble";
5678 bool flag2 = category.
IsChildOf(
"meat");
5690 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5693 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5695 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5699 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5717 foreach (
Element value
in c.elements.dict.Values)
5719 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5724 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5725 foreach (KeyValuePair<int, int>
item in race.elementMap)
5729 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5732 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5733 for (
int i = 0; i < num2 && i < list.Count; i++)
5735 Tuple<int, int> tuple = list[i];
5736 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5738 if (c.Chara.IsUndead)
5740 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5742 isWeightChanged =
true;
5743 c_weight = race.height * 4 + 100;
5744 c_idMainElement = c.c_idMainElement;
5746 int num3 = c.LV - c.sourceCard.LV;
5752 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5756 if (flag2 && c.IsPCFaction && c.IsUnique)
5771 if (IsIgnoreName(
card))
5775 if (IsIgnoreName(card2))
5779 if (
card ==
null && card2 !=
null)
5786 MakeRefFrom(
card, card2);
5787 if (
card.c_idRefCard !=
null)
5789 c_idRefCard =
card.c_idRefCard;
5790 c_altName = TryGetFoodName(
card);
5795 c_altName2 = TryGetFoodName(card2);
5798 static bool IsIgnoreName(
Card c)
5828 if (!row.aka.IsEmpty())
5830 if (row.name ==
"*r" && row.aka ==
"*r")
5832 return "corpseGeneral".lang();
5834 if (row.name ==
"*r")
5836 return row.GetText(
"aka");
5839 return row.GetName();
5844 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5860 c_idRefCard = c1.
id;
5864 c_idRefCard2 = c2.id;
5865 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5867 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5881 thing.c_idMainElement = c_idMainElement;
5890 return GiveBirth(thing, effect);
5908 int num2 = LV - sourceCard.
LV;
5913 if (num2 >= 10 && !HasElement(1290))
5921 return GiveBirth(thing, effect);
5927 EClass.player.forceTalk =
true;
5928 card.Talk(
"giveBirth");
5932 card.pos.PlayEffect(
"revive");
5933 card.pos.PlaySound(
"egg");
5945 string[] array =
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" };
5949 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5951 PlaySound(
"egghatch");
5960 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
6013 SayNothingHappans();
6016 PlayEffect(
"teleport");
6019 Say(
"antiTeleport",
this);
6020 PlaySound(
"gravity");
6025 PlaySound(
"teleport");
6026 Say(
"teleported",
this);
6035 if (chara.
enemy ==
this)
6046 EClass.player.haltMove =
true;
6048 PlayEffect(
"teleport", useRenderPos:
false);
6055 PlayEffect(
"ripple");
6056 PlaySound(
"Footstep/water");
6067 int num = p.x - pos.
x;
6068 int num2 = p.z - pos.
z;
6085 if (num == 0 && num2 == 0)
6095 return TryMove(point, allowDestroyPath:
false);
6102 return _Move(newPoint);
6105 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6109 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6113 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6115 if (!IsAliveInCurrentZone)
6141 Say(
"kick",
this, t);
6175 if (elements.
Value(ele) <= 0)
6177 if (includeNagative)
6179 return elements.
Value(ele) < 0;
6188 return elements.
Value(ele) >= req;
6203 if (HasElement(764))
6207 if (HasElement(759))
6211 if (HasElement(703))
6215 if (HasElement(758))
6219 if (HasElement(704))
6237 for (
int i = 0; i < a; i++)
6248 shared.color = 11010048f;
6249 shared.liquidLv = 0;
6251 SetRenderParam(shared);
6271 isDyed = mat !=
null;
6272 c_dyeMat = mat?.id ?? 0;
6284 else if (isElemental)
6320 int num = EClass.game.seed + refVal;
6321 num +=
id[0] % 10000;
6324 num +=
id[1] % 1000;
6327 num +=
id[2] % 1000;
6330 num +=
id[3] % 1000;
6333 num +=
id[4] % 1000;
6342 return ref _randColor;
6367 public void SetImage(Image image,
int dir,
int idSkin = 0)
6369 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6379 Sprite sprite = GetSprite();
6380 if (!c_idSpriteReplacer.IsEmpty())
6383 if (spriteReplacer !=
null)
6387 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6391 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6394 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6396 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6400 renderer.
ShowEmo(_emo, duration);
6408 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6413 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6418 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6423 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6426 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6428 Card rootCard = GetRootCard();
6435 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6460 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6466 Card rootCard = GetRootCard();
6470 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6478 Card rootCard = GetRootCard();
6501 public virtual void Rotate(
bool reverse =
false)
6504 if (sourceCard.
tiles.Length > 4)
6506 num = sourceCard.
tiles.Length;
6568 fx = fx - vector.x + thingPosition.x;
6569 fy = fy - vector.y + thingPosition.y;
6573 float num2 = (fy = 0f);
6597 renderParam.x = v.x;
6598 renderParam.y = v.y;
6599 renderParam.z = v.z;
6601 v.x = renderParam.
x;
6602 v.y = renderParam.
y;
6603 v.z = renderParam.
z;
6617 v.z += thingPosition.z;
6624 if (useCurrentPosition)
6639 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6650 EClass.player.lightRadius = 1;
6658 return GetLightRadius() > 0;
6666 return 0.01f * LightData.color.a * 256f * 1.12f;
6668 if (IsPCFaction && !IsPC)
6734 num2 = traitLightSource.LightRadius;
6739 if (lightRadius > 0)
6741 if (lightRadius > num2)
6761 int radius = GetLightRadius();
6766 float power = GetLightPower();
6787 EClass.player.lightRadius = radius;
6788 EClass.player.lightPower = power;
6794 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6805 int num = (trait.UseLightColor ? c_lightColor : 0);
6808 fov.r = (byte)(num / 1024);
6809 fov.g = (byte)(num % 1024 / 32);
6810 fov.b = (byte)(num % 32);
6851 if (fov !=
null && fov.
lastPoints.Count != 0)
6870 things.ForeachReverse(delegate(
Thing t)
6874 if (sourceCard.
_origin ==
"dish")
6882 else if (!isChara && trait.
Decay != 0)
6884 Decay(trait.
Decay * hour);
6902 int num2 = MaxDecay / 4 * 3;
6907 num =
card.trait.DecaySpeedChild;
6909 num = num * trait.DecaySpeed / 100;
6910 int num3 = Evalue(405);
6913 num = num * (100 - num3 * 2) / 100;
6925 if (decay + a > MaxDecay)
6927 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6936 card.AddCard(thing);
6937 if (!IsParentLocked())
6939 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6948 else if (GetRootCard() ==
EClass.
pc)
6950 if (!IsParentLocked())
6962 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6964 if (!IsParentLocked())
6971 bool IsParentLocked()
6973 if (parent is
Thing)
6975 return (parent as
Thing).c_lockLv > 0;
6983 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6986 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6990 EClass.player.forceTalk =
false;
6994 EClass.player.forceTalk =
false;
6995 if (!isSynced && !forceSync)
7000 GameLang.refDrama1 = ref1;
7001 GameLang.refDrama2 = ref2;
7002 string text = GetTalkText(idTopic, stripPun:
true);
7004 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7010 switch ((condition !=
null) ? condition.
chara.
id :
id)
7023 TalkRaw(text, ref1, ref2, forceSync);
7026 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7028 if ((!isSynced && !forceSync) || text.IsEmpty())
7035 text = text.Replace(
"#1", ref1);
7039 text = text.Replace(
"#2", ref2);
7041 HostRenderer.Say(ApplyNewLine(text));
7042 text = StripTalkSpeiclaCharacters(text);
7043 bool flag = text.StartsWith(
"*");
7047 text = text.Bracket();
7049 Msg.
Say(text.Replace(
"&",
""));
7058 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7060 return text.Substring(2);
7066 return text.Substring(1);
7073 if (text.Contains(
"&"))
7075 string text2 =
"_comma".lang();
7076 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7077 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7078 text = text.Replace(
"&", Environment.NewLine ??
"");
7083 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7085 if (isSynced && !text.IsEmpty())
7089 text = text.Replace(
"#1", ref1);
7093 text = text.Replace(
"#2", ref2);
7095 HostRenderer.Say(text);
7101 Say(
"nothingHappens");
7104 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7113 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7122 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7131 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7135 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7136 if (!text.IsEmpty())
7138 text = text.Split(
'|').RandomItem();
7139 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7141 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7143 text =
"(" + text +
")";
7145 text = text.Replace(
"。)",
")");
7148 return ApplyTone(text, stripPun);
7154 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7157 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7163 string[] array = _tones.IsEmpty(
"").Split(
'|');
7164 string key = array[0];
7169 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7173 if (array[0].IsEmpty())
7182 if (array.Length >= 2)
7184 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7186 if (array.Length >= 3)
7188 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7191 text2 = stringBuilder.ToString();
7195 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7206 return text2.StripLastPun();
7221 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7222 if (list.Count != 0)
7224 int mtp = EClass.core.config.test.extraToneMTP
switch
7237 string text = list.RandomItem()[
"id"];
7238 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7245 return ListCraftBonusTraits().Count > 0;
7250 List<Element> list =
new List<Element>();
7251 string[] tag = sourceCard.
tag;
7252 for (
int i = 0; i < tag.Length; i++)
7254 string[] array = tag[i].Split(
'/');
7255 if (!(array[0] !=
"craft_bonus"))
7271 if (dest.
stack !=
null)
7275 Say(
"stack_thing", t, dest.
stack);
7289 c_idBacker = row.
id;
7295 chara.hostility = hostility2;
7301 Chara.idFaith = row.
deity.ToLowerInvariant();
7306 if (
id ==
"putty_snow")
7319 if (c_idBacker == 164)
7332 c_textureData = GetPaintData();
7342 Sprite sprite = GetSprite();
7343 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7344 int num = sprite.texture.width * 2;
7345 int num2 = sprite.texture.height * 2;
7346 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7347 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7348 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7349 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7350 texture2D2.SetPixels(pixels);
7352 byte[] result = texture2D2.EncodeToJPG();
7353 UnityEngine.Object.Destroy(texture2D);
7354 UnityEngine.Object.Destroy(texture2D2);
7360 if ((
bool)_paintSprite)
7362 UnityEngine.Object.Destroy(_paintSprite.texture);
7363 UnityEngine.Object.Destroy(_paintSprite);
7364 _paintSprite =
null;
7372 byte[] data = c_textureData;
7373 Texture2D texture2D =
new Texture2D(1, 1);
7374 texture2D.LoadImage(data);
7375 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7379 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7382 return _paintSprite;
7387 if (!(GetRestrainer() ==
null || force))
7391 isRestrained =
false;
7392 Say(
"unrestrained",
this);
7403 if (c_rescueState ==
RescueState.WaitingForRescue)
7417 c.DoHostileAction(
item, immediate:
true);
7444 result = row.value * mat.value / 100;
7481 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7482 if (
id ==
"plat" && !sell)
7493 num2 += (float)c_priceCopy * 0.2f;
7494 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7498 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7500 if (IsFood && !
material.tag.Contains(
"food"))
7505 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7523 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7525 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7527 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7528 if (IsEquipmentOrRanged)
7533 num4 += value.
source.value;
7535 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7536 if (rarity >=
Rarity.Legendary)
7538 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7546 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7548 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)))));
7552 num2 *= (float)(tier + 1);
7559 if (priceType ==
PriceType.CopyShop && sell)
7565 if (
id ==
"littleball")
7572 if (
id ==
"crimale2")
7580 case "ticket_fortune":
7586 case "scroll_alias":
7588 case "scroll_biography":
7603 if (!(text ==
"mathammer"))
7605 if (!(text ==
"water_jure"))
7611 return 50 + material.tier * material.tier * 10;
7624 case "hammer_strip":
7654 case "diary_sister":
7658 case "diary_catsister":
7660 case "container_magic":
7662 case "wrench_tent_elec":
7664 case "wrench_tent_soil":
7666 case "wrench_tent_seabed":
7670 case "wrench_storage":
7672 case "wrench_fridge":
7674 case "wrench_extend_v":
7676 case "wrench_extend_h":
7682 case "hammer_garokk":
7684 case "scroll_random":
7698 if (!sell &&
id ==
"casino_coin")
7702 int value = GetValue(priceType, sell);
7712 Trait trait = this.trait;
7717 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7722 p *= 1f + 0.5f * (float)c_containerSize;
7725 if (c_priceFix != 0)
7727 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7737 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7748 if (!sell && category.
id ==
"spellbook")
7752 bool flag = priceType ==
PriceType.CopyShop;
7753 int num = ((!flag) ? 1 : 5);
7754 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7755 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7756 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7761 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7763 p *= 0.20000000298023224;
7766 p *= 0.20000000298023224;
7769 p *= 0.20000000298023224;
7773 p *= 0.20000000298023224;
7779 if ((uint)(priceType - 1) <= 1u)
7791 if (
id ==
"rod_wish")
7793 p *= (sell ? 0.01f : 50f);
7808 p *= 0.20000000298023224;
7812 p *= 0.10000000149011612;
7815 p *= 0.0020000000949949026;
7818 p *= 0.00019999999494757503;
7821 p *= 0.004999999888241291;
7832 p *= (flag ? 1.25f : 0.3f);
7836 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7840 p *= (flag ? 0.9f : 0.5f);
7852 p *= 1f + 0.2f * (float)c.Evalue(1406);
7865 p *= 1.100000023841858;
7899 else if (category.
IsChildOf(
"furniture"))
7919 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7926 p = ((!sell) ? 1 : 0);
7934 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7936 else if (p > 10000.0)
7938 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7940 else if (p > 1000.0)
7942 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7946 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7950 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7958 if (p > (
double)(sell ? 500000000 : 1000000000))
7971 return Name + GetExtraName();
7988 ForeachPoint(delegate(
Point p,
bool main)
7990 int num2 = DistMulti(p, c);
7998 return DistMulti(pos, c);
8030 isCensored = enable;
8040 if (isDeconstructing != deconstruct)
8050 isDeconstructing = deconstruct;
8064 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8067 sortVal = -GetPrice(
currency) * 1000;
8070 sortVal = -Num * 1000;
8073 sortVal = category.sortVal * 1000;
8076 sortVal = -ChildrenAndSelfWeight * 1000;
8079 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8082 sortVal = -GetPrice(
currency) * 1000;
8085 sortVal = sourceCard._index * 1000;
8095 num =
id.CompareTo(c.
id);
8115 num = encLV - c.
encLV;
8134 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8152 action(pos, arg2:
true);
8166 SE.Play(
"pop_paper");
8196 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8209 if (!HaveFur() || c_fur < 0)
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
virtual bool CancelWhenDamaged
static void LoveMiracle(Chara tc, Chara c, int power, EffectId idEffect=EffectId.Love, BlessedState? state=null)
static void TryDelay(Action a)
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
void Add(Act a, string s="")
virtual bool IsRoofEditMode(Card c=null)
virtual void OnInstallCard(Card t)
virtual void OnUninstallCard(Card t)
static void ProcShieldEncs(Chara CC, Card TC, int mtpChance=100)
static void GakiConvert(ref string text, string idLang="zako")
Dictionary< int, int > mapInt
void SetStr(int id, string value=null)
void SetObj(int id, object o)
string GetStr(int id, string defaultStr=null)
int GetInt(int id, int? defaultInt=null)
void SetInt(int id, int value=0)
Dictionary< int, string > mapStr
void Mod(int a, bool force=false)
SourceElement.Row sourceElement
void WaitForEndOfFrame(Action action)
List< Action > actionsNextFrame
virtual void RefreshPosition()
static void PublishEvent(string eventId, object data=null)
virtual ConditionType Type
static int GetColorInt(ref Color matColor, int p)
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
Vector3 GetThingPosition(Card tg, Point p)
void SetPortrait(Chara c)
virtual void RefreshSprite()
static void SetRarity(Rarity q=Rarity.Normal)
static CardBlueprint current
static void Set(CardBlueprint _bp=null)
static CardBlueprint _Default
GlobalCharaList globalCharas
void ShowEmo(Emo emo, float duration=0f)
void PlayAnime(AnimeID id, bool force)
override void Draw(RenderParam p)
virtual void SetOwner(Card c)
virtual void SetFirst(bool first, Vector3 pos)
void SetCensored(bool enable)
int CountRune(bool countFree=true)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
virtual string AliasMaterialOnCreate
virtual string GetName(NameStyle style, int num=-1)
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
virtual string GetHoverText()
void Teleport(Point point, bool silent=false, bool force=false)
virtual string GetExtraName()
ContainerUpgrade c_containerUpgrade
void PurgeDuplicateArtifact(Thing af)
void RemoveEditorTag(EditorTag tag)
void ApplySocket(int id, int lv, Card mod=null)
SocketData AddRune(Card rune)
bool CanAddRune(TraitMod mod)
void Say(string lang, Card c1, Card c2, string ref1=null, string ref2=null)
virtual void ApplyMaterialElements(bool remove)
virtual void OnSimulateHour(VirtualDate date)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
void SetCensored(bool enable)
ElementContainerCard elements
void _OnDeserialized(StreamingContext context)
bool IsRestrainedResident
SourceBacker.Row sourceBacker
bool TryReserve(AIAct act)
Hostility c_originalHostility
bool IsExcludeFromCraft(Recipe.Ingredient ing)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
void AddBlood(int a=1, int id=-1)
void SetRandomLightColors()
CardRenderer HostRenderer
void OnChildNumChange(Card c)
int Evalue(int ele, bool ignoreGlobalElement)
bool IsStackable(Thing tg)
bool HasElement(string id, int req=1)
void Explode(Point p, Card origin)
SourceMaterial.Row DyeMat
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
void MakeRefFrom(Card c1, Card c2=null, bool simple=false)
Card MakeRefFrom(string id)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
void DamageHP(long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
int GetCurrency(string id="money")
void ForeachPoint(Action< Point, bool > action)
void Dye(SourceMaterial.Row mat)
virtual bool IsPCPartyMinion
string c_idSpriteReplacer
SourceMaterial.Row _material
bool HasElement(int ele, int req)
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
void ModExpParty(int ele, int a)
bool HasTalk(string idTopic)
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
void DecayNatural(int hour=1)
bool IsInMutterDistance(int d=10)
virtual void OnCreate(int genLv)
virtual void LookAt(Card c)
void RenderMarker(Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
virtual long ApplyProtection(long dmg, int mod=100)
void MakeFoodRef(Card c1, Card c2=null)
MoveResult TryMoveFrom(Point p)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
bool HasCraftBonusTrait()
virtual void Rotate(bool reverse=false)
Card SetHidden(bool hide=true)
void SetFreePos(Point point)
int GetDaysTogetherBonus()
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
TraitShackle GetRestrainer()
virtual void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
bool CanReserve(AIAct act)
virtual void OnSerializing()
Window.SaveData c_windowSaveData
BlessedState blessedState
void PlaySoundDrop(bool spatial=true)
ref Color GetRandomColor()
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void TryUnrestrain(bool force=false, Chara c=null)
RescueState c_rescueState
void SetImage(Image image, int dir, int idSkin=0)
virtual CardRow sourceCard
void ModExp(string alias, int a)
List< Element > ListCraftBonusTraits()
int ChildrenAndSelfWeight
int GetTotalQuality(bool applyBonus=true)
Thing Add(string id, int num=1, int lv=1)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void SetDeconstruct(bool deconstruct)
virtual void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
virtual MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
void ModNum(int a, bool notify=true)
void Kick(Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Condition AddCondition(string id, int p=100, bool force=false)
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
void SetFeat(int id, int value=1, bool msg=false)
override string ToString()
ElementContainer tempElements
List< Condition > conditions
bool HasCondition(string alias)
override bool IsPCFaction
void CalculateMaxStamina()
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
ConBaseTransmuteMimic mimicry
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 bool ShouldRevealOnDamage
virtual bool ShouldRevealOnContact
virtual void RevealMimicry(Card c, bool surprise)
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
static long GetResistDamage(long dmg, int v, int power=0)
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
void ModExp(int ele, int a)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
static Religion recentWrath
static Religion GetArtifactDeity(string id)
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(string suffix="")
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
long GetCurrency(string id, ref long sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
void OnBarter(bool reroll=false)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
virtual int SightRadiusBonus
Chara SpawnMob(string id, Point pos=null)
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)