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;
1020 SetInt(103, value ? 1 : 0);
1032 SetInt(109, value ? 1 : 0);
1044 SetInt(63, value ? 1 : 0);
1056 SetInt(64, value ? 1 : 0);
1068 SetInt(120, value ? 1 : 0);
1080 SetInt(121, value ? 1 : 0);
1092 SetInt(122, value ? 1 : 0);
1790 return GetObj<UniqueData>(6);
1802 return GetObj<Thing>(9);
1814 return GetObj<List<SocketData>>(17);
1826 return GetObj<Thing>(10);
1850 return GetObj<CharaUpgrade>(11);
1862 return GetObj<LoveData>(20);
1874 return GetObj<CharaGenes>(15);
1886 return GetObj<List<int>>(16);
1910 return GetObj<DNA>(14);
1922 return GetObj<CharaList>(13);
1934 return GetObj<MixedFoodData>(18);
1946 return GetObj<Thing>(19);
1958 return GetObj<byte[]>(4);
2034 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2057 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2145 if (
Tiles.Length == 1)
2147 return dir % 2 == 1;
2211 return id ==
"grass";
2343 if (
Tiles.Length < 3)
2417 return bio.gender == 2;
2569 if (
card.isSale || !
card.trait.CanUseContent)
2574 if (windowSaveData !=
null)
2586 EClass.player.wasDirtyWeight =
true;
2604 public int Evalue(
int ele,
bool ignoreGlobalElement)
2630 return c_editorTags?.Contains(tag.ToString()) ??
false;
2663 int num2 =
item.Value;
2723 for (
int i = 0; i <
sockets.Count; i++)
2741 thing.parent =
this;
2791 CardBlueprint.current =
null;
2842 if (
id ==
"microchip")
2923 EClass._zone.Boss =
Chara;
2965 int num = elementContainer.Value(value.
id);
2995 public void AddExp(
int a,
bool applyMod =
true)
3020 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3024 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 +
Evalue(1275) * 50) / 100;
3055 Say(
"dingExp",
this);
3070 int num = Mathf.Min(1 +
LV / 5, 20);
3071 for (
int i = 0; i < num; i++)
3073 if (
Evalue(1644) < i + 1)
3111 if (rootCard !=
null && rootCard.
IsPC)
3166 Debug.LogWarning(
"already child:" + t);
3171 Debug.Log(
"already in the list" + t);
3186 t.ignoreAutoPick =
false;
3230 if (rootCard !=
null && rootCard.
IsPC)
3239 t.isNPCProperty =
false;
3253 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3256 void TryAdd(
Thing a)
3258 if (!ings.Contains(a.
id))
3276 List<Chara> list =
new List<Chara>();
3292 if (!
item.IsPCFactionOrMinion)
3297 if (list2.Count == 0)
3301 foreach (
Thing item2
in list2)
3306 item.body.Unequip(item2);
3308 item2.c_idDeity = artifactDeity?.
id ??
null;
3309 Msg.
Say(
"waterCurse", item2);
3313 foreach (
Chara item3
in list)
3320 if (list3.Count == 0)
3324 foreach (
Thing item4
in list3)
3326 Msg.
Say(
"destroyed_inv_", item4, item3);
3338 List<Chara> list =
new List<Chara>();
3352 if (
item.IsPCFactionOrMinion)
3366 for (
int num =
things.Count - 1; num >= 0; num--)
3377 rootCard.Chara.held =
null;
3383 instance.selectedButton.card =
null;
3386 ActionMode.AdvOrRegion.updatePlans =
true;
3403 if (thing.
invY == 1)
3405 WidgetCurrentTool.dirty =
true;
3409 if (thing.
props !=
null)
3417 WidgetHotbar.dirtyCurrentItem =
true;
3418 thing.parent =
null;
3423 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3430 thing.parent =
null;
3439 return EClass.ui.layers.Count > 0;
3461 to.c_isImportant =
true;
3486 return card.GetRootCard();
3513 thing.encLV =
encLV;
3514 thing.decay =
decay;
3517 foreach (KeyValuePair<int, int>
item in mapInt)
3521 foreach (KeyValuePair<int, string> item2
in mapStr)
3523 thing.
mapStr[item2.Key] = item2.Value;
3529 thing.sockets = IO.DeepCopy(
sockets);
3545 ModNum(-a, notify:
false);
3557 return this as
Thing;
3560 return this as
Thing;
3566 return this as
Thing;
3569 public void ModNum(
int a,
bool notify =
true)
3608 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3614 for (
int i = 0; i <
sockets.Count; i++)
3632 for (
int i = 0; i <
sockets.Count; i++)
3638 int ele = num / 1000;
3639 int num2 = num % 1000;
3734 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3740 string encSlot = source.
encSlot;
3741 if (encSlot ==
null || encSlot.Length != 0)
3754 string[] array = source.
encSlot.Split(
',');
3755 foreach (
string key
in array)
3803 if (this.placeState == newState)
3809 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3821 float num2 = (
fy = 0f);
3832 this.placeState = newState;
3840 this.placeState = newState;
3895 num = num * (100 +
Quality) / 100;
3932 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3979 public bool TryPay(
int a,
string id =
"money")
3986 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3990 if (
IsPC && !(
id ==
"ration"))
4010 Say(
"spellbookCrumble",
this);
4019 if (
id ==
"influence")
4031 if (
id ==
"influence")
4062 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4064 if (num > 100000000)
4096 int num =
PV + orCreateElement.Value +
DEX / 10;
4103 num2 = num3 / 10 + 1;
4104 sides = num3 / num2 + 1;
4106 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4108 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4109 dmg -= num4 * mod / 100;
4119 DamageHP(dmg, 0, 0, attackSource, origin);
4128 bool flag = originalTarget !=
null;
4129 Action onEvade =
null;
4138 Say(
"wall_bond", chara3,
this);
4147 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4153 int num = chara4.
Evalue(1241);
4154 int num2 = chara4.
Evalue(438);
4157 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4166 if (origin !=
null && origin.HasElement(1208))
4168 switch (attackSource)
4171 dmg = dmg * 130 / 100;
4172 eleP = eleP * 150 / 100;
4175 dmg = dmg * 120 / 100;
4176 eleP = eleP * 150 / 100;
4182 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4185 if (ele == 0 || ele == 926)
4190 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4196 if (attackSource !=
AttackSource.Condition && showEffect)
4206 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4210 if (origin.HasElement(1247))
4215 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4219 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4224 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4225 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4232 if (chara2 !=
null && chara2.
isWet)
4241 if (chara !=
null && chara.
isWet)
4243 dmg = dmg * 150 / 100;
4249 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4257 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4259 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4268 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4273 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4275 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4282 dmg = dmg * 90 / 100;
4286 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4290 dmg = dmg * 90 / 100;
4309 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4313 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4318 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4320 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4322 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4330 int num7 =
MaxHP / 10;
4331 long num8 = dmg - num7;
4332 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4348 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4359 if (hp < 0 && Chara.mana.value >= 0)
4375 Chara.mana.value -= (int)dmg;
4392 float ratio = (float)dmg / (
float)
MaxHP;
4403 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4405 aI_PracticeDummy.hit++;
4406 aI_PracticeDummy.totalDamage += dmg;
4449 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4458 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4479 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4481 EClass.player.invlunerable =
true;
4520 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4527 text =
"dead_" + e.
source.alias;
4531 text =
"dead_attack";
4539 text =
"kill_" + e.source.alias;
4543 text =
"kill_attack";
4545 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4553 Say(
"reboot",
this);
4560 if (HasCondition<ConRebirth>())
4562 Say(
"rebirth",
this);
4574 Msg.alwaysVisible =
true;
4575 Msg.
Say(
"layhand", chara5,
this);
4576 Msg.
Say(
"pray_heal",
this);
4586 if (zoneInstanceBout !=
null)
4618 Die(e, origin, attackSource, originalTarget);
4624 string text2 =
new int[18]
4626 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4627 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4628 }.RandomItem().ToString();
4631 text2 =
"casino_coin";
4635 text2 =
"scratchcard";
4663 if (origin !=
null && origin.isChara)
4685 if (origin.GetInt(106) == 0)
4687 origin.Chara.TalkTopic(
"kill");
4692 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4694 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4698 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4699 if (num9 >= (
float)num13)
4703 Say(
"dmg_" + e.source.alias,
this);
4707 Say(
"dmg" + num9,
this);
4730 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4734 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4738 int num14 = origin.Dist(
this);
4742 if (
id ==
"hedgehog_ether")
4746 Say(
"reflect_thorne", origin,
this);
4747 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4752 Say(
"reflect_acid",
this, origin);
4753 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4765 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4776 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4786 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4792 Condition.ignoreEffect =
true;
4794 Condition.ignoreEffect =
false;
4798 float num16 = (float)
hp / (
float)
MaxHP;
4805 PlaySound(
"heartbeat", 1f - num16 * 2f);
4838 EClass.player.forceTalk =
true;
4840 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4851 void EvadeDeath(Action action)
4856 Chara.mana.value = 0;
4870 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4872 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4873 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4876 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4877 origin.Chara.stamina.Mod(num17);
4883 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4885 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4886 origin.Chara.mana.Mod(num18);
4892 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4894 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4895 origin.Chara.mana.Mod(num19);
4912 bool hostile =
false;
4916 if (Chance(30 + eleP / 5, 100))
4918 MarkHostile().AddCondition<
ConBurning>(eleP);
4924 if (Chance(30 + eleP / 10, 100))
4929 else if (Chance(50 + eleP / 10, 100))
4935 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4941 if (Chance(30 + eleP / 5, 100))
4943 MarkHostile().AddCondition<
ConPoison>(eleP);
4947 if (Chance(30 + eleP / 5, 100))
4954 if (Chance(30 + eleP / 5, 100))
4963 if (Chance(30 + eleP / 5, 100))
4968 else if (Chance(30 + eleP / 5, 100))
4974 if (Chance(50 + eleP / 10, 100))
4982 if (Chance(30 + eleP / 5, 100))
5001 if (Chance(5 + eleP / 25, 40))
5005 if (Chance(5 + eleP / 25, 40))
5009 if (Chance(5 + eleP / 25, 40))
5013 if (Chance(5 + eleP / 25, 40))
5015 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5017 if (Chance(5 + eleP / 25, 40))
5021 if (Chance(5 + eleP / 25, 40))
5025 if (Chance(30 + eleP / 10, 100))
5031 if (Chance(50 + eleP / 10, 100))
5033 MarkHostile().AddCondition<
ConBleed>(eleP);
5037 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5050 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5054 static bool Chance(
int a,
int max)
5056 return Mathf.Min(a, max) >
EClass.
rnd(100);
5067 Card rootCard = GetRootCard();
5069 if (_pos !=
null && !_pos.
IsValid)
5080 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5081 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5083 text += e.source.alias;
5087 Msg.
Say(text,
this, rootCard);
5092 Msg.
Say(
"destroyed",
this);
5097 things.ForeachReverse(delegate(
Thing t)
5106 if (e !=
null && _pos !=
null && e.id == 21)
5112 Explode(pos, origin);
5120 origin = origin?.Chara,
5122 aliasEle =
"eleImpact"
5128 PlaySound(
material.GetSoundDead(sourceCard));
5136 Debug.Log(Name +
" is already destroyed.");
5147 Chara.isDead =
true;
5165 for (
int num = things.Count - 1; num >= 0; num--)
5167 things[num].Destroy();
5174 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5180 List<Card> list =
new List<Card>();
5181 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5184 if (this.rarity >=
Rarity.Legendary)
5217 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5229 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5237 if (flag2 && !isUserZone)
5240 bool num2 = text ==
"_meat";
5252 text =
"meat_marble";
5255 if (thing3.
source._origin ==
"meat")
5269 if (!IsPCFaction && !isUserZone)
5271 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5273 string[] array = item2.
Split(
'/');
5274 int num4 = array[1].ToInt();
5323 if (!isBackerContent && !flag)
5359 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5369 if (text2 ==
"big_daddy" || text2 ==
"santa")
5377 List<Thing> list2 =
new List<Thing>();
5378 foreach (
Thing thing4
in things)
5404 if (num5 > 0 && list2.Count > 0)
5407 for (
int j = 0; j < list2.Count && j < num5; j++)
5413 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5416 foreach (
Card item3
in list)
5425 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5430 for (
int k = 0; k < num5; k++)
5453 foreach (
Thing thing5
in things)
5455 if (thing5.
GetInt(116) != 0)
5460 Point nearestPoint = GetRootCard().pos;
5465 foreach (
Card item4
in list)
5471 item4.isHidden =
false;
5472 item4.isNPCProperty =
false;
5529 case "egg_fertilized":
5534 string text =
"c_wilds";
5535 if (
id ==
"_meat" ||
id ==
"meat_marble")
5543 for (
int i = 0; i < 20; i++)
5546 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5556 if (crafter !=
null && crafter.id ==
"big_sister")
5558 cardRow = crafter.source;
5563 if (c_idRefCard.IsEmpty())
5565 MakeRefFrom(cardRow.
model);
5570 MakeFoodFrom(cardRow.
model);
5572 return this as
Thing;
5578 return this as
Thing;
5595 int num = race.
food[0].ToInt();
5596 bool flag =
id ==
"meat_marble";
5598 bool flag2 = category.
IsChildOf(
"meat");
5610 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5613 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5615 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5619 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5637 foreach (
Element value
in c.elements.dict.Values)
5639 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5644 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5645 foreach (KeyValuePair<int, int>
item in race.elementMap)
5649 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5652 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5653 for (
int i = 0; i < num2 && i < list.Count; i++)
5655 Tuple<int, int> tuple = list[i];
5656 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5658 if (c.Chara.IsUndead)
5660 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5662 isWeightChanged =
true;
5663 c_weight = race.height * 4 + 100;
5664 c_idMainElement = c.c_idMainElement;
5666 int num3 = c.LV - c.sourceCard.LV;
5672 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5676 if (flag2 && c.IsPCFaction && c.IsUnique)
5691 if (IsIgnoreName(
card))
5695 if (IsIgnoreName(card2))
5699 if (
card ==
null && card2 !=
null)
5706 MakeRefFrom(
card, card2);
5707 if (
card.c_idRefCard !=
null)
5709 c_idRefCard =
card.c_idRefCard;
5710 c_altName = TryGetFoodName(
card);
5715 c_altName2 = TryGetFoodName(card2);
5718 static bool IsIgnoreName(
Card c)
5748 if (!row.aka.IsEmpty())
5750 if (row.name ==
"*r" && row.aka ==
"*r")
5752 return "corpseGeneral".lang();
5754 if (row.name ==
"*r")
5756 return row.GetText(
"aka");
5759 return row.GetName();
5764 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5780 c_idRefCard = c1.
id;
5784 c_idRefCard2 = c2.id;
5785 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5787 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5801 thing.c_idMainElement = c_idMainElement;
5810 return GiveBirth(thing, effect);
5828 int num2 = LV - sourceCard.
LV;
5833 if (num2 >= 10 && !HasElement(1290))
5841 return GiveBirth(thing, effect);
5847 EClass.player.forceTalk =
true;
5848 card.Talk(
"giveBirth");
5852 card.pos.PlayEffect(
"revive");
5853 card.pos.PlaySound(
"egg");
5865 string[] array =
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" };
5869 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5871 PlaySound(
"egghatch");
5880 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5933 SayNothingHappans();
5936 PlayEffect(
"teleport");
5939 Say(
"antiTeleport",
this);
5940 PlaySound(
"gravity");
5945 PlaySound(
"teleport");
5946 Say(
"teleported",
this);
5955 if (chara.
enemy ==
this)
5966 EClass.player.haltMove =
true;
5968 PlayEffect(
"teleport", useRenderPos:
false);
5975 PlayEffect(
"ripple");
5976 PlaySound(
"Footstep/water");
5987 int num = p.x - pos.
x;
5988 int num2 = p.z - pos.
z;
6005 if (num == 0 && num2 == 0)
6015 return TryMove(point, allowDestroyPath:
false);
6022 return _Move(newPoint);
6025 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6029 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6033 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6035 if (!IsAliveInCurrentZone)
6061 Say(
"kick",
this, t);
6092 if (elements.
Value(ele) <= 0)
6094 if (includeNagative)
6096 return elements.
Value(ele) < 0;
6105 return elements.
Value(ele) >= req;
6120 if (HasElement(764))
6124 if (HasElement(759))
6128 if (HasElement(703))
6132 if (HasElement(758))
6136 if (HasElement(704))
6154 for (
int i = 0; i < a; i++)
6165 shared.color = 11010048f;
6166 shared.liquidLv = 0;
6168 SetRenderParam(shared);
6188 isDyed = mat !=
null;
6189 c_dyeMat = mat?.id ?? 0;
6201 else if (isElemental)
6237 int num = EClass.game.seed + refVal;
6238 num +=
id[0] % 10000;
6241 num +=
id[1] % 1000;
6244 num +=
id[2] % 1000;
6247 num +=
id[3] % 1000;
6250 num +=
id[4] % 1000;
6259 return ref _randColor;
6284 public void SetImage(Image image,
int dir,
int idSkin = 0)
6286 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6296 Sprite sprite = GetSprite();
6297 if (!c_idSpriteReplacer.IsEmpty())
6300 if (spriteReplacer !=
null)
6304 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6308 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6311 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6313 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6317 renderer.
ShowEmo(_emo, duration);
6325 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6330 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6335 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6340 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6343 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6345 Card rootCard = GetRootCard();
6352 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6377 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6383 Card rootCard = GetRootCard();
6387 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6395 Card rootCard = GetRootCard();
6418 public virtual void Rotate(
bool reverse =
false)
6421 if (sourceCard.
tiles.Length > 4)
6423 num = sourceCard.
tiles.Length;
6485 fx = fx - vector.x + thingPosition.x;
6486 fy = fy - vector.y + thingPosition.y;
6490 float num2 = (fy = 0f);
6514 renderParam.x = v.x;
6515 renderParam.y = v.y;
6516 renderParam.z = v.z;
6518 v.x = renderParam.
x;
6519 v.y = renderParam.
y;
6520 v.z = renderParam.
z;
6534 v.z += thingPosition.z;
6541 if (useCurrentPosition)
6556 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6567 EClass.player.lightRadius = 1;
6575 return GetLightRadius() > 0;
6583 return 0.01f * LightData.color.a * 256f * 1.12f;
6585 if (IsPCFaction && !IsPC)
6651 num2 = traitLightSource.LightRadius;
6656 if (lightRadius > 0)
6658 if (lightRadius > num2)
6678 int radius = GetLightRadius();
6683 float power = GetLightPower();
6703 radius += EvalueMax(490);
6704 EClass.player.lightRadius = radius;
6705 EClass.player.lightPower = power;
6711 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6722 int num = (trait.UseLightColor ? c_lightColor : 0);
6725 fov.r = (byte)(num / 1024);
6726 fov.g = (byte)(num % 1024 / 32);
6727 fov.b = (byte)(num % 32);
6768 if (fov !=
null && fov.
lastPoints.Count != 0)
6787 things.ForeachReverse(delegate(
Thing t)
6791 if (sourceCard.
_origin ==
"dish")
6799 else if (!isChara && trait.
Decay != 0)
6801 Decay(trait.
Decay * hour);
6819 int num2 = MaxDecay / 4 * 3;
6824 num =
card.trait.DecaySpeedChild;
6826 num = num * trait.DecaySpeed / 100;
6827 int num3 = Evalue(405);
6830 num = num * (100 - num3 * 2) / 100;
6842 if (decay + a > MaxDecay)
6844 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6853 card.AddCard(thing);
6854 if (!IsParentLocked())
6856 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6865 else if (GetRootCard() ==
EClass.
pc)
6867 if (!IsParentLocked())
6879 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6881 if (!IsParentLocked())
6888 bool IsParentLocked()
6890 if (parent is
Thing)
6892 return (parent as
Thing).c_lockLv > 0;
6900 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6903 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6907 EClass.player.forceTalk =
false;
6911 EClass.player.forceTalk =
false;
6912 if (!isSynced && !forceSync)
6917 GameLang.refDrama1 = ref1;
6918 GameLang.refDrama2 = ref2;
6919 string text = GetTalkText(idTopic, stripPun:
true);
6920 if (HasElement(1232) && idTopic !=
"baby")
6939 TalkRaw(text, ref1, ref2, forceSync);
6942 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6944 if ((!isSynced && !forceSync) || text.IsEmpty())
6951 text = text.Replace(
"#1", ref1);
6955 text = text.Replace(
"#2", ref2);
6957 HostRenderer.Say(ApplyNewLine(text));
6958 text = StripTalkSpeiclaCharacters(text);
6959 bool flag = text.StartsWith(
"*");
6963 text = text.Bracket();
6965 Msg.
Say(text.Replace(
"&",
""));
6974 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
6976 return text.Substring(2);
6982 return text.Substring(1);
6989 if (text.Contains(
"&"))
6991 string text2 =
"_comma".lang();
6992 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6993 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6994 text = text.Replace(
"&", Environment.NewLine ??
"");
6999 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7001 if (isSynced && !text.IsEmpty())
7005 text = text.Replace(
"#1", ref1);
7009 text = text.Replace(
"#2", ref2);
7011 HostRenderer.Say(text);
7017 Say(
"nothingHappens");
7020 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7029 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7038 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7047 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7051 if (!text.IsEmpty())
7053 text = text.Split(
'|').RandomItem();
7054 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7056 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7058 text =
"(" + text +
")";
7060 text = text.Replace(
"。)",
")");
7063 return ApplyTone(text, stripPun);
7069 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7072 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7078 string[] array = _tones.IsEmpty(
"").Split(
'|');
7079 string key = array[0];
7084 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7088 if (array[0].IsEmpty())
7097 if (array.Length >= 2)
7099 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7101 if (array.Length >= 3)
7103 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7106 text2 = stringBuilder.ToString();
7110 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7121 return text2.StripLastPun();
7136 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7137 if (list.Count != 0)
7139 int mtp = EClass.core.config.test.extraToneMTP
switch
7152 string text = list.RandomItem()[
"id"];
7153 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7160 return ListCraftBonusTraits().Count > 0;
7165 List<Element> list =
new List<Element>();
7166 string[] tag = sourceCard.
tag;
7167 for (
int i = 0; i < tag.Length; i++)
7169 string[] array = tag[i].Split(
'/');
7170 if (!(array[0] !=
"craft_bonus"))
7186 if (dest.
stack !=
null)
7190 Say(
"stack_thing", t, dest.
stack);
7198 ChangeRarity(
Rarity.Normal);
7204 c_idBacker = row.
id;
7210 chara.hostility = hostility2;
7216 Chara.idFaith = row.
deity.ToLowerInvariant();
7221 if (
id ==
"putty_snow")
7234 if (c_idBacker == 164)
7247 c_textureData = GetPaintData();
7257 Sprite sprite = GetSprite();
7258 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7259 int num = sprite.texture.width * 2;
7260 int num2 = sprite.texture.height * 2;
7261 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7262 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7263 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7264 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7265 texture2D2.SetPixels(pixels);
7267 byte[] result = texture2D2.EncodeToJPG();
7268 UnityEngine.Object.Destroy(texture2D);
7269 UnityEngine.Object.Destroy(texture2D2);
7275 if ((
bool)_paintSprite)
7277 UnityEngine.Object.Destroy(_paintSprite.texture);
7278 UnityEngine.Object.Destroy(_paintSprite);
7279 _paintSprite =
null;
7287 byte[] data = c_textureData;
7288 Texture2D texture2D =
new Texture2D(1, 1);
7289 texture2D.LoadImage(data);
7290 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7294 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7297 return _paintSprite;
7302 if (!(GetRestrainer() ==
null || force))
7306 isRestrained =
false;
7307 Say(
"unrestrained",
this);
7318 if (c_rescueState ==
RescueState.WaitingForRescue)
7332 c.DoHostileAction(
item, immediate:
true);
7359 result = row.value * mat.value / 100;
7396 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7397 if (
id ==
"plat" && !sell)
7408 num2 += (float)c_priceCopy * 0.2f;
7409 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7413 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7415 if (IsFood && !
material.tag.Contains(
"food"))
7420 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7438 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7440 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7442 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7443 if (IsEquipmentOrRanged)
7448 num4 += value.
source.value;
7450 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7451 if (rarity >=
Rarity.Legendary)
7453 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7461 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7463 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)))));
7467 num2 *= (float)(tier + 1);
7474 if (priceType ==
PriceType.CopyShop && sell)
7480 if (
id ==
"littleball")
7487 if (
id ==
"crimale2")
7495 case "ticket_fortune":
7514 case "hammer_strip":
7544 case "diary_sister":
7548 case "diary_catsister":
7550 case "container_magic":
7552 case "wrench_tent_elec":
7554 case "wrench_tent_soil":
7556 case "wrench_tent_seabed":
7560 case "wrench_storage":
7562 case "wrench_fridge":
7564 case "wrench_extend_v":
7566 case "wrench_extend_h":
7572 case "scroll_random":
7586 if (!sell &&
id ==
"casino_coin")
7590 int value = GetValue(priceType, sell);
7600 Trait trait = this.trait;
7605 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7610 p *= 1f + 0.5f * (float)c_containerSize;
7613 if (c_priceFix != 0)
7615 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7625 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7636 if (!sell && category.
id ==
"spellbook")
7640 bool flag = priceType ==
PriceType.CopyShop;
7641 int num = ((!flag) ? 1 : 5);
7642 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7643 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7644 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7649 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7651 p *= 0.20000000298023224;
7654 p *= 0.20000000298023224;
7657 p *= 0.20000000298023224;
7661 p *= 0.20000000298023224;
7667 if ((uint)(priceType - 1) <= 1u)
7679 if (
id ==
"rod_wish")
7681 p *= (sell ? 0.01f : 50f);
7696 p *= 0.20000000298023224;
7700 p *= 0.10000000149011612;
7703 p *= 0.0020000000949949026;
7706 p *= 0.00019999999494757503;
7709 p *= 0.004999999888241291;
7720 p *= (flag ? 1.25f : 0.3f);
7724 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7728 p *= (flag ? 0.9f : 0.5f);
7740 p *= 1f + 0.2f * (float)c.Evalue(1406);
7753 p *= 1.100000023841858;
7787 else if (category.
IsChildOf(
"furniture"))
7807 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7814 p = ((!sell) ? 1 : 0);
7822 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7824 else if (p > 10000.0)
7826 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7828 else if (p > 1000.0)
7830 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7834 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7838 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7846 if (p > (
double)(sell ? 500000000 : 1000000000))
7859 return Name + GetExtraName();
7876 ForeachPoint(delegate(
Point p,
bool main)
7878 int num2 = DistMulti(p, c);
7886 return DistMulti(pos, c);
7918 isCensored = enable;
7928 if (isDeconstructing != deconstruct)
7938 isDeconstructing = deconstruct;
7952 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7955 sortVal = -GetPrice(
currency) * 1000;
7958 sortVal = -Num * 1000;
7961 sortVal = category.sortVal * 1000;
7964 sortVal = -ChildrenAndSelfWeight * 1000;
7967 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7970 sortVal = -GetPrice(
currency) * 1000;
7973 sortVal = sourceCard._index * 1000;
7983 num =
id.CompareTo(c.
id);
8003 num = encLV - c.
encLV;
8022 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8040 action(pos, arg2:
true);
8054 SE.Play(
"pop_paper");
8084 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8097 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
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()
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)
MoveResult TryMoveFrom(Point p)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
bool HasCraftBonusTrait()
virtual void Rotate(bool reverse=false)
Card SetHidden(bool hide=true)
void SetFreePos(Point point)
int GetDaysTogetherBonus()
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
TraitShackle GetRestrainer()
virtual void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
bool CanReserve(AIAct act)
virtual void OnSerializing()
Window.SaveData c_windowSaveData
BlessedState blessedState
void PlaySoundDrop(bool spatial=true)
ref Color GetRandomColor()
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void TryUnrestrain(bool force=false, Chara c=null)
RescueState c_rescueState
void SetImage(Image image, int dir, int idSkin=0)
virtual CardRow sourceCard
void ModExp(string alias, int a)
List< Element > ListCraftBonusTraits()
int ChildrenAndSelfWeight
int GetTotalQuality(bool applyBonus=true)
Thing Add(string id, int num=1, int lv=1)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void SetDeconstruct(bool deconstruct)
virtual void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
virtual MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
void ModNum(int a, bool notify=true)
void Kick(Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Condition AddCondition(string id, int p=100, bool force=false)
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
void SetFeat(int id, int value=1, bool msg=false)
override string ToString()
ElementContainer tempElements
List< Condition > conditions
bool HasCondition(string alias)
ConTransmuteMimic mimicry
override bool IsPCFaction
void CalculateMaxStamina()
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
void TrySetEnemy(Chara c)
bool HasCooldown(int idEle)
bool DroppedCard(string id)
CodexCreature GetOrCreate(string id)
void MarkCardDrop(string id)
UD_String_LightData lightColors
UD_String_MatData matColors
virtual void RevealMimicry(Card c, bool surprise)
virtual void OnCalculateFov(Fov fov, ref int radius, ref float power)
void Kill(bool silent=false)
virtual void OnCreateFov(Fov fov)
bool dontCancelIfZeroDamage
static Thing CopyDNA(Thing from, Thing to)
static Thing GenerateRandomGene(int lv=-1, int seed=-1)
void Add(Card target, Card attacker, int dmg, Element e=null)
int GetRaw(int offsetHours=0)
static int Roll(int num, int sides, int bonus=0, Card card=null)
static int curve(long _a, int start, int step, int rate=75)
static ColorProfile Colors
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int 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 Religion GetArtifactDeity(string id)
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(bool snow=false)
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
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)