2using System.Collections.Generic;
4using System.Runtime.Serialization;
31 [JsonProperty(PropertyName =
"A")]
32 public int[]
_ints =
new int[30];
34 [JsonProperty(PropertyName =
"B")]
35 public string id =
"";
37 [JsonProperty(PropertyName =
"C")]
40 [JsonProperty(PropertyName =
"D")]
43 [JsonProperty(PropertyName =
"E")]
46 [JsonProperty(PropertyName =
"SC")]
257 return 0.001f * (float)
_ints[15];
261 _ints[15] = (int)(value * 1000f);
269 return 0.001f * (float)
_ints[16];
273 _ints[16] = (int)(value * 1000f);
285 _ints[17] = (int)value;
297 _ints[18] = (int)value;
321 _ints[19] = (int)value * 100;
1019 SetInt(103, value ? 1 : 0);
1031 SetInt(109, value ? 1 : 0);
1043 SetInt(63, value ? 1 : 0);
1055 SetInt(64, value ? 1 : 0);
1067 SetInt(120, value ? 1 : 0);
1079 SetInt(121, value ? 1 : 0);
1091 SetInt(122, value ? 1 : 0);
1776 return GetObj<UniqueData>(6);
1788 return GetObj<Thing>(9);
1800 return GetObj<List<SocketData>>(17);
1812 return GetObj<Thing>(10);
1836 return GetObj<CharaUpgrade>(11);
1848 return GetObj<CharaGenes>(15);
1860 return GetObj<List<int>>(16);
1884 return GetObj<DNA>(14);
1896 return GetObj<CharaList>(13);
1908 return GetObj<MixedFoodData>(18);
1920 return GetObj<byte[]>(4);
2019 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2107 if (
Tiles.Length == 1)
2109 return dir % 2 == 1;
2171 return id ==
"grass";
2303 if (
Tiles.Length < 3)
2377 return bio.gender == 2;
2529 if (
card.isSale || !
card.trait.CanUseContent)
2534 if (windowSaveData !=
null)
2546 EClass.player.wasDirtyWeight =
true;
2564 public int Evalue(
int ele,
bool ignoreGlobalElement)
2590 return c_editorTags?.Contains(tag.ToString()) ??
false;
2623 int num2 =
item.Value;
2683 for (
int i = 0; i <
sockets.Count; i++)
2701 thing.parent =
this;
2731 CardBlueprint.current =
null;
2782 if (
id ==
"microchip")
2863 EClass._zone.Boss =
Chara;
2905 int num = elementContainer.Value(value.
id);
2957 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2961 return num * (100 +
Evalue(1237) * 30) / 100;
2992 Say(
"dingExp",
this);
3005 int num = Mathf.Min(1 +
LV / 5, 20);
3006 for (
int i = 0; i < num; i++)
3008 if (
Evalue(1644) < i + 1)
3048 if (rootCard !=
null && rootCard.
IsPC)
3103 Debug.LogWarning(
"already child:" + t);
3108 Debug.Log(
"already in the list" + t);
3123 t.ignoreAutoPick =
false;
3167 if (rootCard !=
null && rootCard.
IsPC)
3176 t.isNPCProperty =
false;
3190 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3193 void TryAdd(
Thing a)
3195 if (!ings.Contains(a.
id))
3213 List<Chara> list =
new List<Chara>();
3229 if (
item.IsPCFactionOrMinion)
3232 if (list2.Count != 0)
3234 foreach (
Thing item2
in list2)
3244 foreach (
Chara item3
in list)
3251 if (list3.Count == 0)
3255 foreach (
Thing item4
in list3)
3257 Msg.
Say(
"destroyed_inv_", item4, item3);
3269 List<Chara> list =
new List<Chara>();
3283 if (
item.IsPCFactionOrMinion)
3297 for (
int num =
things.Count - 1; num >= 0; num--)
3308 rootCard.Chara.held =
null;
3314 instance.selectedButton.card =
null;
3317 ActionMode.AdvOrRegion.updatePlans =
true;
3334 if (thing.
invY == 1)
3336 WidgetCurrentTool.dirty =
true;
3340 if (thing.
props !=
null)
3348 WidgetHotbar.dirtyCurrentItem =
true;
3349 thing.parent =
null;
3354 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3361 thing.parent =
null;
3370 return EClass.ui.layers.Count > 0;
3392 to.c_isImportant =
true;
3417 return card.GetRootCard();
3444 thing.encLV =
encLV;
3445 thing.decay =
decay;
3448 foreach (KeyValuePair<int, int>
item in mapInt)
3452 foreach (KeyValuePair<int, string> item2
in mapStr)
3454 thing.
mapStr[item2.Key] = item2.Value;
3460 thing.sockets = IO.DeepCopy(
sockets);
3476 ModNum(-a, notify:
false);
3488 return this as
Thing;
3491 return this as
Thing;
3497 return this as
Thing;
3500 public void ModNum(
int a,
bool notify =
true)
3539 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3545 for (
int i = 0; i <
sockets.Count; i++)
3563 for (
int i = 0; i <
sockets.Count; i++)
3569 int ele = num / 1000;
3570 int num2 = num % 1000;
3665 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3671 string encSlot = source.
encSlot;
3672 if (encSlot ==
null || encSlot.Length != 0)
3685 string[] array = source.
encSlot.Split(
',');
3686 foreach (
string key
in array)
3734 if (this.placeState == newState)
3740 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3752 float num2 = (
fy = 0f);
3763 this.placeState = newState;
3771 this.placeState = newState;
3826 num = num * (100 +
Quality) / 100;
3863 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3910 public bool TryPay(
int a,
string id =
"money")
3917 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3921 if (
IsPC && !(
id ==
"ration"))
3941 Say(
"spellbookCrumble",
this);
3950 if (
id ==
"influence")
3962 if (
id ==
"influence")
3993 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
3995 if (num > 100000000)
4027 int num =
PV + orCreateElement.Value +
DEX / 10;
4034 num2 = num3 / 10 + 1;
4035 sides = num3 / num2 + 1;
4037 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
4039 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
4040 dmg -= num4 * mod / 100;
4050 DamageHP(dmg, 0, 0, attackSource, origin);
4059 bool flag = originalTarget !=
null;
4060 Action onEvade =
null;
4069 Say(
"wall_bond", chara3,
this);
4078 if ((uint)(attackSource2 - 3) > 2u && (uint)(attackSource2 - 13) > 4u)
4084 int num = chara4.
Evalue(1241);
4085 int num2 = chara4.
Evalue(438);
4088 Say((num2 == 0) ?
"wall_flesh" :
"wall_knightly", chara4,
this);
4097 if (origin !=
null && origin.HasElement(1208))
4099 switch (attackSource)
4102 dmg = dmg * 130 / 100;
4103 eleP = eleP * 150 / 100;
4106 dmg = dmg * 120 / 100;
4107 eleP = eleP * 150 / 100;
4112 if (ele == 0 || ele == 926)
4117 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
4123 if (attackSource !=
AttackSource.Condition && showEffect)
4133 int num3 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4137 if (origin.HasElement(1247))
4142 if (attackSource ==
AttackSource.MagicArrow && origin !=
null && origin.HasElement(1244))
4146 if (attackSource ==
AttackSource.MagicHand && origin !=
null && origin.HasElement(1246))
4151 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4152 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4159 if (chara2 !=
null && chara2.
isWet)
4168 if (chara !=
null && chara.
isWet)
4170 dmg = dmg * 150 / 100;
4176 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4184 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4186 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4195 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num4 - 50))) / 100;
4200 dmg = dmg * 100 / (100 +
Evalue(435) * 2);
4202 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4209 dmg = dmg * 90 / 100;
4213 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4217 dmg = dmg * 90 / 100;
4236 dmg = dmg * 100 / Mathf.Min(100 + num5 * 5, 120);
4240 dmg = dmg * Mathf.Min(100 + num6 * 5, 120) / 100;
4245 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4247 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4249 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4257 int num7 =
MaxHP / 10;
4258 long num8 = dmg - num7;
4259 num8 = num8 * 100 / (200 +
Evalue(68) * 10);
4275 float num9 = Mathf.Clamp(dmg * 6 /
MaxHP, 0f, 4f) + (float)((dmg > 0) ? 1 : 0);
4286 if (hp < 0 && Chara.mana.value >= 0)
4302 Chara.mana.value -= (int)dmg;
4319 float ratio = (float)dmg / (
float)
MaxHP;
4330 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4332 aI_PracticeDummy.hit++;
4333 aI_PracticeDummy.totalDamage += dmg;
4376 if (origin !=
null && origin !=
this &&
Evalue(436) > 0 && !HasCondition<ConFractured>())
4385 hp = Mathf.Min(half * (
int)Mathf.Sqrt(
Evalue(436) * 2) / 100,
MaxHP / 3);
4406 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4408 EClass.player.invlunerable =
true;
4447 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4454 text =
"dead_" + e.
source.alias;
4458 text =
"dead_attack";
4466 text =
"kill_" + e.source.alias;
4470 text =
"kill_attack";
4472 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4480 Say(
"reboot",
this);
4487 if (HasCondition<ConRebirth>())
4489 Say(
"rebirth",
this);
4501 Msg.alwaysVisible =
true;
4502 Msg.
Say(
"layhand", chara5,
this);
4503 Msg.
Say(
"pray_heal",
this);
4513 if (zoneInstanceBout !=
null)
4545 Die(e, origin, attackSource, originalTarget);
4551 string text2 =
new int[18]
4553 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4554 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4555 }.RandomItem().ToString();
4558 text2 =
"casino_coin";
4562 text2 =
"scratchcard";
4590 if (origin !=
null && origin.isChara)
4612 if (origin.GetInt(106) == 0)
4614 origin.Chara.TalkTopic(
"kill");
4619 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4621 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num9 + (
IsPC ?
"pc" :
""), origin,
this);
4625 int num13 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4626 if (num9 >= (
float)num13)
4630 Say(
"dmg_" + e.source.alias,
this);
4634 Say(
"dmg" + num9,
this);
4649 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4653 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4657 int num14 = origin.Dist(
this);
4661 if (
id ==
"hedgehog_ether")
4665 Say(
"reflect_thorne",
this, origin);
4666 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4671 Say(
"reflect_acid",
this, origin);
4672 origin.DamageHP((
int)Mathf.Clamp(dmg / 10, 1f,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4684 int a2 = (int)(100 * (dmg * 100 /
MaxHP) / 100) + 1;
4695 int num15 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4705 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4711 Condition.ignoreEffect =
true;
4713 Condition.ignoreEffect =
false;
4717 float num16 = (float)
hp / (
float)
MaxHP;
4724 PlaySound(
"heartbeat", 1f - num16 * 2f);
4757 EClass.player.forceTalk =
true;
4759 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4770 void EvadeDeath(Action action)
4775 Chara.mana.value = 0;
4789 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4791 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4792 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4795 int num17 =
EClass.
rnd(3 + (
int)Mathf.Clamp(dmg / 100, 0f, valueOrDefault / 10));
4796 origin.Chara.stamina.Mod(num17);
4802 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4804 int num18 =
EClass.
rndHalf(2 + (
int)Mathf.Clamp(dmg / 10, 0f, origin.Chara.GetPietyValue() + 10));
4805 origin.Chara.mana.Mod(num18);
4811 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4813 int num19 =
EClass.
rnd(2 + (
int)Mathf.Clamp(dmg / 10, 0f, valueOrDefault2 + 10));
4814 origin.Chara.mana.Mod(num19);
4831 bool hostile =
false;
4835 if (Chance(30 + eleP / 5, 100))
4837 MarkHostile().AddCondition<
ConBurning>(eleP);
4843 if (Chance(30 + eleP / 10, 100))
4848 else if (Chance(50 + eleP / 10, 100))
4854 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4860 if (Chance(30 + eleP / 5, 100))
4862 MarkHostile().AddCondition<
ConPoison>(eleP);
4866 if (Chance(30 + eleP / 5, 100))
4873 if (Chance(30 + eleP / 5, 100))
4882 if (Chance(30 + eleP / 5, 100))
4887 else if (Chance(30 + eleP / 5, 100))
4893 if (Chance(50 + eleP / 10, 100))
4901 if (Chance(30 + eleP / 5, 100))
4920 if (Chance(5 + eleP / 25, 40))
4924 if (Chance(5 + eleP / 25, 40))
4928 if (Chance(5 + eleP / 25, 40))
4932 if (Chance(5 + eleP / 25, 40))
4934 MarkHostile().AddCondition<
ConPoison>(eleP / 2);
4936 if (Chance(5 + eleP / 25, 40))
4940 if (Chance(5 + eleP / 25, 40))
4944 if (Chance(30 + eleP / 10, 100))
4950 if (Chance(50 + eleP / 10, 100))
4952 MarkHostile().AddCondition<
ConBleed>(eleP);
4956 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4969 if (checkHostileAct && hostile && origin !=
null && origin.
isChara)
4973 static bool Chance(
int a,
int max)
4975 return Mathf.Min(a, max) >
EClass.
rnd(100);
4986 Card rootCard = GetRootCard();
4988 if (_pos !=
null && !_pos.
IsValid)
4999 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
5000 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
5002 text += e.source.alias;
5006 Msg.
Say(text,
this, rootCard);
5011 Msg.
Say(
"destroyed",
this);
5016 things.ForeachReverse(delegate(
Thing t)
5025 if (e !=
null && _pos !=
null && e.id == 21)
5031 Explode(pos, origin);
5039 origin = origin?.Chara,
5041 aliasEle =
"eleImpact"
5047 PlaySound(
material.GetSoundDead(sourceCard));
5055 Debug.Log(Name +
" is already destroyed.");
5066 Chara.isDead =
true;
5084 for (
int num = things.Count - 1; num >= 0; num--)
5086 things[num].Destroy();
5093 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
5099 List<Card> list =
new List<Card>();
5100 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
5103 if (this.rarity >=
Rarity.Legendary)
5136 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
5148 if (
id ==
"littleOne" && IsPCFactionOrMinion)
5152 if (flag2 && !isUserZone)
5155 bool num2 = text ==
"_meat";
5167 text =
"meat_marble";
5170 if (thing3.
source._origin ==
"meat")
5184 if (!IsPCFaction && !isUserZone)
5186 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
5188 string[] array = item2.
Split(
'/');
5189 int num4 = array[1].ToInt();
5238 if (!isBackerContent && !flag)
5274 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5284 if (text2 ==
"big_daddy" || text2 ==
"santa")
5292 List<Thing> list2 =
new List<Thing>();
5293 foreach (
Thing thing4
in things)
5319 if (num5 > 0 && list2.Count > 0)
5322 for (
int j = 0; j < list2.Count && j < num5; j++)
5328 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5331 foreach (
Card item3
in list)
5340 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5345 for (
int k = 0; k < num5; k++)
5368 foreach (
Thing thing5
in things)
5370 if (thing5.
GetInt(116) != 0)
5375 Point nearestPoint = GetRootCard().pos;
5380 foreach (
Card item4
in list)
5386 item4.isHidden =
false;
5443 case "egg_fertilized":
5448 string text =
"c_wilds";
5449 if (
id ==
"_meat" ||
id ==
"meat_marble")
5457 for (
int i = 0; i < 20; i++)
5460 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5470 if (crafter !=
null && crafter.id ==
"big_sister")
5472 cardRow = crafter.source;
5477 if (c_idRefCard.IsEmpty())
5479 MakeRefFrom(cardRow.
model);
5484 MakeFoodFrom(cardRow.
model);
5486 return this as
Thing;
5492 return this as
Thing;
5509 int num = race.
food[0].ToInt();
5510 bool flag =
id ==
"meat_marble";
5512 bool flag2 = category.
IsChildOf(
"meat");
5524 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5527 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5529 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5533 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5551 foreach (
Element value
in c.elements.dict.Values)
5553 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5558 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5559 foreach (KeyValuePair<int, int>
item in race.elementMap)
5563 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5566 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5567 for (
int i = 0; i < num2 && i < list.Count; i++)
5569 Tuple<int, int> tuple = list[i];
5570 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5572 if (c.Chara.IsUndead)
5576 isWeightChanged =
true;
5577 c_weight = race.height * 4 + 100;
5578 c_idMainElement = c.c_idMainElement;
5580 int num3 = c.LV - c.sourceCard.LV;
5586 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5590 if (flag2 && c.IsPCFaction && c.IsUnique)
5605 if (IsIgnoreName(
card))
5609 if (IsIgnoreName(card2))
5613 if (
card ==
null && card2 !=
null)
5620 MakeRefFrom(
card, card2);
5621 if (
card.c_idRefCard !=
null)
5623 c_idRefCard =
card.c_idRefCard;
5624 c_altName = TryGetFoodName(
card);
5629 c_altName2 = TryGetFoodName(card2);
5632 static bool IsIgnoreName(
Card c)
5662 if (!row.aka.IsEmpty())
5664 if (row.name ==
"*r" && row.aka ==
"*r")
5666 return "corpseGeneral".lang();
5668 if (row.name ==
"*r")
5670 return row.GetText(
"aka");
5673 return row.GetName();
5678 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5694 c_idRefCard = c1.
id;
5698 c_idRefCard2 = c2.id;
5699 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5701 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5715 thing.c_idMainElement = c_idMainElement;
5724 return GiveBirth(thing, effect);
5742 int num2 = LV - sourceCard.
LV;
5747 if (num2 >= 10 && !HasElement(1290))
5755 return GiveBirth(thing, effect);
5761 EClass.player.forceTalk =
true;
5762 card.Talk(
"giveBirth");
5766 card.pos.PlayEffect(
"revive");
5767 card.pos.PlaySound(
"egg");
5824 SayNothingHappans();
5827 PlayEffect(
"teleport");
5830 Say(
"antiTeleport",
this);
5831 PlaySound(
"gravity");
5836 PlaySound(
"teleport");
5837 Say(
"teleported",
this);
5846 if (chara.
enemy ==
this)
5857 EClass.player.haltMove =
true;
5859 PlayEffect(
"teleport", useRenderPos:
false);
5866 PlayEffect(
"ripple");
5867 PlaySound(
"Footstep/water");
5883 return elements.
Value(ele) >= req;
5898 if (HasElement(764))
5902 if (HasElement(759))
5906 if (HasElement(703))
5910 if (HasElement(758))
5914 if (HasElement(704))
5932 for (
int i = 0; i < a; i++)
5943 shared.color = 11010048f;
5944 shared.liquidLv = 0;
5946 SetRenderParam(shared);
5966 isDyed = mat !=
null;
5967 c_dyeMat = mat?.id ?? 0;
5979 else if (isElemental)
6015 int num = EClass.game.seed + refVal;
6016 num +=
id[0] % 10000;
6019 num +=
id[1] % 1000;
6022 num +=
id[2] % 1000;
6025 num +=
id[3] % 1000;
6028 num +=
id[4] % 1000;
6037 return ref _randColor;
6054 public void SetImage(Image image,
int dir,
int idSkin = 0)
6056 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
6066 Sprite sprite = GetSprite();
6067 if (!c_idSpriteReplacer.IsEmpty())
6070 if (spriteReplacer !=
null)
6074 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0, renderData, spriteReplacer.
data.
pref ?? Pref);
6078 sourceRenderCard.
SetImage(image, sprite, colorInt, setNativeSize:
true, 0, 0,
this);
6081 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
6083 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
6087 renderer.
ShowEmo(_emo, duration);
6095 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6100 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
6105 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
6110 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
6113 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
6115 Card rootCard = GetRootCard();
6122 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
6147 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
6153 Card rootCard = GetRootCard();
6157 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
6165 Card rootCard = GetRootCard();
6188 public virtual void Rotate(
bool reverse =
false)
6191 if (sourceCard.
tiles.Length > 4)
6193 num = sourceCard.
tiles.Length;
6251 fx = fx - vector.x + thingPosition.x;
6252 fy = fy - vector.y + thingPosition.y;
6256 float num2 = (fy = 0f);
6280 renderParam.x = v.x;
6281 renderParam.y = v.y;
6282 renderParam.z = v.z;
6284 v.x = renderParam.
x;
6285 v.y = renderParam.
y;
6286 v.z = renderParam.
z;
6300 v.z += thingPosition.z;
6307 if (useCurrentPosition)
6322 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6333 EClass.player.lightRadius = 1;
6341 return GetLightRadius() > 0;
6349 return 0.01f * LightData.color.a * 256f * 1.12f;
6351 if (IsPCFaction && !IsPC)
6417 num2 = traitLightSource.LightRadius;
6422 if (lightRadius > 0)
6424 if (lightRadius > num2)
6444 int radius = GetLightRadius();
6449 float power = GetLightPower();
6476 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6487 int num = (trait.UseLightColor ? c_lightColor : 0);
6490 fov.r = (byte)(num / 1024);
6491 fov.g = (byte)(num % 1024 / 32);
6492 fov.b = (byte)(num % 32);
6533 if (fov !=
null && fov.
lastPoints.Count != 0)
6552 things.ForeachReverse(delegate(
Thing t)
6556 if (sourceCard.
_origin ==
"dish")
6564 else if (!isChara && trait.
Decay != 0)
6566 Decay(trait.
Decay * hour);
6584 int num2 = MaxDecay / 4 * 3;
6589 num =
card.trait.DecaySpeedChild;
6591 num = num * trait.DecaySpeed / 100;
6592 int num3 = Evalue(405);
6595 num = num * (100 - num3 * 2) / 100;
6607 if (decay + a > MaxDecay)
6609 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6618 card.AddCard(thing);
6619 if (!IsParentLocked())
6621 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6630 else if (GetRootCard() ==
EClass.
pc)
6632 if (!IsParentLocked())
6644 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6646 if (!IsParentLocked())
6653 bool IsParentLocked()
6655 if (parent is
Thing)
6657 return (parent as
Thing).c_lockLv > 0;
6665 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6668 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6672 EClass.player.forceTalk =
false;
6676 EClass.player.forceTalk =
false;
6677 if (!isSynced && !forceSync)
6682 GameLang.refDrama1 = ref1;
6683 GameLang.refDrama2 = ref2;
6684 string text = GetTalkText(idTopic, stripPun:
true);
6685 if (HasElement(1232) && idTopic !=
"baby")
6692 if (!(text2 ==
"adv_gaki"))
6694 if (text2 ==
"corgon")
6704 TalkRaw(text, ref1, ref2, forceSync);
6707 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6709 if ((!isSynced && !forceSync) || text.IsEmpty())
6716 text = text.Replace(
"#1", ref1);
6720 text = text.Replace(
"#2", ref2);
6722 HostRenderer.Say(ApplyNewLine(text));
6723 bool flag = text.StartsWith(
"*");
6727 text = text.Bracket();
6729 Msg.
Say(text.Replace(
"&",
""));
6734 if (text.Contains(
"&"))
6736 string text2 =
"_comma".lang();
6737 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6738 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6739 text = text.Replace(
"&", Environment.NewLine ??
"");
6744 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6746 if (isSynced && !text.IsEmpty())
6750 text = text.Replace(
"#1", ref1);
6754 text = text.Replace(
"#2", ref2);
6756 HostRenderer.Say(text);
6762 Say(
"nothingHappens");
6765 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6774 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6783 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6792 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6796 if (!text.IsEmpty())
6798 text = text.Split(
'|').RandomItem();
6799 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6801 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6803 text =
"(" + text +
")";
6805 text = text.Replace(
"。)",
")");
6808 return ApplyTone(text, stripPun);
6814 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6817 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6823 string[] array = _tones.IsEmpty(
"").Split(
'|');
6824 string key = array[0];
6829 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6833 if (array[0].IsEmpty())
6842 if (array.Length >= 2)
6844 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6846 if (array.Length >= 3)
6848 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6851 text2 = stringBuilder.ToString();
6855 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6866 return text2.StripLastPun();
6881 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6882 if (list.Count != 0)
6884 int mtp = EClass.core.config.test.extraToneMTP
switch
6897 string text = list.RandomItem()[
"id"];
6898 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6905 return ListCraftBonusTraits().Count > 0;
6910 List<Element> list =
new List<Element>();
6911 string[] tag = sourceCard.
tag;
6912 for (
int i = 0; i < tag.Length; i++)
6914 string[] array = tag[i].Split(
'/');
6915 if (!(array[0] !=
"craft_bonus"))
6931 if (dest.
stack !=
null)
6935 Say(
"stack_thing", t, dest.
stack);
6943 ChangeRarity(
Rarity.Normal);
6949 c_idBacker = row.
id;
6955 chara.hostility = hostility2;
6961 Chara.idFaith = row.
deity.ToLowerInvariant();
6966 if (
id ==
"putty_snow")
6979 if (c_idBacker == 164)
6992 c_textureData = GetPaintData();
7002 Sprite sprite = GetSprite();
7003 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
7004 int num = sprite.texture.width * 2;
7005 int num2 = sprite.texture.height * 2;
7006 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
7007 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
7008 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
7009 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
7010 texture2D2.SetPixels(pixels);
7012 byte[] result = texture2D2.EncodeToJPG();
7013 UnityEngine.Object.Destroy(texture2D);
7014 UnityEngine.Object.Destroy(texture2D2);
7020 if ((
bool)_paintSprite)
7022 UnityEngine.Object.Destroy(_paintSprite.texture);
7023 UnityEngine.Object.Destroy(_paintSprite);
7024 _paintSprite =
null;
7032 byte[] data = c_textureData;
7033 Texture2D texture2D =
new Texture2D(1, 1);
7034 texture2D.LoadImage(data);
7035 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
7039 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
7042 return _paintSprite;
7047 if (!(GetRestrainer() ==
null || force))
7051 isRestrained =
false;
7052 Say(
"unrestrained",
this);
7063 if (c_rescueState ==
RescueState.WaitingForRescue)
7077 c.DoHostileAction(
item, immediate:
true);
7104 result = row.value * mat.value / 100;
7141 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
7142 if (
id ==
"plat" && !sell)
7153 num2 += (float)c_priceCopy * 0.2f;
7154 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
7158 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
7160 if (IsFood && !
material.tag.Contains(
"food"))
7165 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
7183 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
7185 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
7187 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
7188 if (IsEquipmentOrRanged)
7193 num4 += value.
source.value;
7195 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
7196 if (rarity >=
Rarity.Legendary)
7198 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
7206 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
7208 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)))));
7212 num2 *= (float)(tier + 1);
7219 if (priceType ==
PriceType.CopyShop && sell)
7225 if (
id ==
"littleball")
7232 if (
id ==
"crimale2")
7240 case "ticket_fortune":
7259 case "hammer_strip":
7268 if (!(text ==
"lucky_coin"))
7270 if (!(text ==
"book_skill"))
7291 case "diary_sister":
7295 case "diary_catsister":
7297 case "container_magic":
7299 case "wrench_tent_elec":
7301 case "wrench_tent_soil":
7303 case "wrench_tent_seabed":
7307 case "wrench_storage":
7309 case "wrench_fridge":
7311 case "wrench_extend_v":
7313 case "wrench_extend_h":
7319 case "scroll_random":
7333 if (!sell &&
id ==
"casino_coin")
7337 int value = GetValue(priceType, sell);
7347 Trait trait = this.trait;
7352 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7357 p *= 1f + 0.5f * (float)c_containerSize;
7360 if (c_priceFix != 0)
7362 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7372 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7383 if (!sell && category.
id ==
"spellbook")
7387 bool flag = priceType ==
PriceType.CopyShop;
7388 int num = ((!flag) ? 1 : 5);
7389 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7390 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7391 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7396 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7398 p *= 0.20000000298023224;
7401 p *= 0.20000000298023224;
7404 p *= 0.20000000298023224;
7408 p *= 0.20000000298023224;
7414 if ((uint)(priceType - 1) <= 1u)
7426 if (
id ==
"rod_wish")
7428 p *= (sell ? 0.01f : 50f);
7443 p *= 0.20000000298023224;
7447 p *= 0.10000000149011612;
7450 p *= 0.0020000000949949026;
7453 p *= 0.00019999999494757503;
7456 p *= 0.004999999888241291;
7467 p *= (flag ? 1.25f : 0.3f);
7471 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7475 p *= (flag ? 0.9f : 0.5f);
7487 p *= 1f + 0.2f * (float)c.Evalue(1406);
7500 p *= 1.100000023841858;
7534 else if (category.
IsChildOf(
"furniture"))
7554 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7561 p = ((!sell) ? 1 : 0);
7569 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7571 else if (p > 10000.0)
7573 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7575 else if (p > 1000.0)
7577 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7581 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7585 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7593 if (p > (
double)(sell ? 500000000 : 1000000000))
7606 return Name + GetExtraName();
7623 ForeachPoint(delegate(
Point p,
bool main)
7625 int num2 = DistMulti(p, c);
7633 return DistMulti(pos, c);
7665 isCensored = enable;
7675 if (isDeconstructing != deconstruct)
7685 isDeconstructing = deconstruct;
7699 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7702 sortVal = -GetPrice(
currency) * 1000;
7705 sortVal = -Num * 1000;
7708 sortVal = category.sortVal * 1000;
7711 sortVal = -ChildrenAndSelfWeight * 1000;
7714 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7717 sortVal = -GetPrice(
currency) * 1000;
7720 sortVal = sourceCard._index * 1000;
7730 num =
id.CompareTo(c.
id);
7750 num = encLV - c.
encLV;
7769 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7787 action(pos, arg2:
true);
7801 SE.Play(
"pop_paper");
7826 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7839 if (!HaveFur() || c_fur < 0)
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
virtual bool CancelWhenDamaged
static void LoveMiracle(Chara tc, Chara c, int power, EffectId idEffect=EffectId.Love, BlessedState? state=null)
static void TryDelay(Action a)
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
void Add(Act a, string s="")
virtual bool IsRoofEditMode(Card c=null)
virtual void OnInstallCard(Card t)
virtual void OnUninstallCard(Card t)
static void ProcShieldEncs(Chara CC, Card TC, int mtpChance=100)
static void GakiConvert(ref string text, string idLang="zako")
Dictionary< int, int > mapInt
void SetStr(int id, string value=null)
void SetObj(int id, object o)
string GetStr(int id, string defaultStr=null)
int GetInt(int id, int? defaultInt=null)
void SetInt(int id, int value=0)
Dictionary< int, string > mapStr
void Mod(int a, bool force=false)
SourceElement.Row sourceElement
void WaitForEndOfFrame(Action action)
List< Action > actionsNextFrame
virtual void RefreshPosition()
virtual ConditionType Type
static int GetColorInt(ref Color matColor, int p)
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
Vector3 GetThingPosition(Card tg, Point p)
void SetPortrait(Chara c)
virtual void RefreshSprite()
static void SetRarity(Rarity q=Rarity.Normal)
static CardBlueprint current
static void Set(CardBlueprint _bp=null)
static CardBlueprint _Default
GlobalCharaList globalCharas
void ShowEmo(Emo emo, float duration=0f)
void PlayAnime(AnimeID id, bool force)
override void Draw(RenderParam p)
virtual void SetOwner(Card c)
virtual void SetFirst(bool first, Vector3 pos)
void SetCensored(bool enable)
int CountRune(bool countFree=true)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
virtual string AliasMaterialOnCreate
virtual string GetName(NameStyle style, int num=-1)
virtual MoveResult _Move(Point p, MoveType type=MoveType.Walk)
virtual string GetHoverText()
void Teleport(Point point, bool silent=false, bool force=false)
virtual string GetExtraName()
ContainerUpgrade c_containerUpgrade
void PurgeDuplicateArtifact(Thing af)
void RemoveEditorTag(EditorTag tag)
void ApplySocket(int id, int lv, Card mod=null)
SocketData AddRune(Card rune)
bool CanAddRune(TraitMod mod)
void Say(string lang, Card c1, Card c2, string ref1=null, string ref2=null)
virtual void ApplyMaterialElements(bool remove)
virtual void OnSimulateHour(VirtualDate date)
int EvalueMax(int ele, int min=0)
void MakeFigureFrom(string id)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
void SetCensored(bool enable)
ElementContainerCard elements
void _OnDeserialized(StreamingContext context)
bool IsRestrainedResident
SourceBacker.Row sourceBacker
bool TryReserve(AIAct act)
Hostility c_originalHostility
bool IsExcludeFromCraft(Recipe.Ingredient ing)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
bool HasElement(int ele, int req=1)
void AddBlood(int a=1, int id=-1)
void SetRandomLightColors()
CardRenderer HostRenderer
void OnChildNumChange(Card c)
int Evalue(int ele, bool ignoreGlobalElement)
bool IsStackable(Thing tg)
bool HasElement(string id, int req=1)
void Explode(Point p, Card origin)
SourceMaterial.Row DyeMat
SourceMaterial.Row material
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Card MakeRefFrom(string id)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
void DamageHP(long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
static int GetTilePrice(TileRow row, SourceMaterial.Row mat)
virtual CardRenderer _CreateRenderer()
Thing AddThing(string id, int lv=-1)
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
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
Thing GiveBirth(Thing t, bool effect)
virtual Sprite GetImageSprite()
void MakeRefFrom(Card c1, Card c2=null)
virtual void ApplyMaterial(bool remove=false)
void ApplyElementEffect(Element e, int eleP, Card origin, bool checkHostileAct=false)
void ChangeAltitude(int a)
List< SocketData > socketList
void PlayAnime(AnimeID id, Point dest, bool force=false)
virtual void SetBlessedState(BlessedState s)
RenderParam GetRenderParam()
bool HasTalk(string idTopic)
string GetTalkText(string idTopic, bool stripPun=false, bool useDefault=true)
void DecayNatural(int hour=1)
bool IsInMutterDistance(int d=10)
virtual void OnCreate(int genLv)
virtual void LookAt(Card c)
void RenderMarker(Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
virtual long ApplyProtection(long dmg, int mod=100)
void MakeFoodRef(Card c1, Card c2=null)
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)
void ModNum(int a, bool notify=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 SpawnLoot(Card origin)
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 Unequip(Thing thing, bool refresh=true)
AttackStyle GetAttackStyle()
Thing GetEquippedThing(int elementId)
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 TryUpgrade(bool msg=true)
FactionMemberType memberType
Card DropHeld(Point dropPos=null)
void AddCooldown(int idEle, int turns=0)
Thing MakeGene(DNA.Type? type=null)
void ModCorruption(int a)
Chara SetEnemy(Chara c=null)
void DoHostileAction(Card _tg, bool immediate=false)
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
void TrySetEnemy(Chara c)
bool HasCooldown(int idEle)
bool DroppedCard(string id)
CodexCreature GetOrCreate(string id)
void MarkCardDrop(string id)
UD_String_LightData lightColors
UD_String_MatData matColors
virtual void 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 ColorProfile Colors
static int curve(int a, int start, int step, int rate=75)
static SourceManager sources
static float rndf(float a)
static FactionBranch Branch
static BaseGameScreen screen
static int rndHalf(int a)
static SoundManager Sound
static GameSetting setting
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
static Effect Get(Effect original)
Effect SetParticleColor(Color c)
void SetOwner(Card c, bool applyFeat)
void ModExp(int ele, float a, bool chain=false)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
void SetTo(int id, int v)
Element SetBase(string alias, int v, int potential=0)
Element GetOrCreateElement(Element ele)
Element GetElement(string alias)
static int GetResistDamage(int dmg, int v, int power=0)
static int GetResistLv(int v)
static Element Create(int id, int v=0)
static int[] List_MainAttributesMajor
Dictionary< string, Dictionary< string, string > > all
List< Dictionary< string, string > > list
virtual void Initialize()
HomeResourceManager resources
List< FactionBranch > GetChildren()
void AddContribution(int a)
Dictionary< int, byte > lastPoints
void Perform(int _x, int _z, int _range, float power=1f)
static string ConvertDrama(string text, Chara c=null)
bool enableDamageReduction
bool disableUsermapBenefit
UD_String_ElementRef elements
HashSet< Texture2D > loadedTextures
ReligionManager religions
bool CanGiveContribution(Chara c)
int BuySpellbookPrice(int a)
int SellStolenPrice(int a)
static GuildFighter Fighter
static bool Has(string id)
static LangSetting setting
static NaturalStringComparer comparer
static string[] GetList(string id)
LayerChara SetChara(Chara c)
static LayerDrama Instance
static void SetDirty(Thing t)
static List< LayerInventory > listInv
static SourceMaterial.Row GetRandomMaterial(int lv, string group=null, bool tryLevelMatTier=false)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
static TalkDataList listTalk
static ToneDataList tones
Chara FindChara(string id)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void MoveCard(Point p, Card t)
void OnSetBlockOrDoor(int x, int z)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void Add(Point point, float tile=0f, float color=0f)
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
void RemoveMember(Chara c)
bool TryAbortAutoCombat(bool immediate=true)
void RefreshCurrentHotItem()
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
ref Vector3 Position(int height)
List< Card > ListCards(bool includeMasked=false)
RenderParam ApplyAnime(RenderParam p)
override string ToString()
Point Set(int _x, int _z)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool IsActive(int id, int days=-1)
void OnCardAddedToZone(Card c)
List< Card > deconstructing
void OnNumChange(Card c, int a)
virtual void OnKillChara(Chara c)
static int Range(int min, int max)
static void UseSeed(int seed, Action action)
static void SetSeed(int a=-1)
HashSet< string > knownIngredients
static Religion recentWrath
static RenderParam shared
SourceCategory.Row Category
void SetImage(Image image, Sprite sprite=null, int matCol=0, bool setNativeSize=true, int dir=0, int idSkin=0, Card card=null)
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
SourceMaterial.Row DefaultMaterial
AnimationCurve fovCurveChara
float playerLightCustomMod
SceneGlobalProfile global
DamageTextRenderer damageTextRenderer
Dictionary< string, CardRow > map
bool IsChildOf(string id)
string GetText(string id="name", bool returnNull=false)
string TryGetId(string id, string id2)
SourceCategory categories
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
CardRow Select(int lv=-1, int levelRange=-1)
Sprite GetSprite(bool snow=false)
static Dictionary< string, SpriteReplacer > dictSkins
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
void SetOwner(Card owner)
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)
void AddCurrency(Card owner, string id, int a, SourceMaterial.Row mat=null)
DestData GetDest(Thing t, bool tryStack=true)
void Foreach(Action< Thing > action, bool onlyAccessible=true)
int GetCurrency(string id, ref int sum, SourceMaterial.Row mat=null)
static Thing CreateFromFilter(string id, int lv=-1)
static Thing CreateFromCategory(string idCat, int lv=-1)
static Thing Create(string id, int idMat=-1, int lv=-1)
void TryLickEnchant(Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
override CardRow sourceCard
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
virtual bool UseMountHeight
StringBuilder ApplyTone(string id, ref string text, int gender)
string GetToneID(string id, int gender)
static Thing MakeRandomSeed(bool enc=false)
virtual bool CanBeAttacked
virtual bool ShouldRefreshTile
virtual void OnChangePlaceState(PlaceState state)
virtual bool CanChildDecay(Card c)
virtual bool CanBeDestroyed
virtual void SetOwner(Card _owner)
virtual void Toggle(bool on, bool silent=false)
virtual void OnSimulateHour(VirtualDate date)
virtual bool CanBeTeleported
virtual EffectDead EffectDead
virtual void OnCreate(int lv)
virtual ToggleType ToggleType
virtual bool ShouldTryRefreshRoom
virtual bool CanBeSmashedToDeath
virtual bool LevelAsQuality
virtual int CompareTo(Card b)
virtual ThrowType ThrowType
virtual int InstallBottomPriority
void Install(bool byPlayer)
static void Reserve(string idStep, Action onBeforePlay=null)
static Dictionary< string, SaveData > dictData
bool TryAddThing(Thing target, Point p, bool destroyIfFail=false)
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)