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;
1046 SetInt(103, value ? 1 : 0);
1058 SetInt(109, value ? 1 : 0);
1070 SetInt(63, value ? 1 : 0);
1082 SetInt(64, value ? 1 : 0);
1094 SetInt(120, value ? 1 : 0);
1106 SetInt(121, value ? 1 : 0);
1118 SetInt(122, value ? 1 : 0);
1816 return GetObj<UniqueData>(6);
1828 return GetObj<Thing>(9);
1840 return GetObj<List<SocketData>>(17);
1852 return GetObj<Thing>(10);
1876 return GetObj<CharaUpgrade>(11);
1888 return GetObj<LoveData>(20);
1900 return GetObj<CharaGenes>(15);
1912 return GetObj<List<int>>(16);
1936 return GetObj<DNA>(14);
1948 return GetObj<CharaList>(13);
1960 return GetObj<MixedFoodData>(18);
1972 return GetObj<Thing>(19);
1984 return GetObj<byte[]>(4);
2060 public int ExpToNext => (int)Math.Min((50 + (
long)
LV * 30L) * (100 -
Evalue(403)) / 100, 99999999L);
2083 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2171 if (
Tiles.Length == 1)
2173 return dir % 2 == 1;
2237 return id ==
"grass";
2385 if (
Tiles.Length < 3)
2459 return bio.gender == 2;
2559 return GetBool(
id.GetHashCode());
2564 SetBool(
id.GetHashCode(), enable);
2567 public int GetInt(
string id,
int? defaultInt =
null)
2569 int @
int =
GetInt(
id.GetHashCode(), defaultInt);
2579 AddInt(
id.GetHashCode(), value);
2588 SetInt(
id.GetHashCode(), value);
2595 public string GetStr(
string id,
string defaultStr =
null)
2597 return GetStr(
id.GetHashCode(), defaultStr);
2600 public void SetStr(
string id,
string value =
null)
2602 SetStr(
id.GetHashCode(), value);
2612 SetObj(
id.GetHashCode(), o);
2674 if (
card.isSale || !
card.trait.CanUseContent)
2679 if (windowSaveData !=
null)
2691 EClass.player.wasDirtyWeight =
true;
2709 public int Evalue(
int ele,
bool ignoreGlobalElement)
2735 return c_editorTags?.Contains(tag.ToString()) ??
false;
2768 int num2 =
item.Value;
2843 for (
int i = 0; i <
sockets.Count; i++)
2861 thing.parent =
this;
2911 CardBlueprint.current =
null;
2962 if (
id ==
"microchip")
3044 EClass._zone.Boss =
Chara;
3086 int num = elementContainer.Value(value.
id);
3116 public void AddExp(
int a,
bool applyMod =
true)
3141 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
3145 return num * (100 +
Evalue(1237) * 30 +
Evalue(1273) * 50 + ((
Evalue(1275) >= 2) ? 50 : 0)) / 100;
3176 Say(
"dingExp",
this);
3191 int num = Mathf.Min(1 +
LV / 5, 20);
3192 for (
int i = 0; i < num; i++)
3194 if (
Evalue(1644) < i + 1)
3232 if (rootCard !=
null && rootCard.
IsPC)
3287 Debug.LogWarning(
"already child:" + t);
3292 Debug.Log(
"already in the list" + t);
3307 t.ignoreAutoPick =
false;
3351 if (rootCard !=
null && rootCard.
IsPC)
3360 t.isNPCProperty =
false;
3374 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3377 void TryAdd(
Thing a)
3379 if (!ings.Contains(a.
id))
3397 List<Chara> list =
new List<Chara>();
3413 if (!
item.IsPCFactionOrMinion)
3418 if (list2.Count == 0)
3422 foreach (
Thing item2
in list2)
3426 item.body.Unequip(item2);
3429 Msg.
Say(
"waterCurse", item2);
3433 foreach (
Chara item3
in list)
3440 if (list3.Count == 0)
3444 foreach (
Thing item4
in list3)
3446 Msg.
Say(
"destroyed_inv_", item4, item3);
3458 List<Chara> list =
new List<Chara>();
3472 if (
item.IsPCFactionOrMinion)
3486 for (
int num =
things.Count - 1; num >= 0; num--)
3497 rootCard.Chara.held =
null;
3503 instance.selectedButton.card =
null;
3506 ActionMode.AdvOrRegion.updatePlans =
true;
3523 if (thing.
invY == 1)
3525 WidgetCurrentTool.dirty =
true;
3529 if (thing.
props !=
null)
3537 WidgetHotbar.dirtyCurrentItem =
true;
3538 thing.parent =
null;
3543 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3550 thing.parent =
null;
3559 return EClass.ui.layers.Count > 0;
3581 to.c_isImportant =
true;
3606 return card.GetRootCard();
3633 thing.encLV =
encLV;
3634 thing.decay =
decay;
3637 foreach (KeyValuePair<int, int>
item in mapInt)
3641 foreach (KeyValuePair<int, string> item2
in mapStr)
3643 thing.
mapStr[item2.Key] = item2.Value;
3649 thing.sockets = IO.DeepCopy(
sockets);
3665 ModNum(-a, notify:
false);
3677 return this as
Thing;
3680 return this as
Thing;
3686 return this as
Thing;
3689 public void ModNum(
int a,
bool notify =
true)
3728 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3734 for (
int i = 0; i <
sockets.Count; i++)
3752 for (
int i = 0; i <
sockets.Count; i++)
3758 int ele = num / 1000;
3759 int num2 = num % 1000;
3854 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3860 string encSlot = source.
encSlot;
3861 if (encSlot ==
null || encSlot.Length != 0)
3874 string[] array = source.
encSlot.Split(
',');
3875 foreach (
string key
in array)
3923 if (this.placeState == newState)
3929 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3941 float num2 = (
fy = 0f);
3952 this.placeState = newState;
3960 this.placeState = newState;
4015 num = num * (100 +
Quality) / 100;
4052 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
4099 public bool TryPay(
int a,
string id =
"money")
4106 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
4110 if (
IsPC && !(
id ==
"ration"))
4130 Say(
"spellbookCrumble",
this);
4139 if (
id ==
"influence")
4151 if (
id ==
"influence")
4158 if (sum >
int.MaxValue)
4186 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
4188 if (num > 100000000)
4220 int num =
PV + orCreateElement.Value +
DEX / 10;
4227 num2 = num3 / 10 + 1;
4228 sides = num3 / num2 + 1;
4230 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4232 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4233 dmg -= num4 * mod / 100;
4247 int num = origin.Evalue(1238);
4251 if (origin.HasElement(1247))
4256 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4260 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4264 if (idEle == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4273 DamageHP(dmg, 0, 0, attackSource, origin);
4282 bool flag = originalTarget !=
null;
4283 Action onEvade =
null;
4292 Say(
"wall_bond", chara3,
this);
4301 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4307 int num = chara4.
Evalue(1241);
4308 int num2 = chara4.
Evalue(438);
4311 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4312 chara4.
DamageHP(dmg * (100 + ((num2 > 0) ? (-10) : 0) + ((num > 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4320 if (origin !=
null && origin.HasElement(1208))
4322 switch (attackSource)
4325 dmg = dmg * 130 / 100;
4326 eleP = eleP * 150 / 100;
4329 dmg = dmg * 120 / 100;
4330 eleP = eleP * 150 / 100;
4336 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4339 if (ele == 0 || ele == 926)
4344 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4350 if (attackSource !=
AttackSource.Condition && showEffect)
4361 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4362 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4369 if (chara2 !=
null && chara2.
isWet)
4378 if (chara !=
null && chara.
isWet)
4380 dmg = dmg * 150 / 100;
4386 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4394 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4396 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4405 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4410 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4412 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4419 dmg = dmg * 90 / 100;
4423 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4427 dmg = dmg * 90 / 100;
4446 dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
4450 dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
4455 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4457 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4459 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4467 int num6 =
MaxHP / 10;
4468 long num7 = dmg - num6;
4469 num7 = num7 * 100 / (200 +
Evalue(68) * 10);
4481 long num8 = 99999999L;
4485 if (condition !=
null)
4487 num8 = num8 * (100 + condition.lv * 5) / 100;
4494 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4505 if (hp < 0 && Chara.mana.value >= 0)
4521 Chara.mana.value -= (int)dmg;
4538 float ratio = (float)dmg / (
float)
MaxHP;
4549 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning:
not false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4551 aI_PracticeDummy.hit++;
4552 aI_PracticeDummy.totalDamage += dmg;
4595 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4604 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4625 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4627 EClass.player.invlunerable =
true;
4666 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4673 text =
"dead_" + e.
source.alias;
4677 text =
"dead_attack";
4685 text =
"kill_" + e.source.alias;
4689 text =
"kill_attack";
4691 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4699 Say(
"reboot",
this);
4706 if (HasCondition<ConRebirth>())
4708 Say(
"rebirth",
this);
4720 Msg.alwaysVisible =
true;
4721 Msg.
Say(
"layhand", chara5,
this);
4722 Msg.
Say(
"pray_heal",
this);
4732 if (zoneInstanceBout !=
null)
4764 Die(e, origin, attackSource, originalTarget);
4765 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4767 origin.isSummon =
true;
4768 origin.c_summonDuration = 4;
4775 string text2 =
new int[18]
4777 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4778 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4779 }.RandomItem().ToString();
4782 text2 =
"casino_coin";
4786 text2 =
"scratchcard";
4814 if (origin !=
null && origin.isChara)
4836 if (origin.GetInt(106) == 0)
4838 origin.Chara.TalkTopic(
"kill");
4843 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4845 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4849 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4850 if (num9 >= (
float)num13)
4854 Say(
"dmg_" + e.source.alias,
this);
4858 Say(
"dmg" + num9,
this);
4881 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4885 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4889 int num15 = origin.Dist(
this);
4893 if (
id ==
"hedgehog_ether")
4897 Say(
"reflect_thorne", origin,
this);
4898 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4903 Say(
"reflect_acid",
this, origin);
4904 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4916 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4927 int num16 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4937 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4943 Condition.ignoreEffect =
true;
4945 Condition.ignoreEffect =
false;
4949 float num17 = (float)
hp / (
float)
MaxHP;
4956 PlaySound(
"heartbeat", 1f - num17 * 2f);
4989 EClass.player.forceTalk =
true;
4991 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
5002 void EvadeDeath(Action action)
5007 Chara.mana.value = 0;
5021 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
5023 int num18 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
5024 int num19 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
5027 int num20 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num18 / 10));
5028 origin.Chara.stamina.Mod(num20);
5034 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
5036 int num21 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
5037 origin.Chara.mana.Mod(num21);
5045 int num22 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num19 + 10));
5046 origin.Chara.mana.Mod(num22);
5063 bool hostile =
false;
5067 if (Chance(30 + eleP / 5, 100))
5069 MarkHostile().AddCondition<
ConBurning>(eleP);
5075 if (Chance(30 + eleP / 10, 100))
5080 else if (Chance(50 + eleP / 10, 100))
5086 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5092 if (Chance(30 + eleP / 5, 100))
5094 MarkHostile().AddCondition<
ConPoison>(eleP);
5098 if (Chance(30 + eleP / 5, 100))
5105 if (Chance(30 + eleP / 5, 100))
5114 if (Chance(30 + eleP / 5, 100))
5119 else if (Chance(30 + eleP / 5, 100))
5125 if (Chance(50 + eleP / 10, 100))
5133 if (Chance(30 + eleP / 5, 100))
5152 if (Chance(5 + eleP / 25, 40))
5156 if (Chance(5 + eleP / 25, 40))
5160 if (Chance(5 + eleP / 25, 40))
5164 if (Chance(5 + eleP / 25, 40))
5166 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5168 if (Chance(5 + eleP / 25, 40))
5172 if (Chance(5 + eleP / 25, 40))
5176 if (Chance(30 + eleP / 10, 100))
5182 if (Chance(50 + eleP / 10, 100))
5184 MarkHostile().AddCondition<
ConBleed>(eleP);
5188 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5201 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5205 static bool Chance(
int a,
int max)
5207 return Mathf.Min(a, max) >
EClass.
rnd(100);
5218 Card rootCard = GetRootCard();
5220 if (_pos !=
null && !_pos.
IsValid)
5231 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5232 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5234 text += e.source.alias;
5238 Msg.
Say(text,
this, rootCard);
5243 Msg.
Say(
"destroyed",
this);
5248 things.ForeachReverse(delegate(
Thing t)
5258 if (e !=
null && _pos !=
null && e.id == 21)
5264 Explode(pos, origin);
5272 origin = origin?.Chara,
5274 aliasEle =
"eleImpact"
5280 PlaySound(
material.GetSoundDead(sourceCard));
5288 Debug.Log(Name +
" is already destroyed.");
5299 Chara.isDead =
true;
5317 for (
int num = things.Count - 1; num >= 0; num--)
5319 things[num].Destroy();
5326 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5332 List<Card> list =
new List<Card>();
5333 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5336 if (this.rarity >=
Rarity.Legendary)
5369 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5381 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5389 if (flag2 && !isUserZone)
5392 if (!(text ==
"bubble_pudding"))
5394 if (text ==
"marshmallow_monster")
5401 bool num2 = text2 ==
"_meat";
5409 text2 =
"meat_marble";
5413 text2 =
"dattamono";
5416 if (thing3.
source._origin ==
"meat")
5436 if (!IsPCFaction && !isUserZone)
5438 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5440 string[] array = item2.
Split(
'/');
5441 int num4 = array[1].ToInt();
5490 if (!isBackerContent && !flag)
5526 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5547 List<Thing> list2 =
new List<Thing>();
5548 foreach (
Thing thing6
in things)
5574 if (num5 > 0 && list2.Count > 0)
5577 for (
int j = 0; j < list2.Count && j < num5; j++)
5583 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5586 foreach (
Card item3
in list)
5595 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5600 for (
int k = 0; k < num5; k++)
5629 List<Thing> list3 = thing4.
things.ToList();
5639 while (num8 > 0 && list3.Count != 0)
5641 Thing thing5 = list3.First();
5642 list3.Remove(thing5);
5653 foreach (
Thing thing7
in things)
5655 if (thing7.
GetInt(116) != 0)
5660 Point nearestPoint = GetRootCard().pos;
5665 foreach (
Card item4
in list)
5671 item4.isHidden =
false;
5672 item4.isNPCProperty =
false;
5729 case "egg_fertilized":
5734 string text =
"c_wilds";
5735 if (
id ==
"_meat" ||
id ==
"meat_marble")
5743 for (
int i = 0; i < 20; i++)
5746 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"_milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5756 if (crafter !=
null && crafter.id ==
"big_sister")
5758 cardRow = crafter.source;
5763 if (c_idRefCard.IsEmpty())
5765 MakeRefFrom(cardRow.
model);
5770 MakeFoodFrom(cardRow.
model);
5772 return this as
Thing;
5778 return this as
Thing;
5798 int num = race.
food[0].ToInt();
5799 bool flag =
id ==
"meat_marble";
5801 bool flag2 = category.
IsChildOf(
"meat");
5802 bool flag3 =
id ==
"marshmallow_nama" || category.
IsChildOf(
"egg") || trait is
TraitGene;
5803 bool flag4 = category.
IsChildOf(
"milk");
5814 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5817 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5819 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5823 num2 = ((!flag4) ? 3 : 2);
5827 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5841 foreach (
Element value
in c.elements.dict.Values)
5843 if ((!flag3 || value.
id != 1229) && (value.source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5848 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5849 foreach (KeyValuePair<int, int>
item in race.elementMap)
5853 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5856 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5857 for (
int i = 0; i < num2 && i < list.Count; i++)
5859 Tuple<int, int> tuple = list[i];
5860 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5862 if (c.Chara.IsUndead)
5864 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5866 isWeightChanged =
true;
5867 c_weight = race.height * 4 + 100;
5868 c_idMainElement = c.c_idMainElement;
5870 int num3 = c.LV - c.sourceCard.LV;
5876 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5880 if (flag2 && c.IsPCFaction && c.IsUnique)
5895 if (IsIgnoreName(
card))
5899 if (IsIgnoreName(card2))
5903 if (
card ==
null && card2 !=
null)
5910 MakeRefFrom(
card, card2);
5911 if (
card.c_idRefCard !=
null)
5913 c_idRefCard =
card.c_idRefCard;
5914 c_altName = TryGetFoodName(
card);
5919 c_altName2 = TryGetFoodName(card2);
5922 static bool IsIgnoreName(
Card c)
5952 if (!row.aka.IsEmpty())
5954 if (row.name ==
"*r" && row.aka ==
"*r")
5956 return "corpseGeneral".lang();
5958 if (row.name ==
"*r")
5960 return row.GetText(
"aka");
5963 return row.GetName();
5968 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5984 c_idRefCard = c1.
id;
5988 c_idRefCard2 = c2.id;
5989 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5991 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
6005 thing.c_idMainElement = c_idMainElement;
6014 return GiveBirth(thing, effect);
6032 int num2 = LV - sourceCard.
LV;
6037 if (num2 >= 10 && !HasElement(1290))
6045 return GiveBirth(thing, effect);
6051 EClass.player.forceTalk =
true;
6052 card.Talk(
"giveBirth");
6056 card.pos.PlayEffect(
"revive");
6057 card.pos.PlaySound(
"egg");
6069 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" });
6073 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
6075 PlaySound(
"egghatch");
6084 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
6087 if (chara !=
null && isChara)
6090 chara.isHatchling =
true;
6142 SayNothingHappans();
6145 PlayEffect(
"teleport");
6148 Say(
"antiTeleport",
this);
6149 PlaySound(
"gravity");
6154 PlaySound(
"teleport");
6155 Say(
"teleported",
this);
6164 if (chara.
enemy ==
this)
6175 EClass.player.haltMove =
true;
6177 PlayEffect(
"teleport", useRenderPos:
false);
6184 PlayEffect(
"ripple");
6185 PlaySound(
"Footstep/water");
6196 int num = p.x - pos.
x;
6197 int num2 = p.z - pos.
z;
6214 if (num == 0 && num2 == 0)
6228 for (
int i = -1; i < 2; i++)
6230 for (
int j = -1; j < 2; j++)
6234 point.x = pos.x + j;
6235 point.z = pos.z + i;
6249 return _Move(newPoint);
6252 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6256 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6260 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6262 if (!IsAliveInCurrentZone)
6288 Say(
"kick",
this, t);
6322 if (elements.
Value(ele) <= 0)
6324 if (includeNagative)
6326 return elements.
Value(ele) < 0;
6335 return elements.
Value(ele) >= req;
6350 if (HasElement(764))
6354 if (HasElement(759))
6358 if (HasElement(703))
6362 if (HasElement(758))
6366 if (HasElement(704))
6384 for (
int i = 0; i < a; i++)
6395 shared.color = 11010048f;
6396 shared.liquidLv = 0;
6398 SetRenderParam(shared);
6418 isDyed = mat !=
null;
6419 c_dyeMat = mat?.id ?? 0;
6435 else if (isElemental)
6472 int num = EClass.game.seed + refVal;
6473 num +=
id[0] % 10000;
6476 num +=
id[1] % 1000;
6479 num +=
id[2] % 1000;
6482 num +=
id[3] % 1000;
6485 num +=
id[4] % 1000;
6494 return ref _randColor;
6519 public void SetImage(Image image,
int dir,
int idSkin = 0)
6521 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6531 Sprite sprite = GetSprite();
6532 if (!c_idSpriteReplacer.IsEmpty())
6535 if (spriteReplacer !=
null)
6539 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6543 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6546 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6548 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6552 renderer.
ShowEmo(_emo, duration);
6560 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6565 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6570 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6575 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6578 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6580 Card rootCard = GetRootCard();
6587 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6612 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6618 Card rootCard = GetRootCard();
6622 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6630 Card rootCard = GetRootCard();
6653 public virtual void Rotate(
bool reverse =
false)
6656 if (sourceCard.
tiles.Length > 4)
6658 num = sourceCard.
tiles.Length;
6720 fx = fx - vector.x + thingPosition.x;
6721 fy = fy - vector.y + thingPosition.y;
6725 float num2 = (fy = 0f);
6749 renderParam.x = v.x;
6750 renderParam.y = v.y;
6751 renderParam.z = v.z;
6753 v.x = renderParam.
x;
6754 v.y = renderParam.
y;
6755 v.z = renderParam.
z;
6769 v.z += thingPosition.z;
6776 if (useCurrentPosition)
6791 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6802 EClass.player.lightRadius = 1;
6810 return GetLightRadius() > 0;
6818 return 0.01f * LightData.color.a * 256f * 1.12f;
6820 if (IsPCFaction && !IsPC)
6886 num2 = traitLightSource.LightRadius;
6891 if (lightRadius > 0)
6893 if (lightRadius > num2)
6913 int radius = GetLightRadius();
6918 float power = GetLightPower();
6939 EClass.player.lightRadius = radius;
6940 EClass.player.lightPower = power;
6946 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6957 int num = (trait.UseLightColor ? c_lightColor : 0);
6960 fov.r = (byte)(num / 1024);
6961 fov.g = (byte)(num % 1024 / 32);
6962 fov.b = (byte)(num % 32);
7003 if (fov !=
null && fov.
lastPoints.Count != 0)
7022 things.ForeachReverse(delegate(
Thing t)
7026 if (sourceCard.
_origin ==
"dish")
7034 else if (!isChara && trait.
Decay != 0)
7036 Decay(trait.
Decay * hour);
7054 int num2 = MaxDecay / 4 * 3;
7059 num =
card.trait.DecaySpeedChild;
7061 num = num * trait.DecaySpeed / 100;
7062 int num3 = Evalue(405);
7065 num = num * (100 - num3 * 2) / 100;
7077 if (decay + a > MaxDecay)
7079 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
7088 card.AddCard(thing);
7089 if (!IsParentLocked())
7091 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
7100 else if (GetRootCard() ==
EClass.
pc)
7102 if (!IsParentLocked())
7114 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
7116 if (!IsParentLocked())
7123 bool IsParentLocked()
7125 if (parent is
Thing)
7127 return (parent as
Thing).c_lockLv > 0;
7135 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7138 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7142 EClass.player.forceTalk =
false;
7146 EClass.player.forceTalk =
false;
7147 if (!isSynced && !forceSync)
7152 GameLang.refDrama1 = ref1;
7153 GameLang.refDrama2 = ref2;
7154 string text = GetTalkText(idTopic, stripPun:
true);
7156 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7162 switch ((condition !=
null) ? condition.
chara.
id :
id)
7175 TalkRaw(text, ref1, ref2, forceSync);
7178 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7180 if ((!isSynced && !forceSync) || text.IsEmpty())
7187 text = text.Replace(
"#1", ref1);
7191 text = text.Replace(
"#2", ref2);
7193 HostRenderer.Say(ApplyNewLine(text));
7194 text = StripTalkSpecialCharacters(text);
7195 bool flag = text.StartsWith(
"*");
7199 text = text.Bracket();
7201 Msg.
Say(text.Replace(
"&",
""));
7210 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7212 return text.Substring(2);
7218 return text.Substring(1);
7225 if (text.Contains(
"&"))
7227 string text2 =
"_comma".lang();
7228 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7229 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7230 text = text.Replace(
"&", Environment.NewLine ??
"");
7235 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7237 if (isSynced && !text.IsEmpty())
7241 text = text.Replace(
"#1", ref1);
7245 text = text.Replace(
"#2", ref2);
7247 HostRenderer.Say(text);
7253 Say(
"nothingHappens");
7256 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7265 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7274 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7283 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7287 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7288 if (!text.IsEmpty())
7290 text = text.Split(
'|').RandomItem();
7291 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7293 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7295 text =
"(" + text +
")";
7297 text = text.Replace(
"。)",
")");
7300 return ApplyTone(text, stripPun);
7306 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7309 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7315 string[] array = _tones.IsEmpty(
"").Split(
'|');
7316 string key = array[0];
7321 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7325 if (array[0].IsEmpty())
7334 if (array.Length >= 2)
7336 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7338 if (array.Length >= 3)
7340 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7343 text2 = stringBuilder.ToString();
7347 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7358 return text2.StripLastPun();
7373 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7374 if (list.Count != 0)
7376 int mtp = EClass.core.config.test.extraToneMTP
switch
7389 string text = list.RandomItem()[
"id"];
7390 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7397 return ListCraftBonusTraits().Count > 0;
7402 List<Element> list =
new List<Element>();
7403 string[] tag = sourceCard.
tag;
7404 for (
int i = 0; i < tag.Length; i++)
7406 string[] array = tag[i].Split(
'/');
7407 if (!(array[0] !=
"craft_bonus"))
7423 if (dest.
stack !=
null)
7427 Say(
"stack_thing", t, dest.
stack);
7441 c_idBacker = row.
id;
7447 chara.hostility = hostility2;
7453 Chara.idFaith = row.
deity.ToLowerInvariant();
7458 if (
id ==
"putty_snow")
7471 if (c_idBacker == 164)
7484 c_textureData = GetPaintData();
7494 Sprite sprite = GetSprite();
7495 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7496 int num = sprite.texture.width * 2;
7497 int num2 = sprite.texture.height * 2;
7498 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7499 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7500 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7501 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7502 texture2D2.SetPixels(pixels);
7504 byte[] result = texture2D2.EncodeToJPG();
7505 UnityEngine.Object.Destroy(texture2D);
7506 UnityEngine.Object.Destroy(texture2D2);
7512 if ((
bool)_paintSprite)
7514 UnityEngine.Object.Destroy(_paintSprite.texture);
7515 UnityEngine.Object.Destroy(_paintSprite);
7516 _paintSprite =
null;
7524 byte[] data = c_textureData;
7525 Texture2D texture2D =
new Texture2D(1, 1);
7526 texture2D.LoadImage(data);
7527 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7531 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7534 return _paintSprite;
7539 if (!(GetRestrainer() ==
null || force))
7543 isRestrained =
false;
7544 Say(
"unrestrained",
this);
7555 if (c_rescueState ==
RescueState.WaitingForRescue)
7569 c.DoHostileAction(
item, immediate:
true);
7596 result = row.value * mat.value / 100;
7633 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7634 if (
id ==
"plat" && !sell)
7645 num2 += (float)c_priceCopy * 0.2f;
7646 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7650 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7652 if (IsFood && !
material.tag.Contains(
"food"))
7657 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7675 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7677 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7679 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7680 if (IsEquipmentOrRanged)
7685 num4 += value.
source.value;
7687 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7688 if (rarity >=
Rarity.Legendary)
7690 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7698 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7700 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)))));
7704 num2 *= (float)(tier + 1);
7711 if (priceType ==
PriceType.CopyShop && sell)
7717 if (
id ==
"littleball")
7724 if (
id ==
"crimale2")
7732 case "ticket_fortune":
7738 case "scroll_alias":
7740 case "scroll_biography":
7755 if (!(text ==
"mathammer"))
7757 if (!(text ==
"water_jure"))
7763 return 50 + material.tier * material.tier * 10;
7776 case "hammer_strip":
7806 case "diary_sister":
7810 case "diary_catsister":
7812 case "container_magic":
7814 case "wrench_tent_elec":
7816 case "wrench_tent_soil":
7818 case "wrench_tent_seabed":
7822 case "wrench_storage":
7824 case "wrench_fridge":
7826 case "wrench_extend_v":
7828 case "wrench_extend_h":
7834 case "hammer_garokk":
7836 case "scroll_random":
7850 if (!sell &&
id ==
"casino_coin")
7854 int value = GetValue(priceType, sell);
7864 Trait trait = this.trait;
7869 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7874 p *= 1f + 0.5f * (float)c_containerSize;
7877 if (c_priceFix != 0)
7879 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7889 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7900 if (!sell && category.
id ==
"spellbook")
7904 bool flag = priceType ==
PriceType.CopyShop;
7905 int num = ((!flag) ? 1 : 5);
7906 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7907 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7908 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7913 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7915 p *= 0.20000000298023224;
7918 p *= 0.20000000298023224;
7921 p *= 0.20000000298023224;
7925 p *= 0.20000000298023224;
7931 if ((uint)(priceType - 1) <= 1u)
7943 if (
id ==
"rod_wish")
7945 p *= (sell ? 0.01f : 50f);
7960 p *= 0.20000000298023224;
7964 p *= 0.10000000149011612;
7967 p *= 0.0020000000949949026;
7970 p *= 0.00019999999494757503;
7973 p *= 0.004999999888241291;
7984 p *= (flag ? 1.25f : 0.3f);
7988 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7992 p *= (flag ? 0.9f : 0.5f);
8004 p *= 1f + 0.2f * (float)c.Evalue(1406);
8017 p *= 1.100000023841858;
8051 else if (category.
IsChildOf(
"furniture"))
8071 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
8078 p = ((!sell) ? 1 : 0);
8086 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
8088 else if (p > 10000.0)
8090 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
8092 else if (p > 1000.0)
8094 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
8098 p = Mathf.CeilToInt((
float)p / 100f) * 100;
8102 p = Mathf.CeilToInt((
float)p / 10f) * 10;
8110 if (p > (
double)(sell ? 500000000 : 1000000000))
8123 return Name + GetExtraName();
8140 ForeachPoint(delegate(
Point p,
bool main)
8142 int num2 = DistMulti(p, c);
8150 return DistMulti(pos, c);
8182 isCensored = enable;
8192 if (isDeconstructing != deconstruct)
8202 isDeconstructing = deconstruct;
8216 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8219 sortVal = -GetPrice(
currency) * 1000;
8222 sortVal = -Num * 1000;
8225 sortVal = category.sortVal * 1000;
8228 sortVal = -ChildrenAndSelfWeight * 1000;
8231 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8234 sortVal = -GetPrice(
currency) * 1000;
8237 sortVal = sourceCard._index * 1000;
8247 num =
id.CompareTo(c.
id);
8267 num = encLV - c.
encLV;
8286 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8304 action(pos, arg2:
true);
8318 SE.Play(
"pop_paper");
8348 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8361 if (!HaveFur() || c_fur < 0)
static bool not(DramaManager dm, Dictionary< string, string > line, params string[] parameters)
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
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 SetInt(string id, int value=0)
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)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
T SetObj< T >(string id, object o)
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
string GetStr(string id, string defaultStr=null)
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")
string StripTalkSpecialCharacters(string text)
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)
Card MakeFoodFrom(Card c, bool makeRef=true)
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)
void SetStr(string id, string value=null)
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
void SetObj(string id, object o)
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 AddInt(string id, int value)
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)
void SetBool(string id, bool enable)
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)
int GetInt(string id, int? defaultInt=null)
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)
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)
Dictionary< string, int > dialogFlags
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
Religion GetArtifactDeity(string id)
static Religion recentWrath
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(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)