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;
4153 DamageHP(dmg, 0, 0, attackSource, origin);
4162 bool flag = originalTarget !=
null;
4163 Action onEvade =
null;
4172 Say(
"wall_bond", chara3,
this);
4181 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 5u)
4187 int num = chara4.
Evalue(1241);
4188 int num2 = chara4.
Evalue(438);
4191 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4192 chara4.
DamageHP(dmg * (100 + ((num2 <= 0) ? 10 : 0)) / 100, ele, eleP, attackSource, origin, showEffect,
weapon,
Chara);
4200 if (origin !=
null && origin.HasElement(1208))
4202 switch (attackSource)
4205 dmg = dmg * 130 / 100;
4206 eleP = eleP * 150 / 100;
4209 dmg = dmg * 120 / 100;
4210 eleP = eleP * 150 / 100;
4216 dmg = dmg * (100 + origin.Evalue(94)) / 100;
4219 if (ele == 0 || ele == 926)
4224 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4230 if (attackSource !=
AttackSource.Condition && showEffect)
4240 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4246 if (origin.HasElement(1247))
4251 if (attackSource ==
AttackSource.MagicArrow && origin.HasElement(1244))
4255 if (attackSource ==
AttackSource.MagicHand && origin.HasElement(1246))
4259 if (e.
id == 916 && (
HasElement(1253) || origin.HasElement(1253)))
4265 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4266 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4273 if (chara2 !=
null && chara2.
isWet)
4282 if (chara !=
null && chara.
isWet)
4284 dmg = dmg * 150 / 100;
4290 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4298 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4300 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4309 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4314 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4316 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4323 dmg = dmg * 90 / 100;
4327 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4331 dmg = dmg * 90 / 100;
4350 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4354 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4359 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4361 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4363 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4371 int num7 =
MaxHP / 10;
4372 long num8 = dmg - num7;
4373 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4385 long num9 = 99999999L;
4389 if (condition !=
null)
4391 num9 = num9 * (100 + condition.lv * 5) / 100;
4398 float num10 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4409 if (hp < 0 && Chara.mana.value >= 0)
4425 Chara.mana.value -= (int)dmg;
4442 float ratio = (float)dmg / (
float)
MaxHP;
4453 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4455 aI_PracticeDummy.hit++;
4456 aI_PracticeDummy.totalDamage += dmg;
4499 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4508 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4529 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4531 EClass.player.invlunerable =
true;
4570 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4577 text =
"dead_" + e.
source.alias;
4581 text =
"dead_attack";
4589 text =
"kill_" + e.source.alias;
4593 text =
"kill_attack";
4595 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4603 Say(
"reboot",
this);
4610 if (HasCondition<ConRebirth>())
4612 Say(
"rebirth",
this);
4624 Msg.alwaysVisible =
true;
4625 Msg.
Say(
"layhand", chara5,
this);
4626 Msg.
Say(
"pray_heal",
this);
4636 if (zoneInstanceBout !=
null)
4668 Die(e, origin, attackSource, originalTarget);
4669 if (origin !=
null && origin.id ==
"unseenhand" && !origin.IsGlobal)
4671 origin.isSummon =
true;
4672 origin.c_summonDuration = 4;
4679 string text2 =
new int[18]
4681 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4682 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4683 }.RandomItem().ToString();
4686 text2 =
"casino_coin";
4690 text2 =
"scratchcard";
4718 if (origin !=
null && origin.isChara)
4740 if (origin.GetInt(106) == 0)
4742 origin.Chara.TalkTopic(
"kill");
4747 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4749 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num10 + (
IsPC ?
"pc" :
""), origin,
this);
4753 int num14 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4754 if (num10 >= (
float)num14)
4758 Say(
"dmg_" + e.source.alias,
this);
4762 Say(
"dmg" + num10,
this);
4785 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4789 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4793 int num16 = origin.Dist(
this);
4797 if (
id ==
"hedgehog_ether")
4801 Say(
"reflect_thorne", origin,
this);
4802 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4807 Say(
"reflect_acid",
this, origin);
4808 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4820 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4831 int num17 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4841 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4847 Condition.ignoreEffect =
true;
4849 Condition.ignoreEffect =
false;
4853 float num18 = (float)
hp / (
float)
MaxHP;
4860 PlaySound(
"heartbeat", 1f - num18 * 2f);
4893 EClass.player.forceTalk =
true;
4895 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4906 void EvadeDeath(Action action)
4911 Chara.mana.value = 0;
4925 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4927 int num19 = origin.Evalue(662) + (
weapon?.Evalue(662, ignoreGlobalElement:
true) ?? 0);
4928 int num20 = origin.Evalue(661) + (
weapon?.Evalue(661, ignoreGlobalElement:
true) ?? 0);
4935 int num21 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, num19 / 10));
4936 origin.Chara.stamina.Mod(num21);
4942 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4944 int num22 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4945 origin.Chara.mana.Mod(num22);
4953 int num23 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, num20 + 10));
4954 origin.Chara.mana.Mod(num23);
4971 bool hostile =
false;
4975 if (Chance(30 + eleP / 5, 100))
4977 MarkHostile().AddCondition<
ConBurning>(eleP);
4983 if (Chance(30 + eleP / 10, 100))
4988 else if (Chance(50 + eleP / 10, 100))
4994 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
5000 if (Chance(30 + eleP / 5, 100))
5002 MarkHostile().AddCondition<
ConPoison>(eleP);
5006 if (Chance(30 + eleP / 5, 100))
5013 if (Chance(30 + eleP / 5, 100))
5022 if (Chance(30 + eleP / 5, 100))
5027 else if (Chance(30 + eleP / 5, 100))
5033 if (Chance(50 + eleP / 10, 100))
5041 if (Chance(30 + eleP / 5, 100))
5060 if (Chance(5 + eleP / 25, 40))
5064 if (Chance(5 + eleP / 25, 40))
5068 if (Chance(5 + eleP / 25, 40))
5072 if (Chance(5 + eleP / 25, 40))
5074 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
5076 if (Chance(5 + eleP / 25, 40))
5080 if (Chance(5 + eleP / 25, 40))
5084 if (Chance(30 + eleP / 10, 100))
5090 if (Chance(50 + eleP / 10, 100))
5092 MarkHostile().AddCondition<
ConBleed>(eleP);
5096 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
5109 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
5113 static bool Chance(
int a,
int max)
5115 return Mathf.Min(a, max) >
EClass.
rnd(100);
5126 Card rootCard = GetRootCard();
5128 if (_pos !=
null && !_pos.
IsValid)
5139 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5140 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5142 text += e.source.alias;
5146 Msg.
Say(text,
this, rootCard);
5151 Msg.
Say(
"destroyed",
this);
5156 things.ForeachReverse(delegate(
Thing t)
5165 if (e !=
null && _pos !=
null && e.id == 21)
5171 Explode(pos, origin);
5179 origin = origin?.Chara,
5181 aliasEle =
"eleImpact"
5187 PlaySound(
material.GetSoundDead(sourceCard));
5195 Debug.Log(Name +
" is already destroyed.");
5206 Chara.isDead =
true;
5224 for (
int num = things.Count - 1; num >= 0; num--)
5226 things[num].Destroy();
5233 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5239 List<Card> list =
new List<Card>();
5240 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5243 if (this.rarity >=
Rarity.Legendary)
5276 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5288 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5296 if (flag2 && !isUserZone)
5299 bool num2 = text ==
"_meat";
5311 text =
"meat_marble";
5314 if (thing3.
source._origin ==
"meat")
5328 if (!IsPCFaction && !isUserZone)
5330 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5332 string[] array = item2.
Split(
'/');
5333 int num4 = array[1].ToInt();
5382 if (!isBackerContent && !flag)
5418 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5428 if (text2 ==
"big_daddy" || text2 ==
"santa")
5436 List<Thing> list2 =
new List<Thing>();
5437 foreach (
Thing thing6
in things)
5463 if (num5 > 0 && list2.Count > 0)
5466 for (
int j = 0; j < list2.Count && j < num5; j++)
5472 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5475 foreach (
Card item3
in list)
5484 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5489 for (
int k = 0; k < num5; k++)
5518 List<Thing> list3 = thing4.
things.ToList();
5528 while (num8 > 0 && list3.Count != 0)
5530 Thing thing5 = list3.First();
5531 list3.Remove(thing5);
5542 foreach (
Thing thing7
in things)
5544 if (thing7.
GetInt(116) != 0)
5549 Point nearestPoint = GetRootCard().pos;
5554 foreach (
Card item4
in list)
5560 item4.isHidden =
false;
5561 item4.isNPCProperty =
false;
5618 case "egg_fertilized":
5623 string text =
"c_wilds";
5624 if (
id ==
"_meat" ||
id ==
"meat_marble")
5632 for (
int i = 0; i < 20; i++)
5635 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5645 if (crafter !=
null && crafter.id ==
"big_sister")
5647 cardRow = crafter.source;
5652 if (c_idRefCard.IsEmpty())
5654 MakeRefFrom(cardRow.
model);
5659 MakeFoodFrom(cardRow.
model);
5661 return this as
Thing;
5667 return this as
Thing;
5684 int num = race.
food[0].ToInt();
5685 bool flag =
id ==
"meat_marble";
5687 bool flag2 = category.
IsChildOf(
"meat");
5699 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5702 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5704 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5708 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5726 foreach (
Element value
in c.elements.dict.Values)
5728 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5733 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5734 foreach (KeyValuePair<int, int>
item in race.elementMap)
5738 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5741 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5742 for (
int i = 0; i < num2 && i < list.Count; i++)
5744 Tuple<int, int> tuple = list[i];
5745 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5747 if (c.Chara.IsUndead)
5749 elements.
ModBase(73, (c.Chara.race.id ==
"undeadgod") ? (-90) : (-20));
5751 isWeightChanged =
true;
5752 c_weight = race.height * 4 + 100;
5753 c_idMainElement = c.c_idMainElement;
5755 int num3 = c.LV - c.sourceCard.LV;
5761 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5765 if (flag2 && c.IsPCFaction && c.IsUnique)
5780 if (IsIgnoreName(
card))
5784 if (IsIgnoreName(card2))
5788 if (
card ==
null && card2 !=
null)
5795 MakeRefFrom(
card, card2);
5796 if (
card.c_idRefCard !=
null)
5798 c_idRefCard =
card.c_idRefCard;
5799 c_altName = TryGetFoodName(
card);
5804 c_altName2 = TryGetFoodName(card2);
5807 static bool IsIgnoreName(
Card c)
5837 if (!row.aka.IsEmpty())
5839 if (row.name ==
"*r" && row.aka ==
"*r")
5841 return "corpseGeneral".lang();
5843 if (row.name ==
"*r")
5845 return row.GetText(
"aka");
5848 return row.GetName();
5853 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5869 c_idRefCard = c1.
id;
5873 c_idRefCard2 = c2.id;
5874 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName((!simple) ? NameStyle.Ref :
NameStyle.Simple, (!c2.isChara) ? 1 : 0));
5876 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5890 thing.c_idMainElement = c_idMainElement;
5899 return GiveBirth(thing, effect);
5917 int num2 = LV - sourceCard.
LV;
5922 if (num2 >= 10 && !HasElement(1290))
5930 return GiveBirth(thing, effect);
5936 EClass.player.forceTalk =
true;
5937 card.Talk(
"giveBirth");
5941 card.pos.PlayEffect(
"revive");
5942 card.pos.PlaySound(
"egg");
5954 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" });
5958 AddBlood(12, (uid % 2 == 0) ? (-1) : 3);
5960 PlaySound(
"egghatch");
5969 for (
int i = 0; i < 1 +
EClass.
rnd(num + 1); i++)
5972 if (chara !=
null && isChara)
6026 SayNothingHappans();
6029 PlayEffect(
"teleport");
6032 Say(
"antiTeleport",
this);
6033 PlaySound(
"gravity");
6038 PlaySound(
"teleport");
6039 Say(
"teleported",
this);
6048 if (chara.
enemy ==
this)
6059 EClass.player.haltMove =
true;
6061 PlayEffect(
"teleport", useRenderPos:
false);
6068 PlayEffect(
"ripple");
6069 PlaySound(
"Footstep/water");
6080 int num = p.x - pos.
x;
6081 int num2 = p.z - pos.
z;
6098 if (num == 0 && num2 == 0)
6110 for (
int i = -1; i < 2; i++)
6112 for (
int j = -1; j < 2; j++)
6116 point.x = pos.x + j;
6117 point.z = pos.z + i;
6130 return _Move(newPoint);
6133 public void Kick(
Point p,
bool ignoreSelf =
false,
bool checkWall =
true)
6137 Kick(
item, ignoreSelf, karmaLoss:
true, show:
true, checkWall);
6141 public void Kick(
Chara t,
bool ignoreSelf =
false,
bool karmaLoss =
true,
bool show =
true,
bool checkWall =
true)
6143 if (!IsAliveInCurrentZone)
6169 Say(
"kick",
this, t);
6203 if (elements.
Value(ele) <= 0)
6205 if (includeNagative)
6207 return elements.
Value(ele) < 0;
6216 return elements.
Value(ele) >= req;
6231 if (HasElement(764))
6235 if (HasElement(759))
6239 if (HasElement(703))
6243 if (HasElement(758))
6247 if (HasElement(704))
6265 for (
int i = 0; i < a; i++)
6276 shared.color = 11010048f;
6277 shared.liquidLv = 0;
6279 SetRenderParam(shared);
6299 isDyed = mat !=
null;
6300 c_dyeMat = mat?.id ?? 0;
6316 else if (isElemental)
6353 int num = EClass.game.seed + refVal;
6354 num +=
id[0] % 10000;
6357 num +=
id[1] % 1000;
6360 num +=
id[2] % 1000;
6363 num +=
id[3] % 1000;
6366 num +=
id[4] % 1000;
6375 return ref _randColor;
6400 public void SetImage(Image image,
int dir,
int idSkin = 0)
6402 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6412 Sprite sprite = GetSprite();
6413 if (!c_idSpriteReplacer.IsEmpty())
6416 if (spriteReplacer !=
null)
6420 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6424 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6427 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6429 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6433 renderer.
ShowEmo(_emo, duration);
6441 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6446 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6451 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6456 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6459 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6461 Card rootCard = GetRootCard();
6468 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6493 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6499 Card rootCard = GetRootCard();
6503 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6511 Card rootCard = GetRootCard();
6534 public virtual void Rotate(
bool reverse =
false)
6537 if (sourceCard.
tiles.Length > 4)
6539 num = sourceCard.
tiles.Length;
6601 fx = fx - vector.x + thingPosition.x;
6602 fy = fy - vector.y + thingPosition.y;
6606 float num2 = (fy = 0f);
6630 renderParam.x = v.x;
6631 renderParam.y = v.y;
6632 renderParam.z = v.z;
6634 v.x = renderParam.
x;
6635 v.y = renderParam.
y;
6636 v.z = renderParam.
z;
6650 v.z += thingPosition.z;
6657 if (useCurrentPosition)
6672 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6683 EClass.player.lightRadius = 1;
6691 return GetLightRadius() > 0;
6699 return 0.01f * LightData.color.a * 256f * 1.12f;
6701 if (IsPCFaction && !IsPC)
6767 num2 = traitLightSource.LightRadius;
6772 if (lightRadius > 0)
6774 if (lightRadius > num2)
6794 int radius = GetLightRadius();
6799 float power = GetLightPower();
6820 EClass.player.lightRadius = radius;
6821 EClass.player.lightPower = power;
6827 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6838 int num = (trait.UseLightColor ? c_lightColor : 0);
6841 fov.r = (byte)(num / 1024);
6842 fov.g = (byte)(num % 1024 / 32);
6843 fov.b = (byte)(num % 32);
6884 if (fov !=
null && fov.
lastPoints.Count != 0)
6903 things.ForeachReverse(delegate(
Thing t)
6907 if (sourceCard.
_origin ==
"dish")
6915 else if (!isChara && trait.
Decay != 0)
6917 Decay(trait.
Decay * hour);
6935 int num2 = MaxDecay / 4 * 3;
6940 num =
card.trait.DecaySpeedChild;
6942 num = num * trait.DecaySpeed / 100;
6943 int num3 = Evalue(405);
6946 num = num * (100 - num3 * 2) / 100;
6958 if (decay + a > MaxDecay)
6960 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6969 card.AddCard(thing);
6970 if (!IsParentLocked())
6972 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6981 else if (GetRootCard() ==
EClass.
pc)
6983 if (!IsParentLocked())
6995 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6997 if (!IsParentLocked())
7004 bool IsParentLocked()
7006 if (parent is
Thing)
7008 return (parent as
Thing).c_lockLv > 0;
7016 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
7019 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7023 EClass.player.forceTalk =
false;
7027 EClass.player.forceTalk =
false;
7028 if (!isSynced && !forceSync)
7033 GameLang.refDrama1 = ref1;
7034 GameLang.refDrama2 = ref2;
7035 string text = GetTalkText(idTopic, stripPun:
true);
7037 if ((HasElement(1232) || (condition !=
null && condition.
IsBaby)) && idTopic !=
"baby")
7043 switch ((condition !=
null) ? condition.
chara.
id :
id)
7056 TalkRaw(text, ref1, ref2, forceSync);
7059 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
7061 if ((!isSynced && !forceSync) || text.IsEmpty())
7068 text = text.Replace(
"#1", ref1);
7072 text = text.Replace(
"#2", ref2);
7074 HostRenderer.Say(ApplyNewLine(text));
7075 text = StripTalkSpeiclaCharacters(text);
7076 bool flag = text.StartsWith(
"*");
7080 text = text.Bracket();
7082 Msg.
Say(text.Replace(
"&",
""));
7091 if (text.Length > 1 &&
int.TryParse(text[1].ToString() ??
"", out var _))
7093 return text.Substring(2);
7099 return text.Substring(1);
7106 if (text.Contains(
"&"))
7108 string text2 =
"_comma".lang();
7109 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
7110 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
7111 text = text.Replace(
"&", Environment.NewLine ??
"");
7116 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
7118 if (isSynced && !text.IsEmpty())
7122 text = text.Replace(
"#1", ref1);
7126 text = text.Replace(
"#2", ref2);
7128 HostRenderer.Say(text);
7134 Say(
"nothingHappens");
7137 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
7146 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
7155 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
7164 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
7168 string text =
MOD.
listTalk.
GetTalk((condition !=
null) ? condition.
chara.
id : c_idTalk.IsEmpty(
id), idTopic, useDefault, flag);
7169 if (!text.IsEmpty())
7171 text = text.Split(
'|').RandomItem();
7172 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
7174 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
7176 text =
"(" + text +
")";
7178 text = text.Replace(
"。)",
")");
7181 return ApplyTone(text, stripPun);
7187 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
7190 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
7196 string[] array = _tones.IsEmpty(
"").Split(
'|');
7197 string key = array[0];
7202 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7206 if (array[0].IsEmpty())
7215 if (array.Length >= 2)
7217 stringBuilder.Replace(
"_toneI".lang(), array[1]);
7219 if (array.Length >= 3)
7221 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
7224 text2 = stringBuilder.ToString();
7228 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
7239 return text2.StripLastPun();
7254 List<Dictionary<string, string>> list =
MOD.
tones.
list;
7255 if (list.Count != 0)
7257 int mtp = EClass.core.config.test.extraToneMTP
switch
7270 string text = list.RandomItem()[
"id"];
7271 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
7278 return ListCraftBonusTraits().Count > 0;
7283 List<Element> list =
new List<Element>();
7284 string[] tag = sourceCard.
tag;
7285 for (
int i = 0; i < tag.Length; i++)
7287 string[] array = tag[i].Split(
'/');
7288 if (!(array[0] !=
"craft_bonus"))
7304 if (dest.
stack !=
null)
7308 Say(
"stack_thing", t, dest.
stack);
7322 c_idBacker = row.
id;
7328 chara.hostility = hostility2;
7334 Chara.idFaith = row.
deity.ToLowerInvariant();
7339 if (
id ==
"putty_snow")
7352 if (c_idBacker == 164)
7365 c_textureData = GetPaintData();
7375 Sprite sprite = GetSprite();
7376 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7377 int num = sprite.texture.width * 2;
7378 int num2 = sprite.texture.height * 2;
7379 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7380 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7381 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7382 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7383 texture2D2.SetPixels(pixels);
7385 byte[] result = texture2D2.EncodeToJPG();
7386 UnityEngine.Object.Destroy(texture2D);
7387 UnityEngine.Object.Destroy(texture2D2);
7393 if ((
bool)_paintSprite)
7395 UnityEngine.Object.Destroy(_paintSprite.texture);
7396 UnityEngine.Object.Destroy(_paintSprite);
7397 _paintSprite =
null;
7405 byte[] data = c_textureData;
7406 Texture2D texture2D =
new Texture2D(1, 1);
7407 texture2D.LoadImage(data);
7408 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7412 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7415 return _paintSprite;
7420 if (!(GetRestrainer() ==
null || force))
7424 isRestrained =
false;
7425 Say(
"unrestrained",
this);
7436 if (c_rescueState ==
RescueState.WaitingForRescue)
7450 c.DoHostileAction(
item, immediate:
true);
7477 result = row.value * mat.value / 100;
7514 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7515 if (
id ==
"plat" && !sell)
7526 num2 += (float)c_priceCopy * 0.2f;
7527 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7531 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7533 if (IsFood && !
material.tag.Contains(
"food"))
7538 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7556 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7558 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7560 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7561 if (IsEquipmentOrRanged)
7566 num4 += value.
source.value;
7568 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7569 if (rarity >=
Rarity.Legendary)
7571 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7579 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7581 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)))));
7585 num2 *= (float)(tier + 1);
7592 if (priceType ==
PriceType.CopyShop && sell)
7598 if (
id ==
"littleball")
7605 if (
id ==
"crimale2")
7613 case "ticket_fortune":
7619 case "scroll_alias":
7621 case "scroll_biography":
7636 if (!(text ==
"mathammer"))
7638 if (!(text ==
"water_jure"))
7644 return 50 + material.tier * material.tier * 10;
7657 case "hammer_strip":
7687 case "diary_sister":
7691 case "diary_catsister":
7693 case "container_magic":
7695 case "wrench_tent_elec":
7697 case "wrench_tent_soil":
7699 case "wrench_tent_seabed":
7703 case "wrench_storage":
7705 case "wrench_fridge":
7707 case "wrench_extend_v":
7709 case "wrench_extend_h":
7715 case "hammer_garokk":
7717 case "scroll_random":
7731 if (!sell &&
id ==
"casino_coin")
7735 int value = GetValue(priceType, sell);
7745 Trait trait = this.trait;
7750 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7755 p *= 1f + 0.5f * (float)c_containerSize;
7758 if (c_priceFix != 0)
7760 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7770 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7781 if (!sell && category.
id ==
"spellbook")
7785 bool flag = priceType ==
PriceType.CopyShop;
7786 int num = ((!flag) ? 1 : 5);
7787 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7788 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7789 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7794 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7796 p *= 0.20000000298023224;
7799 p *= 0.20000000298023224;
7802 p *= 0.20000000298023224;
7806 p *= 0.20000000298023224;
7812 if ((uint)(priceType - 1) <= 1u)
7824 if (
id ==
"rod_wish")
7826 p *= (sell ? 0.01f : 50f);
7841 p *= 0.20000000298023224;
7845 p *= 0.10000000149011612;
7848 p *= 0.0020000000949949026;
7851 p *= 0.00019999999494757503;
7854 p *= 0.004999999888241291;
7865 p *= (flag ? 1.25f : 0.3f);
7869 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7873 p *= (flag ? 0.9f : 0.5f);
7885 p *= 1f + 0.2f * (float)c.Evalue(1406);
7898 p *= 1.100000023841858;
7932 else if (category.
IsChildOf(
"furniture"))
7952 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7959 p = ((!sell) ? 1 : 0);
7967 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7969 else if (p > 10000.0)
7971 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7973 else if (p > 1000.0)
7975 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7979 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7983 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7991 if (p > (
double)(sell ? 500000000 : 1000000000))
8004 return Name + GetExtraName();
8021 ForeachPoint(delegate(
Point p,
bool main)
8023 int num2 = DistMulti(p, c);
8031 return DistMulti(pos, c);
8063 isCensored = enable;
8073 if (isDeconstructing != deconstruct)
8083 isDeconstructing = deconstruct;
8097 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
8100 sortVal = -GetPrice(
currency) * 1000;
8103 sortVal = -Num * 1000;
8106 sortVal = category.sortVal * 1000;
8109 sortVal = -ChildrenAndSelfWeight * 1000;
8112 sortVal = -ChildrenAndSelfWeightSingle * 1000;
8115 sortVal = -GetPrice(
currency) * 1000;
8118 sortVal = sourceCard._index * 1000;
8128 num =
id.CompareTo(c.
id);
8148 num = encLV - c.
encLV;
8167 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
8185 action(pos, arg2:
true);
8199 SE.Play(
"pop_paper");
8229 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
8242 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)
void DamageHP(long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
string StripTalkSpeiclaCharacters(string text)
virtual bool MatchEncSearch(string s)
virtual string GetDetail()
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void PlaySoundImpact(bool spatial=true)
virtual string actorPrefab
virtual void OnBeforeCreate()
void NotifyAddThing(Thing t, int num)
MixedFoodData c_mixedFoodData
void AddEditorTag(EditorTag tag)
virtual string GetHoverText2()
void ApplySocket(Thing t)
virtual bool IsDeadOrSleeping
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
int GetCurrency(string id="money")
void ForeachPoint(Action< Point, bool > action)
void Dye(SourceMaterial.Row mat)
virtual bool IsPCPartyMinion
string c_idSpriteReplacer
SourceMaterial.Row _material
bool HasElement(int ele, int req)
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
void ModExpParty(int ele, int a)
bool HasTalk(string idTopic)
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
void DecayNatural(int hour=1)
bool IsInMutterDistance(int d=10)
virtual void OnCreate(int genLv)
virtual void LookAt(Card c)
void RenderMarker(Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
virtual long ApplyProtection(long dmg, int mod=100)
void MakeFoodRef(Card c1, Card c2=null)
MoveResult TryMoveFrom(Point p)
virtual void OnDeserialized()
void _OnSerializing(StreamingContext context)
virtual CardRow sourceRenderCard
int ChildrenAndSelfWeightSingle
virtual void SetRenderParam(RenderParam p)
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
virtual SubPassData GetSubPassData()
List< int > c_corruptionHistory
override string ToString()
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
virtual Sprite GetSprite(int dir=0)
Window.SaveData GetWindowSaveData()
void ModCurrency(int a, string id="money")
static string ApplyTone(Chara c, ref string text, string _tones, int gender, bool stripPun=false)
bool ShouldTrySetDirtyInventory()
virtual void ApplyEditorTags(EditorTag tag)
virtual bool IsAliveInCurrentZone
Thing MakeMilk(bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
virtual int SecondaryCompare(UIList.SortMode m, Card c)
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
void RemoveThing(Thing thing)
Card MakeFoodFrom(string _id)
SocketData GetRuneEnc(int idEle)
void PlaySoundDead(bool spatial=true)
bool TryPay(int a, string id="money")
void ModCharge(int a, bool destroy=false)
bool HasGlobalElement(int ele)
bool HasEditorTag(EditorTag tag)
Card ChangeMaterial(string idNew, bool ignoreFixedMaterial=false)
bool HasCraftBonusTrait()
virtual void Rotate(bool reverse=false)
Card SetHidden(bool hide=true)
void SetFreePos(Point point)
int GetDaysTogetherBonus()
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
TraitShackle GetRestrainer()
virtual void WriteNote(UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
bool CanReserve(AIAct act)
virtual void OnSerializing()
Window.SaveData c_windowSaveData
BlessedState blessedState
void PlaySoundDrop(bool spatial=true)
ref Color GetRandomColor()
bool TryStackTo(Thing to)
virtual bool IsPCFactionMinion
void ApplyBacker(int bid)
void TryUnrestrain(bool force=false, Chara c=null)
RescueState c_rescueState
void SetImage(Image image, int dir, int idSkin=0)
virtual CardRow sourceCard
void ModExp(string alias, int a)
List< Element > ListCraftBonusTraits()
int ChildrenAndSelfWeight
int GetTotalQuality(bool applyBonus=true)
Thing Add(string id, int num=1, int lv=1)
void PlayAnime(AnimeID id, bool force=false)
SourceCategory.Row category
void SetDeconstruct(bool deconstruct)
virtual void SetSortVal(UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
virtual MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
void ModNum(int a, bool notify=true)
void Kick(Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
virtual void ChangeRarity(Rarity q)
SourceCategory.Row _category
SocketData AddRune(int idEle, int v, bool free)
void SayRaw(string text, string ref1=null, string ref2=null)
virtual int GetArmorSkill()
int GetValue(PriceType priceType=PriceType.Default, bool sell=false)
void PlayEffect(int ele, bool useRenderPos=true, float range=0f)
void AddExp(int a, bool applyMod=true)
void SpawnLoot(Card origin)
bool HasElement(int ele, bool includeNagative=false)
string GetFoodName(string s)
VisitorState visitorState
void TalkRaw(string text, string ref1=null, string ref2=null, bool forceSync=false)
Card ChangeMaterial(SourceMaterial.Row row, bool ignoreFixedMaterial=false)
void ForeachFOV(Func< Point, bool > func)
void Create(string _id, int _idMat=-1, int genLv=-1)
int ResistLvFrom(int ele)
void Say(string lang, string ref1=null, string ref2=null)
string ApplyTone(string text, bool stripPun=false)
Card MakeFoodFrom(Card c)
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
void MoveThingToBottom(Thing t)
void MoveThingToTop(Thing t)
void AddBodyPart(int ele, Thing thing=null)
void Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
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)