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")]
260 return 0.001f * (float)
_ints[15];
264 _ints[15] = (int)(value * 1000f);
272 return 0.001f * (float)
_ints[16];
276 _ints[16] = (int)(value * 1000f);
288 _ints[17] = (int)value;
300 _ints[18] = (int)value;
324 _ints[19] = (int)value * 100;
1034 SetInt(103, value ? 1 : 0);
1046 SetInt(109, value ? 1 : 0);
1058 SetInt(63, value ? 1 : 0);
1070 SetInt(64, value ? 1 : 0);
1082 SetInt(120, value ? 1 : 0);
1094 SetInt(121, value ? 1 : 0);
1106 SetInt(122, value ? 1 : 0);
1804 return GetObj<UniqueData>(6);
1816 return GetObj<Thing>(9);
1828 return GetObj<List<SocketData>>(17);
1840 return GetObj<Thing>(10);
1864 return GetObj<CharaUpgrade>(11);
1876 return GetObj<LoveData>(20);
1888 return GetObj<CharaGenes>(15);
1900 return GetObj<List<int>>(16);
1924 return GetObj<DNA>(14);
1936 return GetObj<CharaList>(13);
1948 return GetObj<MixedFoodData>(18);
1960 return GetObj<Thing>(19);
1972 return GetObj<byte[]>(4);
2048 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2071 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2159 if (
Tiles.Length == 1)
2161 return dir % 2 == 1;
2225 return id ==
"grass";
2357 if (
Tiles.Length < 3)
2431 return bio.gender == 2;
2583 if (
card.isSale || !
card.trait.CanUseContent)
2588 if (windowSaveData !=
null)
2600 EClass.player.wasDirtyWeight =
true;
2618 public int Evalue(
int ele,
bool ignoreGlobalElement)
2644 return c_editorTags?.Contains(tag.ToString()) ??
false;
2677 int num2 =
item.Value;
2752 for (
int i = 0; i <
sockets.Count; i++)
2770 thing.parent =
this;
2820 CardBlueprint.current =
null;
2871 if (
id ==
"microchip")
2953 EClass._zone.Boss =
Chara;
2995 int num = elementContainer.Value(value.
id);
3025 public void AddExp(
int a,
bool applyMod =
true)
3050 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3054 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3085 Say(
"dingExp",
this);
3100 int num = Mathf.Min(1 +
LV / 5, 20);
3101 for (
int i = 0; i < num; i++)
3103 if (
Evalue(1644) < i + 1)
3141 if (rootCard !=
null && rootCard.
IsPC)
3196 Debug.LogWarning(
"already child:" + t);
3201 Debug.Log(
"already in the list" + t);
3216 t.ignoreAutoPick =
false;
3260 if (rootCard !=
null && rootCard.
IsPC)
3269 t.isNPCProperty =
false;
3283 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3286 void TryAdd(
Thing a)
3288 if (!ings.Contains(a.
id))
3306 List<Chara> list =
new List<Chara>();
3322 if (!
item.IsPCFactionOrMinion)
3327 if (list2.Count == 0)
3331 foreach (
Thing item2
in list2)
3336 item.body.Unequip(item2);
3338 item2.c_idDeity = artifactDeity?.
id ??
null;
3339 Msg.
Say(
"waterCurse", item2);
3343 foreach (
Chara item3
in list)
3350 if (list3.Count == 0)
3354 foreach (
Thing item4
in list3)
3356 Msg.
Say(
"destroyed_inv_", item4, item3);
3368 List<Chara> list =
new List<Chara>();
3382 if (
item.IsPCFactionOrMinion)
3396 for (
int num =
things.Count - 1; num >= 0; num--)
3407 rootCard.Chara.held =
null;
3413 instance.selectedButton.card =
null;
3416 ActionMode.AdvOrRegion.updatePlans =
true;
3433 if (thing.
invY == 1)
3435 WidgetCurrentTool.dirty =
true;
3439 if (thing.
props !=
null)
3447 WidgetHotbar.dirtyCurrentItem =
true;
3448 thing.parent =
null;
3453 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3460 thing.parent =
null;
3469 return EClass.ui.layers.Count > 0;
3491 to.c_isImportant =
true;
3516 return card.GetRootCard();
3543 thing.encLV =
encLV;
3544 thing.decay =
decay;
3547 foreach (KeyValuePair<int, int>
item in mapInt)
3551 foreach (KeyValuePair<int, string> item2
in mapStr)
3553 thing.
mapStr[item2.Key] = item2.Value;
3559 thing.sockets = IO.DeepCopy(
sockets);
3575 ModNum(-a, notify:
false);
3587 return this as
Thing;
3590 return this as
Thing;
3596 return this as
Thing;
3599 public void ModNum(
int a,
bool notify =
true)
3638 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3644 for (
int i = 0; i <
sockets.Count; i++)
3662 for (
int i = 0; i <
sockets.Count; i++)
3668 int ele = num / 1000;
3669 int num2 = num % 1000;
3764 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3770 string encSlot = source.
encSlot;
3771 if (encSlot ==
null || encSlot.Length != 0)
3784 string[] array = source.
encSlot.Split(
',');
3785 foreach (
string key
in array)
3833 if (this.placeState == newState)
3839 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3851 float num2 = (
fy = 0f);
3862 this.placeState = newState;
3870 this.placeState = newState;
3925 num = num * (100 +
Quality) / 100;
3962 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4009 public bool TryPay(
int a,
string id =
"money")
4016 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4020 if (
IsPC && !(
id ==
"ration"))
4040 Say(
"spellbookCrumble",
this);
4049 if (
id ==
"influence")
4061 if (
id ==
"influence")
4068 if (sum >
int.MaxValue)
4096 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4098 if (num > 100000000)
4130 int num =
PV + orCreateElement.Value +
DEX / 10;
4137 num2 = num3 / 10 + 1;
4138 sides = num3 / num2 + 1;
4140 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4142 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4143 dmg -= num4 * mod / 100;
4157 int num = origin.Evalue(1238);
4161 if (origin.HasElement(1247))
4166 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4170 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4174 if (idEle == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4183 DamageHP(dmg, 0, 0, attackSource, origin);
4192 bool flag = originalTarget !=
null;
4193 Action onEvade =
null;
4202 Say(
"wall_bond", chara3,
this);
4211 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4217 int num = chara4.
Evalue(1241);
4218 int num2 = chara4.
Evalue(438);
4221 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4222 chara4.
DamageHP(dmg * (100 + ((num2 <= 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4230 if (origin !=
null && origin.HasElement(1208))
4232 switch (attackSource)
4235 dmg = dmg * 130 / 100;
4236 eleP = eleP * 150 / 100;
4239 dmg = dmg * 120 / 100;
4240 eleP = eleP * 150 / 100;
4246 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4249 if (ele == 0 || ele == 926)
4254 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4260 if (attackSource !=
AttackSource.Condition && showEffect)
4271 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4272 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4279 if (chara2 !=
null && chara2.
isWet)
4288 if (chara !=
null && chara.
isWet)
4290 dmg = dmg * 150 / 100;
4296 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4304 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4306 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4315 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4320 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4322 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4329 dmg = dmg * 90 / 100;
4333 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4337 dmg = dmg * 90 / 100;
4356 dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
4360 dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
4365 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4367 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4369 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4377 int num6 =
MaxHP / 10;
4378 long num7 = dmg - num6;
4379 num7 = num7 * 100 / (200 +
Evalue(68) * 10);
4391 long num8 = 99999999L;
4395 if (condition !=
null)
4397 num8 = num8 * (100 + condition.lv * 5) / 100;
4404 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4415 if (hp < 0 && Chara.mana.value >= 0)
4431 Chara.mana.value -= (int)dmg;
4448 float ratio = (float)dmg / (
float)
MaxHP;
4459 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4461 aI_PracticeDummy.hit++;
4462 aI_PracticeDummy.totalDamage += dmg;
4505 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4514 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4535 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4537 EClass.player.invlunerable =
true;
4576 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4583 text =
"dead_" + e.
source.alias;
4587 text =
"dead_attack";
4595 text =
"kill_" + e.source.alias;
4599 text =
"kill_attack";
4601 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4609 Say(
"reboot",
this);
4616 if (HasCondition<ConRebirth>())
4618 Say(
"rebirth",
this);
4630 Msg.alwaysVisible =
true;
4631 Msg.
Say(
"layhand", chara5,
this);
4632 Msg.
Say(
"pray_heal",
this);
4642 if (zoneInstanceBout !=
null)
4674 Die(e, origin, attackSource, originalTarget);
4675 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4677 origin.isSummon =
true;
4678 origin.c_summonDuration = 4;
4685 string text2 =
new int[18]
4687 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4688 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4689 }.RandomItem().ToString();
4692 text2 =
"casino_coin";
4696 text2 =
"scratchcard";
4724 if (origin !=
null && origin.isChara)
4746 if (origin.GetInt(106) == 0)
4748 origin.Chara.TalkTopic(
"kill");
4753 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4755 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4759 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4760 if (num9 >= (
float)num13)
4764 Say(
"dmg_" + e.source.alias,
this);
4768 Say(
"dmg" + num9,
this);
4791 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4795 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4799 int num15 = origin.Dist(
this);
4803 if (
id ==
"hedgehog_ether")
4807 Say(
"reflect_thorne", origin,
this);
4808 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4813 Say(
"reflect_acid",
this, origin);
4814 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4826 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4837 int num16 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4847 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4853 Condition.ignoreEffect =
true;
4855 Condition.ignoreEffect =
false;
4859 float num17 = (float)
hp / (
float)
MaxHP;
4866 PlaySound(
"heartbeat", 1f - num17 * 2f);
4899 EClass.player.forceTalk =
true;
4901 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4912 void EvadeDeath(Action action)
4917 Chara.mana.value = 0;
4931 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4933 int num18 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
4934 int num19 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
4941 int num20 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
4942 origin.Chara.stamina.Mod(num20);
4948 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4950 int num21 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4951 origin.Chara.mana.Mod(num21);
4959 int num22 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
4960 origin.Chara.mana.Mod(num22);
4977 bool hostile =
false;
4981 if (Chance(30 + eleP / 5, 100))
4983 MarkHostile().AddCondition<
ConBurning>(eleP);
4989 if (Chance(30 + eleP / 10, 100))
4994 else if (Chance(50 + eleP / 10, 100))
5000 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5006 if (Chance(30 + eleP / 5, 100))
5008 MarkHostile().AddCondition<
ConPoison>(eleP);
5012 if (Chance(30 + eleP / 5, 100))
5019 if (Chance(30 + eleP / 5, 100))
5028 if (Chance(30 + eleP / 5, 100))
5033 else if (Chance(30 + eleP / 5, 100))
5039 if (Chance(50 + eleP / 10, 100))
5047 if (Chance(30 + eleP / 5, 100))
5066 if (Chance(5 + eleP / 25, 40))
5070 if (Chance(5 + eleP / 25, 40))
5074 if (Chance(5 + eleP / 25, 40))
5078 if (Chance(5 + eleP / 25, 40))
5080 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5082 if (Chance(5 + eleP / 25, 40))
5086 if (Chance(5 + eleP / 25, 40))
5090 if (Chance(30 + eleP / 10, 100))
5096 if (Chance(50 + eleP / 10, 100))
5098 MarkHostile().AddCondition<
ConBleed>(eleP);
5102 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5115 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5119 static bool Chance(
int a,
int max)
5121 return Mathf.Min(a, max) >
EClass.
rnd(100);
5132 Card rootCard = GetRootCard();
5134 if (_pos !=
null && !_pos.
IsValid)
5145 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5146 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5148 text += e.source.alias;
5152 Msg.
Say(text,
this, rootCard);
5157 Msg.
Say(
"destroyed",
this);
5162 things.ForeachReverse(delegate(
Thing t)
5172 if (e !=
null && _pos !=
null && e.id == 21)
5178 Explode(pos, origin);
5186 origin = origin?.Chara,
5188 aliasEle =
"eleImpact"
5194 PlaySound(
material.GetSoundDead(sourceCard));
5202 Debug.Log(Name +
" is already destroyed.");
5213 Chara.isDead =
true;
5231 for (
int num = things.Count - 1; num >= 0; num--)
5233 things[num].Destroy();
5240 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5246 List<Card> list =
new List<Card>();
5247 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5250 if (this.rarity >=
Rarity.Legendary)
5283 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5295 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5303 if (flag2 && !isUserZone)
5306 bool num2 = text ==
"_meat";
5318 text =
"meat_marble";
5321 if (thing3.
source._origin ==
"meat")
5335 if (!IsPCFaction && !isUserZone)
5337 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5339 string[] array = item2.
Split(
'/');
5340 int num4 = array[1].ToInt();
5389 if (!isBackerContent && !flag)
5425 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5435 if (text2 ==
"big_daddy" || text2 ==
"santa")
5443 List<Thing> list2 =
new List<Thing>();
5444 foreach (
Thing thing6
in things)
5470 if (num5 > 0 && list2.Count > 0)
5473 for (
int j = 0; j < list2.Count && j < num5; j++)
5479 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5482 foreach (
Card item3
in list)
5491 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5496 for (
int k = 0; k < num5; k++)
5525 List<Thing> list3 = thing4.
things.ToList();
5535 while (num8 > 0 && list3.Count != 0)
5537 Thing thing5 = list3.First();
5538 list3.Remove(thing5);
5549 foreach (
Thing thing7
in things)
5551 if (thing7.
GetInt(116) != 0)
5556 Point nearestPoint = GetRootCard().pos;
5561 foreach (
Card item4
in list)
5567 item4.isHidden =
false;
5568 item4.isNPCProperty =
false;
5625 case "egg_fertilized":
5630 string text =
"c_wilds";
5631 if (
id ==
"_meat" ||
id ==
"meat_marble")
5639 for (
int i = 0; i < 20; i++)
5642 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5652 if (crafter !=
null && crafter.id ==
"big_sister")
5654 cardRow = crafter.source;
5659 if (c_idRefCard.IsEmpty())
5661 MakeRefFrom(cardRow.
model);
5666 MakeFoodFrom(cardRow.
model);
5668 return this as
Thing;
5674 return this as
Thing;
5691 int num = race.
food[0].ToInt();
5692 bool flag =
id ==
"meat_marble";
5694 bool flag2 = category.
IsChildOf(
"meat");
5706 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5709 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5711 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5715 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5733 foreach (
Element value
in c.elements.dict.Values)
5735 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5740 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5741 foreach (KeyValuePair<int, int>
item in race.elementMap)
5745 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5748 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5749 for (
int i = 0; i < num2 && i < list.Count; i++)
5751 Tuple<int, int> tuple = list[i];
5752 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5754 if (c.Chara.IsUndead)
5756 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5758 isWeightChanged =
true;
5759 c_weight = race.height * 4 + 100;
5760 c_idMainElement = c.c_idMainElement;
5762 int num3 = c.LV - c.sourceCard.LV;
5768 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5772 if (flag2 && c.IsPCFaction && c.IsUnique)
5787 if (IsIgnoreName(
card))
5791 if (IsIgnoreName(card2))
5795 if (
card ==
null && card2 !=
null)
5802 MakeRefFrom(
card, card2);
5803 if (
card.c_idRefCard !=
null)
5805 c_idRefCard =
card.c_idRefCard;
5806 c_altName = TryGetFoodName(
card);
5811 c_altName2 = TryGetFoodName(card2);
5814 static bool IsIgnoreName(
Card c)
5844 if (!row.aka.IsEmpty())
5846 if (row.name ==
"*r" && row.aka ==
"*r")
5848 return "corpseGeneral".lang();
5850 if (row.name ==
"*r")
5852 return row.GetText(
"aka");
5855 return row.GetName();
5860 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5876 c_idRefCard = c1.
id;
5880 c_idRefCard2 = c2.id;
5881 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5883 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5897 thing.c_idMainElement = c_idMainElement;
5906 return GiveBirth(thing, effect);
5924 int num2 = LV - sourceCard.
LV;
5929 if (num2 >= 10 && !HasElement(1290))
5937 return GiveBirth(thing, effect);
5943 EClass.player.forceTalk =
true;
5944 card.Talk(
"giveBirth");
5948 card.pos.PlayEffect(
"revive");
5949 card.pos.PlaySound(
"egg");
5961 string[] array = ((!(
id ==
"cocoon")) ?
new string[4] {
"alien",
"alien",
"alien",
"alien2" } :
new string[6] {
"spider_queen",
"spider_vampire",
"spider_paralyzer",
"spider_black",
"spider_tarantula",
"spider_spotted" });
5965 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5967 PlaySound(
"egghatch");
5976 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5979 if (chara !=
null && isChara)
6033 SayNothingHappans();
6036 PlayEffect(
"teleport");
6039 Say(
"antiTeleport",
this);
6040 PlaySound(
"gravity");
6045 PlaySound(
"teleport");
6046 Say(
"teleported",
this);
6055 if (chara.
enemy ==
this)
6066 EClass.player.haltMove =
true;
6068 PlayEffect(
"teleport", useRenderPos:
false);
6075 PlayEffect(
"ripple");
6076 PlaySound(
"Footstep/water");
6087 int num = p.x - pos.
x;
6088 int num2 = p.z - pos.
z;
6105 if (num == 0 && num2 == 0)
6117 for (
int i = -1; i < 2; i++)
6119 for (
int j = -1; j < 2; j++)
6123 point.x = pos.x + j;
6124 point.z = pos.z + i;
6137 return _Move(newPoint);
6140 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6144 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6148 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6150 if (!IsAliveInCurrentZone)
6176 Say(
"kick",
this, t);
6210 if (elements.
Value(ele) <= 0)
6212 if (includeNagative)
6214 return elements.
Value(ele) < 0;
6223 return elements.
Value(ele) >= req;
6238 if (HasElement(764))
6242 if (HasElement(759))
6246 if (HasElement(703))
6250 if (HasElement(758))
6254 if (HasElement(704))
6272 for (
int i = 0; i < a; i++)
6283 shared.color = 11010048f;
6284 shared.liquidLv = 0;
6286 SetRenderParam(shared);
6306 isDyed = mat !=
null;
6307 c_dyeMat = mat?.id ?? 0;
6323 else if (isElemental)
6360 int num = EClass.game.seed + refVal;
6361 num +=
id[0] % 10000;
6364 num +=
id[1] % 1000;
6367 num +=
id[2] % 1000;
6370 num +=
id[3] % 1000;
6373 num +=
id[4] % 1000;
6382 return ref _randColor;
6407 public void SetImage(Image image,
int dir,
int idSkin = 0)
6409 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6419 Sprite sprite = GetSprite();
6420 if (!c_idSpriteReplacer.IsEmpty())
6423 if (spriteReplacer !=
null)
6427 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6431 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6434 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6436 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6440 renderer.
ShowEmo(_emo, duration);
6448 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6453 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6458 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6463 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6466 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6468 Card rootCard = GetRootCard();
6475 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6500 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6506 Card rootCard = GetRootCard();
6510 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6518 Card rootCard = GetRootCard();
6541 public virtual void Rotate(
bool reverse =
false)
6544 if (sourceCard.
tiles.Length > 4)
6546 num = sourceCard.
tiles.Length;
6608 fx = fx - vector.x + thingPosition.x;
6609 fy = fy - vector.y + thingPosition.y;
6613 float num2 = (fy = 0f);
6637 renderParam.x = v.x;
6638 renderParam.y = v.y;
6639 renderParam.z = v.z;
6641 v.x = renderParam.
x;
6642 v.y = renderParam.
y;
6643 v.z = renderParam.
z;
6657 v.z += thingPosition.z;
6664 if (useCurrentPosition)
6679 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6690 EClass.player.lightRadius = 1;
6698 return GetLightRadius() > 0;
6706 return 0.01f * LightData.color.a * 256f * 1.12f;
6708 if (IsPCFaction && !IsPC)
6774 num2 = traitLightSource.LightRadius;
6779 if (lightRadius > 0)
6781 if (lightRadius > num2)
6801 int radius = GetLightRadius();
6806 float power = GetLightPower();
6827 EClass.player.lightRadius = radius;
6828 EClass.player.lightPower = power;
6834 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6845 int num = (trait.UseLightColor ? c_lightColor : 0);
6848 fov.r = (byte)(num / 1024);
6849 fov.g = (byte)(num % 1024 / 32);
6850 fov.b = (byte)(num % 32);
6891 if (fov !=
null && fov.
lastPoints.Count != 0)
6910 things.ForeachReverse(delegate(
Thing t)
6914 if (sourceCard.
_origin ==
"dish")
6922 else if (!isChara && trait.
Decay != 0)
6924 Decay(trait.
Decay * hour);
6942 int num2 = MaxDecay / 4 * 3;
6947 num =
card.trait.DecaySpeedChild;
6949 num = num * trait.DecaySpeed / 100;
6950 int num3 = Evalue(405);
6953 num = num * (100 - num3 * 2) / 100;
6965 if (decay + a > MaxDecay)
6967 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6976 card.AddCard(thing);
6977 if (!IsParentLocked())
6979 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6988 else if (GetRootCard() ==
EClass.
pc)
6990 if (!IsParentLocked())
7002 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7004 if (!IsParentLocked())
7011 bool IsParentLocked()
7013 if (parent is
Thing)
7015 return (parent as
Thing).c_lockLv > 0;
7023 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7026 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7030 EClass.player.forceTalk =
false;
7034 EClass.player.forceTalk =
false;
7035 if (!isSynced && !forceSync)
7040 GameLang.refDrama1 = ref1;
7041 GameLang.refDrama2 = ref2;
7042 string text = GetTalkText(idTopic, stripPun:
true);
7044 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7050 switch ((condition !=
null) ? condition.
chara.
id :
id)
7063 TalkRaw(text, ref1, ref2, forceSync);
7066 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7068 if ((!isSynced && !forceSync) || text.IsEmpty())
7075 text = text.Replace(
"#1", ref1);
7079 text = text.Replace(
"#2", ref2);
7081 HostRenderer.Say(ApplyNewLine(text));
7082 text = StripTalkSpeiclaCharacters(text);
7083 bool flag = text.StartsWith(
"*");
7087 text = text.Bracket();
7089 Msg.
Say(text.Replace(
"&",
""));
7098 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7100 return text.Substring(2);
7106 return text.Substring(1);
7113 if (text.Contains(
"&"))
7115 string text2 =
"_comma".lang();
7116 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7117 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7118 text = text.Replace(
"&", Environment.NewLine ??
"");
7123 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7125 if (isSynced && !text.IsEmpty())
7129 text = text.Replace(
"#1", ref1);
7133 text = text.Replace(
"#2", ref2);
7135 HostRenderer.Say(text);
7141 Say(
"nothingHappens");
7144 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7153 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7162 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7171 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7175 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7176 if (!text.IsEmpty())
7178 text = text.Split(
'|').RandomItem();
7179 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7181 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7183 text =
"(" + text +
")";
7185 text = text.Replace(
"。)",
")");
7188 return ApplyTone(text, stripPun);
7194 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7197 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7203 string[] array = _tones.IsEmpty(
"").Split(
'|');
7204 string key = array[0];
7209 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7213 if (array[0].IsEmpty())
7222 if (array.Length >= 2)
7224 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7226 if (array.Length >= 3)
7228 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7231 text2 = stringBuilder.ToString();
7235 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7246 return text2.StripLastPun();
7261 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7262 if (list.Count != 0)
7264 int mtp = EClass.core.config.test.extraToneMTP
switch
7277 string text = list.RandomItem()[
"id"];
7278 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7285 return ListCraftBonusTraits().Count > 0;
7290 List<Element> list =
new List<Element>();
7291 string[] tag = sourceCard.
tag;
7292 for (
int i = 0; i < tag.Length; i++)
7294 string[] array = tag[i].Split(
'/');
7295 if (!(array[0] !=
"craft_bonus"))
7311 if (dest.
stack !=
null)
7315 Say(
"stack_thing", t, dest.
stack);
7329 c_idBacker = row.
id;
7335 chara.hostility = hostility2;
7341 Chara.idFaith = row.
deity.ToLowerInvariant();
7346 if (
id ==
"putty_snow")
7359 if (c_idBacker == 164)
7372 c_textureData = GetPaintData();
7382 Sprite sprite = GetSprite();
7383 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7384 int num = sprite.texture.width * 2;
7385 int num2 = sprite.texture.height * 2;
7386 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7387 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7388 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7389 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7390 texture2D2.SetPixels(pixels);
7392 byte[] result = texture2D2.EncodeToJPG();
7393 UnityEngine.Object.Destroy(texture2D);
7394 UnityEngine.Object.Destroy(texture2D2);
7400 if ((
bool)_paintSprite)
7402 UnityEngine.Object.Destroy(_paintSprite.texture);
7403 UnityEngine.Object.Destroy(_paintSprite);
7404 _paintSprite =
null;
7412 byte[] data = c_textureData;
7413 Texture2D texture2D =
new Texture2D(1, 1);
7414 texture2D.LoadImage(data);
7415 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7419 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7422 return _paintSprite;
7427 if (!(GetRestrainer() ==
null || force))
7431 isRestrained =
false;
7432 Say(
"unrestrained",
this);
7443 if (c_rescueState ==
RescueState.WaitingForRescue)
7457 c.DoHostileAction(
item, immediate:
true);
7484 result = row.value * mat.value / 100;
7521 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7522 if (
id ==
"plat" && !sell)
7533 num2 += (float)c_priceCopy * 0.2f;
7534 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7538 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7540 if (IsFood && !
material.tag.Contains(
"food"))
7545 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7563 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7565 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7567 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7568 if (IsEquipmentOrRanged)
7573 num4 += value.
source.value;
7575 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7576 if (rarity >=
Rarity.Legendary)
7578 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7586 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7588 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)))));
7592 num2 *= (float)(tier + 1);
7599 if (priceType ==
PriceType.CopyShop && sell)
7605 if (
id ==
"littleball")
7612 if (
id ==
"crimale2")
7620 case "ticket_fortune":
7626 case "scroll_alias":
7628 case "scroll_biography":
7643 if (!(text ==
"mathammer"))
7645 if (!(text ==
"water_jure"))
7651 return 50 + material.tier * material.tier * 10;
7664 case "hammer_strip":
7694 case "diary_sister":
7698 case "diary_catsister":
7700 case "container_magic":
7702 case "wrench_tent_elec":
7704 case "wrench_tent_soil":
7706 case "wrench_tent_seabed":
7710 case "wrench_storage":
7712 case "wrench_fridge":
7714 case "wrench_extend_v":
7716 case "wrench_extend_h":
7722 case "hammer_garokk":
7724 case "scroll_random":
7738 if (!sell &&
id ==
"casino_coin")
7742 int value = GetValue(priceType, sell);
7752 Trait trait = this.trait;
7757 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7762 p *= 1f + 0.5f * (float)c_containerSize;
7765 if (c_priceFix != 0)
7767 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7777 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7788 if (!sell && category.
id ==
"spellbook")
7792 bool flag = priceType ==
PriceType.CopyShop;
7793 int num = ((!flag) ? 1 : 5);
7794 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7795 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7796 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7801 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7803 p *= 0.20000000298023224;
7806 p *= 0.20000000298023224;
7809 p *= 0.20000000298023224;
7813 p *= 0.20000000298023224;
7819 if ((uint)(priceType - 1) <= 1u)
7831 if (
id ==
"rod_wish")
7833 p *= (sell ? 0.01f : 50f);
7848 p *= 0.20000000298023224;
7852 p *= 0.10000000149011612;
7855 p *= 0.0020000000949949026;
7858 p *= 0.00019999999494757503;
7861 p *= 0.004999999888241291;
7872 p *= (flag ? 1.25f : 0.3f);
7876 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7880 p *= (flag ? 0.9f : 0.5f);
7892 p *= 1f + 0.2f * (float)c.Evalue(1406);
7905 p *= 1.100000023841858;
7939 else if (category.
IsChildOf(
"furniture"))
7959 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7966 p = ((!sell) ? 1 : 0);
7974 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7976 else if (p > 10000.0)
7978 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7980 else if (p > 1000.0)
7982 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7986 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7990 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7998 if (p > (
double)(sell ? 500000000 : 1000000000))
8011 return Name + GetExtraName();
8028 ForeachPoint(delegate(
Point p,
bool main)
8030 int num2 = DistMulti(p, c);
8038 return DistMulti(pos, c);
8070 isCensored = enable;
8080 if (isDeconstructing != deconstruct)
8090 isDeconstructing = deconstruct;
8104 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8107 sortVal = -GetPrice(
currency) * 1000;
8110 sortVal = -Num * 1000;
8113 sortVal = category.sortVal * 1000;
8116 sortVal = -ChildrenAndSelfWeight * 1000;
8119 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8122 sortVal = -GetPrice(
currency) * 1000;
8125 sortVal = sourceCard._index * 1000;
8135 num =
id.CompareTo(c.
id);
8155 num = encLV - c.
encLV;
8174 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8192 action(pos, arg2:
true);
8206 SE.Play(
"pop_paper");
8236 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8249 if (!HaveFur() || c_fur < 0)
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)
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)
int GetResistPenetrationLevel(int idEle, AttackSource attackSource, Card origin=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()
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, int resistPenetrationLevel=0)
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)
Hostility OriginalHostility
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)
Chara SetHostility(Hostility h)
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
override void Reveal(Card attacker=null, bool surprise=false)
virtual bool ShouldRevealOnContact
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()
bool Equals(int _x, int _z)
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)
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 void OnBarter(bool reroll=false)
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)