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) + ((num > 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));
5446 List<Thing> list2 =
new List<Thing>();
5447 foreach (
Thing thing6
in things)
5473 if (num5 > 0 && list2.Count > 0)
5476 for (
int j = 0; j < list2.Count && j < num5; j++)
5482 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5485 foreach (
Card item3
in list)
5494 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5499 for (
int k = 0; k < num5; k++)
5528 List<Thing> list3 = thing4.
things.ToList();
5538 while (num8 > 0 && list3.Count != 0)
5540 Thing thing5 = list3.First();
5541 list3.Remove(thing5);
5552 foreach (
Thing thing7
in things)
5554 if (thing7.
GetInt(116) != 0)
5559 Point nearestPoint = GetRootCard().pos;
5564 foreach (
Card item4
in list)
5570 item4.isHidden =
false;
5571 item4.isNPCProperty =
false;
5628 case "egg_fertilized":
5633 string text =
"c_wilds";
5634 if (
id ==
"_meat" ||
id ==
"meat_marble")
5642 for (
int i = 0; i < 20; i++)
5645 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5655 if (crafter !=
null && crafter.id ==
"big_sister")
5657 cardRow = crafter.source;
5662 if (c_idRefCard.IsEmpty())
5664 MakeRefFrom(cardRow.
model);
5669 MakeFoodFrom(cardRow.
model);
5671 return this as
Thing;
5677 return this as
Thing;
5694 int num = race.
food[0].ToInt();
5695 bool flag =
id ==
"meat_marble";
5697 bool flag2 = category.
IsChildOf(
"meat");
5709 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5712 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5714 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5718 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5736 foreach (
Element value
in c.elements.dict.Values)
5738 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5743 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5744 foreach (KeyValuePair<int, int>
item in race.elementMap)
5748 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5751 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5752 for (
int i = 0; i < num2 && i < list.Count; i++)
5754 Tuple<int, int> tuple = list[i];
5755 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5757 if (c.Chara.IsUndead)
5759 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5761 isWeightChanged =
true;
5762 c_weight = race.height * 4 + 100;
5763 c_idMainElement = c.c_idMainElement;
5765 int num3 = c.LV - c.sourceCard.LV;
5771 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5775 if (flag2 && c.IsPCFaction && c.IsUnique)
5790 if (IsIgnoreName(
card))
5794 if (IsIgnoreName(card2))
5798 if (
card ==
null && card2 !=
null)
5805 MakeRefFrom(
card, card2);
5806 if (
card.c_idRefCard !=
null)
5808 c_idRefCard =
card.c_idRefCard;
5809 c_altName = TryGetFoodName(
card);
5814 c_altName2 = TryGetFoodName(card2);
5817 static bool IsIgnoreName(
Card c)
5847 if (!row.aka.IsEmpty())
5849 if (row.name ==
"*r" && row.aka ==
"*r")
5851 return "corpseGeneral".lang();
5853 if (row.name ==
"*r")
5855 return row.GetText(
"aka");
5858 return row.GetName();
5863 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5879 c_idRefCard = c1.
id;
5883 c_idRefCard2 = c2.id;
5884 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5886 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5900 thing.c_idMainElement = c_idMainElement;
5909 return GiveBirth(thing, effect);
5927 int num2 = LV - sourceCard.
LV;
5932 if (num2 >= 10 && !HasElement(1290))
5940 return GiveBirth(thing, effect);
5946 EClass.player.forceTalk =
true;
5947 card.Talk(
"giveBirth");
5951 card.pos.PlayEffect(
"revive");
5952 card.pos.PlaySound(
"egg");
5964 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" });
5968 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5970 PlaySound(
"egghatch");
5979 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5982 if (chara !=
null && isChara)
6036 SayNothingHappans();
6039 PlayEffect(
"teleport");
6042 Say(
"antiTeleport",
this);
6043 PlaySound(
"gravity");
6048 PlaySound(
"teleport");
6049 Say(
"teleported",
this);
6058 if (chara.
enemy ==
this)
6069 EClass.player.haltMove =
true;
6071 PlayEffect(
"teleport", useRenderPos:
false);
6078 PlayEffect(
"ripple");
6079 PlaySound(
"Footstep/water");
6090 int num = p.x - pos.
x;
6091 int num2 = p.z - pos.
z;
6108 if (num == 0 && num2 == 0)
6122 for (
int i = -1; i < 2; i++)
6124 for (
int j = -1; j < 2; j++)
6128 point.x = pos.x + j;
6129 point.z = pos.z + i;
6143 return _Move(newPoint);
6146 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6150 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6154 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6156 if (!IsAliveInCurrentZone)
6182 Say(
"kick",
this, t);
6216 if (elements.
Value(ele) <= 0)
6218 if (includeNagative)
6220 return elements.
Value(ele) < 0;
6229 return elements.
Value(ele) >= req;
6244 if (HasElement(764))
6248 if (HasElement(759))
6252 if (HasElement(703))
6256 if (HasElement(758))
6260 if (HasElement(704))
6278 for (
int i = 0; i < a; i++)
6289 shared.color = 11010048f;
6290 shared.liquidLv = 0;
6292 SetRenderParam(shared);
6312 isDyed = mat !=
null;
6313 c_dyeMat = mat?.id ?? 0;
6329 else if (isElemental)
6366 int num = EClass.game.seed + refVal;
6367 num +=
id[0] % 10000;
6370 num +=
id[1] % 1000;
6373 num +=
id[2] % 1000;
6376 num +=
id[3] % 1000;
6379 num +=
id[4] % 1000;
6388 return ref _randColor;
6413 public void SetImage(Image image,
int dir,
int idSkin = 0)
6415 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6425 Sprite sprite = GetSprite();
6426 if (!c_idSpriteReplacer.IsEmpty())
6429 if (spriteReplacer !=
null)
6433 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6437 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6440 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6442 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6446 renderer.
ShowEmo(_emo, duration);
6454 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6459 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6464 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6469 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6472 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6474 Card rootCard = GetRootCard();
6481 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6506 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6512 Card rootCard = GetRootCard();
6516 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6524 Card rootCard = GetRootCard();
6547 public virtual void Rotate(
bool reverse =
false)
6550 if (sourceCard.
tiles.Length > 4)
6552 num = sourceCard.
tiles.Length;
6614 fx = fx - vector.x + thingPosition.x;
6615 fy = fy - vector.y + thingPosition.y;
6619 float num2 = (fy = 0f);
6643 renderParam.x = v.x;
6644 renderParam.y = v.y;
6645 renderParam.z = v.z;
6647 v.x = renderParam.
x;
6648 v.y = renderParam.
y;
6649 v.z = renderParam.
z;
6663 v.z += thingPosition.z;
6670 if (useCurrentPosition)
6685 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6696 EClass.player.lightRadius = 1;
6704 return GetLightRadius() > 0;
6712 return 0.01f * LightData.color.a * 256f * 1.12f;
6714 if (IsPCFaction && !IsPC)
6780 num2 = traitLightSource.LightRadius;
6785 if (lightRadius > 0)
6787 if (lightRadius > num2)
6807 int radius = GetLightRadius();
6812 float power = GetLightPower();
6833 EClass.player.lightRadius = radius;
6834 EClass.player.lightPower = power;
6840 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6851 int num = (trait.UseLightColor ? c_lightColor : 0);
6854 fov.r = (byte)(num / 1024);
6855 fov.g = (byte)(num % 1024 / 32);
6856 fov.b = (byte)(num % 32);
6897 if (fov !=
null && fov.
lastPoints.Count != 0)
6916 things.ForeachReverse(delegate(
Thing t)
6920 if (sourceCard.
_origin ==
"dish")
6928 else if (!isChara && trait.
Decay != 0)
6930 Decay(trait.
Decay * hour);
6948 int num2 = MaxDecay / 4 * 3;
6953 num =
card.trait.DecaySpeedChild;
6955 num = num * trait.DecaySpeed / 100;
6956 int num3 = Evalue(405);
6959 num = num * (100 - num3 * 2) / 100;
6971 if (decay + a > MaxDecay)
6973 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6982 card.AddCard(thing);
6983 if (!IsParentLocked())
6985 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6994 else if (GetRootCard() ==
EClass.
pc)
6996 if (!IsParentLocked())
7008 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7010 if (!IsParentLocked())
7017 bool IsParentLocked()
7019 if (parent is
Thing)
7021 return (parent as
Thing).c_lockLv > 0;
7029 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7032 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7036 EClass.player.forceTalk =
false;
7040 EClass.player.forceTalk =
false;
7041 if (!isSynced && !forceSync)
7046 GameLang.refDrama1 = ref1;
7047 GameLang.refDrama2 = ref2;
7048 string text = GetTalkText(idTopic, stripPun:
true);
7050 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7056 switch ((condition !=
null) ? condition.
chara.
id :
id)
7069 TalkRaw(text, ref1, ref2, forceSync);
7072 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7074 if ((!isSynced && !forceSync) || text.IsEmpty())
7081 text = text.Replace(
"#1", ref1);
7085 text = text.Replace(
"#2", ref2);
7087 HostRenderer.Say(ApplyNewLine(text));
7088 text = StripTalkSpeiclaCharacters(text);
7089 bool flag = text.StartsWith(
"*");
7093 text = text.Bracket();
7095 Msg.
Say(text.Replace(
"&",
""));
7104 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7106 return text.Substring(2);
7112 return text.Substring(1);
7119 if (text.Contains(
"&"))
7121 string text2 =
"_comma".lang();
7122 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7123 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7124 text = text.Replace(
"&", Environment.NewLine ??
"");
7129 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7131 if (isSynced && !text.IsEmpty())
7135 text = text.Replace(
"#1", ref1);
7139 text = text.Replace(
"#2", ref2);
7141 HostRenderer.Say(text);
7147 Say(
"nothingHappens");
7150 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7159 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7168 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7177 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7181 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7182 if (!text.IsEmpty())
7184 text = text.Split(
'|').RandomItem();
7185 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7187 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7189 text =
"(" + text +
")";
7191 text = text.Replace(
"。)",
")");
7194 return ApplyTone(text, stripPun);
7200 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7203 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7209 string[] array = _tones.IsEmpty(
"").Split(
'|');
7210 string key = array[0];
7215 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7219 if (array[0].IsEmpty())
7228 if (array.Length >= 2)
7230 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7232 if (array.Length >= 3)
7234 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7237 text2 = stringBuilder.ToString();
7241 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7252 return text2.StripLastPun();
7267 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7268 if (list.Count != 0)
7270 int mtp = EClass.core.config.test.extraToneMTP
switch
7283 string text = list.RandomItem()[
"id"];
7284 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7291 return ListCraftBonusTraits().Count > 0;
7296 List<Element> list =
new List<Element>();
7297 string[] tag = sourceCard.
tag;
7298 for (
int i = 0; i < tag.Length; i++)
7300 string[] array = tag[i].Split(
'/');
7301 if (!(array[0] !=
"craft_bonus"))
7317 if (dest.
stack !=
null)
7321 Say(
"stack_thing", t, dest.
stack);
7335 c_idBacker = row.
id;
7341 chara.hostility = hostility2;
7347 Chara.idFaith = row.
deity.ToLowerInvariant();
7352 if (
id ==
"putty_snow")
7365 if (c_idBacker == 164)
7378 c_textureData = GetPaintData();
7388 Sprite sprite = GetSprite();
7389 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7390 int num = sprite.texture.width * 2;
7391 int num2 = sprite.texture.height * 2;
7392 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7393 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7394 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7395 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7396 texture2D2.SetPixels(pixels);
7398 byte[] result = texture2D2.EncodeToJPG();
7399 UnityEngine.Object.Destroy(texture2D);
7400 UnityEngine.Object.Destroy(texture2D2);
7406 if ((
bool)_paintSprite)
7408 UnityEngine.Object.Destroy(_paintSprite.texture);
7409 UnityEngine.Object.Destroy(_paintSprite);
7410 _paintSprite =
null;
7418 byte[] data = c_textureData;
7419 Texture2D texture2D =
new Texture2D(1, 1);
7420 texture2D.LoadImage(data);
7421 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7425 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7428 return _paintSprite;
7433 if (!(GetRestrainer() ==
null || force))
7437 isRestrained =
false;
7438 Say(
"unrestrained",
this);
7449 if (c_rescueState ==
RescueState.WaitingForRescue)
7463 c.DoHostileAction(
item, immediate:
true);
7490 result = row.value * mat.value / 100;
7527 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7528 if (
id ==
"plat" && !sell)
7539 num2 += (float)c_priceCopy * 0.2f;
7540 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7544 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7546 if (IsFood && !
material.tag.Contains(
"food"))
7551 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7569 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7571 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7573 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7574 if (IsEquipmentOrRanged)
7579 num4 += value.
source.value;
7581 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7582 if (rarity >=
Rarity.Legendary)
7584 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7592 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7594 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)))));
7598 num2 *= (float)(tier + 1);
7605 if (priceType ==
PriceType.CopyShop && sell)
7611 if (
id ==
"littleball")
7618 if (
id ==
"crimale2")
7626 case "ticket_fortune":
7632 case "scroll_alias":
7634 case "scroll_biography":
7649 if (!(text ==
"mathammer"))
7651 if (!(text ==
"water_jure"))
7657 return 50 + material.tier * material.tier * 10;
7670 case "hammer_strip":
7700 case "diary_sister":
7704 case "diary_catsister":
7706 case "container_magic":
7708 case "wrench_tent_elec":
7710 case "wrench_tent_soil":
7712 case "wrench_tent_seabed":
7716 case "wrench_storage":
7718 case "wrench_fridge":
7720 case "wrench_extend_v":
7722 case "wrench_extend_h":
7728 case "hammer_garokk":
7730 case "scroll_random":
7744 if (!sell &&
id ==
"casino_coin")
7748 int value = GetValue(priceType, sell);
7758 Trait trait = this.trait;
7763 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7768 p *= 1f + 0.5f * (float)c_containerSize;
7771 if (c_priceFix != 0)
7773 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7783 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7794 if (!sell && category.
id ==
"spellbook")
7798 bool flag = priceType ==
PriceType.CopyShop;
7799 int num = ((!flag) ? 1 : 5);
7800 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7801 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7802 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7807 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7809 p *= 0.20000000298023224;
7812 p *= 0.20000000298023224;
7815 p *= 0.20000000298023224;
7819 p *= 0.20000000298023224;
7825 if ((uint)(priceType - 1) <= 1u)
7837 if (
id ==
"rod_wish")
7839 p *= (sell ? 0.01f : 50f);
7854 p *= 0.20000000298023224;
7858 p *= 0.10000000149011612;
7861 p *= 0.0020000000949949026;
7864 p *= 0.00019999999494757503;
7867 p *= 0.004999999888241291;
7878 p *= (flag ? 1.25f : 0.3f);
7882 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7886 p *= (flag ? 0.9f : 0.5f);
7898 p *= 1f + 0.2f * (float)c.Evalue(1406);
7911 p *= 1.100000023841858;
7945 else if (category.
IsChildOf(
"furniture"))
7965 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7972 p = ((!sell) ? 1 : 0);
7980 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7982 else if (p > 10000.0)
7984 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7986 else if (p > 1000.0)
7988 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7992 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7996 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8004 if (p > (
double)(sell ? 500000000 : 1000000000))
8017 return Name + GetExtraName();
8034 ForeachPoint(delegate(
Point p,
bool main)
8036 int num2 = DistMulti(p, c);
8044 return DistMulti(pos, c);
8076 isCensored = enable;
8086 if (isDeconstructing != deconstruct)
8096 isDeconstructing = deconstruct;
8110 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8113 sortVal = -GetPrice(
currency) * 1000;
8116 sortVal = -Num * 1000;
8119 sortVal = category.sortVal * 1000;
8122 sortVal = -ChildrenAndSelfWeight * 1000;
8125 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8128 sortVal = -GetPrice(
currency) * 1000;
8131 sortVal = sourceCard._index * 1000;
8141 num =
id.CompareTo(c.
id);
8161 num = encLV - c.
encLV;
8180 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8198 action(pos, arg2:
true);
8212 SE.Play(
"pop_paper");
8242 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8255 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)