2using System.Collections.Generic;
4using System.Runtime.Serialization;
29 [JsonProperty(PropertyName =
"A")]
30 public int[]
_ints =
new int[30];
32 [JsonProperty(PropertyName =
"B")]
33 public string id =
"";
35 [JsonProperty(PropertyName =
"C")]
38 [JsonProperty(PropertyName =
"D")]
41 [JsonProperty(PropertyName =
"E")]
44 [JsonProperty(PropertyName =
"SC")]
243 return 0.001f * (float)
_ints[15];
247 _ints[15] = (int)(value * 1000f);
255 return 0.001f * (float)
_ints[16];
259 _ints[16] = (int)(value * 1000f);
271 _ints[17] = (int)value;
283 _ints[18] = (int)value;
307 _ints[19] = (int)value * 100;
993 SetInt(103, value ? 1 : 0);
1005 SetInt(109, value ? 1 : 0);
1017 SetInt(63, value ? 1 : 0);
1029 SetInt(64, value ? 1 : 0);
1041 SetInt(120, value ? 1 : 0);
1053 SetInt(121, value ? 1 : 0);
1065 SetInt(122, value ? 1 : 0);
1750 return GetObj<UniqueData>(6);
1762 return GetObj<Thing>(9);
1774 return GetObj<List<SocketData>>(17);
1786 return GetObj<Thing>(10);
1810 return GetObj<CharaUpgrade>(11);
1822 return GetObj<CharaGenes>(15);
1834 return GetObj<List<int>>(16);
1858 return GetObj<DNA>(14);
1870 return GetObj<CharaList>(13);
1882 return GetObj<MixedFoodData>(18);
1894 return GetObj<byte[]>(4);
1993 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2081 if (
Tiles.Length == 1)
2083 return dir % 2 == 1;
2145 return id ==
"grass";
2267 return EClass.player.fame / 100 + 1;
2277 if (
Tiles.Length < 3)
2351 return bio.gender == 2;
2503 if (
card.isSale || !
card.trait.CanUseContent)
2508 if (windowSaveData !=
null)
2520 EClass.player.wasDirtyWeight =
true;
2538 public int Evalue(
int ele,
bool ignoreGlobalElement)
2564 return c_editorTags?.Contains(tag.ToString()) ??
false;
2597 int num2 =
item.Value;
2660 for (
int i = 0; i <
sockets.Count; i++)
2680 thing.parent =
this;
2697 public void Create(
string _id,
int _idMat = -1,
int genLv = -1)
2702 CardBlueprint.current =
null;
2751 if (
id ==
"microchip")
2832 EClass._zone.Boss =
Chara;
2873 int num = elementContainer.Value(value.
id);
2925 num = num * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2929 return num * (100 +
Evalue(1237) * 30) / 100;
2960 Say(
"dingExp",
this);
2973 int num = Mathf.Min(1 +
LV / 5, 20);
2974 for (
int i = 0; i < num; i++)
2976 if (
Evalue(1644) < i + 1)
3016 if (rootCard !=
null && rootCard.
IsPC)
3071 Debug.LogWarning(
"already child:" + t);
3076 Debug.Log(
"already in the list" + t);
3091 t.ignoreAutoPick =
false;
3135 if (rootCard !=
null && rootCard.
IsPC)
3144 t.isNPCProperty =
false;
3158 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3161 void TryAdd(
Thing a)
3163 if (!ings.Contains(a.
id))
3177 List<Chara> list =
new List<Chara>();
3191 if (!
item.IsPCFactionOrMinion)
3195 List<Thing> list2 =
item.things.List((
Thing t) => t.
id == af.id && t != af);
3196 if (list2.Count == 0)
3200 foreach (
Thing item2
in list2)
3210 for (
int num =
things.Count - 1; num >= 0; num--)
3221 rootCard.Chara.held =
null;
3227 instance.selectedButton.card =
null;
3230 ActionMode.AdvOrRegion.updatePlans =
true;
3247 if (thing.
invY == 1)
3249 WidgetCurrentTool.dirty =
true;
3253 if (thing.
props !=
null)
3261 WidgetHotbar.dirtyCurrentItem =
true;
3262 thing.parent =
null;
3267 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3274 thing.parent =
null;
3283 return EClass.ui.layers.Count > 0;
3305 to.c_isImportant =
true;
3330 return card.GetRootCard();
3357 thing.encLV =
encLV;
3358 thing.decay =
decay;
3361 foreach (KeyValuePair<int, int>
item in mapInt)
3365 foreach (KeyValuePair<int, string> item2
in mapStr)
3367 thing.
mapStr[item2.Key] = item2.Value;
3373 thing.sockets = IO.DeepCopy(
sockets);
3389 ModNum(-a, notify:
false);
3401 return this as
Thing;
3404 return this as
Thing;
3410 return this as
Thing;
3413 public void ModNum(
int a,
bool notify =
true)
3452 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3458 for (
int i = 0; i <
sockets.Count; i++)
3476 for (
int i = 0; i <
sockets.Count; i++)
3482 int ele = num / 1000;
3483 int num2 = num % 1000;
3578 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3584 string encSlot = source.
encSlot;
3585 if (encSlot ==
null || encSlot.Length != 0)
3592 string[] array = source.
encSlot.Split(
',');
3593 foreach (
string key
in array)
3641 if (this.placeState == newState)
3647 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3659 float num2 = (
fy = 0f);
3670 this.placeState = newState;
3678 this.placeState = newState;
3733 num = num * (100 +
Quality) / 100;
3770 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3817 public bool TryPay(
int a,
string id =
"money")
3824 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3828 if (
IsPC && !(
id ==
"ration"))
3848 Say(
"spellbookCrumble",
this);
3857 if (
id ==
"influence")
3869 if (
id ==
"influence")
3900 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
3902 if (num > 100000000)
3934 int num =
PV + orCreateElement.Value +
DEX / 10;
3941 num2 = num3 / 10 + 1;
3942 sides = num3 / num2 + 1;
3944 dmg = dmg * 100 / Mathf.Max(100 + num, 1);
3946 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
3947 dmg -= num4 * mod / 100;
3957 DamageHP(dmg, 0, 0, attackSource, origin);
3966 bool flag = originalTarget !=
null;
3970 if ((uint)(attackSource2 - 3) > 1u && (uint)(attackSource2 - 13) > 4u)
3974 int num = chara3.
Evalue(1241);
3977 Say(
"wall_flesh", chara3,
this);
3985 if (ele == 0 || ele == 926)
3990 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
3996 if (attackSource !=
AttackSource.Condition && showEffect)
4006 int num2 = ((origin !=
null) ? origin.Evalue(1238) : 0);
4012 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
4013 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
4020 if (chara2 !=
null && chara2.
isWet)
4029 if (chara !=
null && chara.
isWet)
4031 dmg = dmg * 150 / 100;
4037 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
4045 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
4047 if (origin !=
null && origin.HasCondition<
ConBerserk>())
4056 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num3 - 50))) / 100;
4059 dmg = dmg * Mathf.Max(0, 100 - Mathf.Min(
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56), 100) / ((!flag) ? 1 : 2)) / 100;
4066 dmg = dmg * 90 / 100;
4070 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
4074 dmg = dmg * 90 / 100;
4093 dmg = dmg * 100 / Mathf.Min(100 + num4 * 5, 120);
4097 dmg = dmg * Mathf.Min(100 + num5 * 5, 120) / 100;
4102 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
4104 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
4106 dmg = dmg * (1000 - Mathf.Min(
Evalue(1218), 1000) / ((!flag) ? 1 : 2)) / 1000;
4114 int num6 =
MaxHP / 10;
4115 int num7 = dmg - num6;
4116 num7 = num7 * 100 / (200 +
Evalue(68) * 10);
4128 int num8 = Mathf.Clamp(dmg * 6 /
MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0);
4138 if (hp < 0 && Chara.mana.value >= 0)
4154 Chara.mana.value -= dmg;
4171 float ratio = (float)dmg / (
float)
MaxHP;
4182 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4184 aI_PracticeDummy.hit++;
4185 aI_PracticeDummy.totalDamage += dmg;
4242 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4244 EClass.player.invlunerable =
true;
4277 if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null && (origin.isSynced ||
IsPC))
4284 text =
"dead_" + e.
source.alias;
4288 text =
"dead_attack";
4296 text =
"kill_" + e.source.alias;
4300 text =
"kill_attack";
4302 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4310 Say(
"reboot",
this);
4317 if (HasCondition<ConRebirth>())
4319 Say(
"rebirth",
this);
4331 Msg.alwaysVisible =
true;
4332 Msg.
Say(
"layhand", chara4,
this);
4333 Msg.
Say(
"pray_heal",
this);
4343 if (zoneInstanceBout !=
null)
4369 Die(e, origin, attackSource, originalTarget);
4375 string text2 =
new int[18]
4377 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4378 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4379 }.RandomItem().ToString();
4382 text2 =
"casino_coin";
4386 text2 =
"scratchcard";
4414 if (origin !=
null && origin.isChara)
4436 if (origin.GetInt(106) == 0)
4438 origin.Chara.TalkTopic(
"kill");
4443 else if ((attackSource ==
AttackSource.Melee || attackSource ==
AttackSource.Range) && origin !=
null && originalTarget ==
null)
4445 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num8 + (
IsPC ?
"pc" :
""), origin,
this);
4449 int num11 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4454 Say(
"dmg_" + e.source.alias,
this);
4458 Say(
"dmg" + num8,
this);
4472 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4476 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4480 int num12 = origin.Dist(
this);
4484 if (
id ==
"hedgehog_ether")
4488 Say(
"reflect_thorne",
this, origin);
4489 origin.DamageHP(Mathf.Clamp(dmg / 10, 1,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele2,
Power,
AttackSource.Condition,
this);
4494 Say(
"reflect_acid",
this, origin);
4495 origin.DamageHP(Mathf.Clamp(dmg / 10, 1,
MaxHP / (origin.IsPowerful ? 200 : 20)), ele3,
Power * 2,
AttackSource.Condition,
this);
4507 int a3 = (int)(100L * (
long)(dmg * 100 /
MaxHP) / 100) + 1;
4518 int num13 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4532 if (Chance(30 + eleP / 5, 100))
4540 if (Chance(30 + eleP / 10, 100))
4545 else if (Chance(50 + eleP / 10, 100))
4551 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4557 if (Chance(30 + eleP / 5, 100))
4563 if (Chance(30 + eleP / 5, 100))
4570 if (Chance(30 + eleP / 5, 100))
4579 if (Chance(30 + eleP / 5, 100))
4584 else if (Chance(30 + eleP / 5, 100))
4590 if (Chance(50 + eleP / 10, 100))
4598 if (Chance(30 + eleP / 5, 100))
4617 if (Chance(5 + eleP / 25, 40))
4621 if (Chance(5 + eleP / 25, 40))
4625 if (Chance(5 + eleP / 25, 40))
4629 if (Chance(5 + eleP / 25, 40))
4633 if (Chance(5 + eleP / 25, 40))
4637 if (Chance(5 + eleP / 25, 40))
4641 if (Chance(30 + eleP / 10, 100))
4647 if (Chance(50 + eleP / 10, 100))
4653 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4664 Condition.ignoreEffect =
true;
4666 Condition.ignoreEffect =
false;
4674 float num14 = (float)
hp / (
float)
MaxHP;
4681 PlaySound(
"heartbeat", 1f - num14 * 2f);
4711 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4722 bool Chance(
int a,
int max)
4724 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4726 return Mathf.Min(a, max) >
EClass.
rnd(100);
4735 Chara.mana.value = 0;
4748 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4750 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4751 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4754 int num15 =
EClass.
rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10));
4755 origin.Chara.stamina.Mod(num15);
4761 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4763 int num16 =
EClass.
rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10));
4764 origin.Chara.mana.Mod(num16);
4770 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4772 int num17 =
EClass.
rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10));
4773 origin.Chara.mana.Mod(num17);
4785 Card rootCard = GetRootCard();
4787 if (_pos !=
null && !_pos.
IsValid)
4798 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
4799 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
4801 text += e.source.alias;
4805 Msg.
Say(text,
this, rootCard);
4810 Msg.
Say(
"destroyed",
this);
4815 things.ForeachReverse(delegate(
Thing t)
4824 if (e !=
null && _pos !=
null && e.id == 21)
4830 Explode(pos, origin);
4838 origin = origin?.Chara,
4840 aliasEle =
"eleImpact"
4846 PlaySound(
material.GetSoundDead(sourceCard));
4854 Debug.Log(Name +
" is already destroyed.");
4865 Chara.isDead =
true;
4883 for (
int num = things.Count - 1; num >= 0; num--)
4885 things[num].Destroy();
4892 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
4898 List<Card> list =
new List<Card>();
4899 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
4902 if (this.rarity >=
Rarity.Legendary)
4935 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
4947 if (
id ==
"littleOne" && IsPCFactionOrMinion)
4951 if (flag2 && !isUserZone)
4954 bool num2 = text ==
"_meat";
4966 text =
"meat_marble";
4969 if (thing3.
source._origin ==
"meat")
4983 if (!IsPCFaction && !isUserZone)
4985 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
4987 string[] array = item2.
Split(
'/');
4988 int num4 = array[1].ToInt();
5027 if (!isBackerContent && !flag)
5057 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
5067 if (text2 ==
"big_daddy" || text2 ==
"santa")
5075 List<Thing> list2 =
new List<Thing>();
5076 foreach (
Thing thing4
in things)
5102 if (num5 > 0 && list2.Count > 0)
5105 for (
int j = 0; j < list2.Count && j < num5; j++)
5111 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
5114 foreach (
Card item3
in list)
5123 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
5128 for (
int k = 0; k < num5; k++)
5151 foreach (
Thing thing5
in things)
5153 if (thing5.
GetInt(116) != 0)
5158 Point nearestPoint = GetRootCard().pos;
5163 foreach (
Card item4
in list)
5169 item4.isHidden =
false;
5226 case "egg_fertilized":
5231 string text =
"c_wilds";
5232 if (
id ==
"_meat" ||
id ==
"meat_marble")
5240 for (
int i = 0; i < 20; i++)
5249 if (c_idRefCard.IsEmpty())
5251 MakeRefFrom(cardRow.
model);
5256 MakeFoodFrom(cardRow.
model);
5258 return this as
Thing;
5264 return this as
Thing;
5281 int num = race.
food[0].ToInt();
5282 bool flag =
id ==
"meat_marble";
5284 bool flag2 = category.
IsChildOf(
"meat");
5296 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5299 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5301 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5305 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5323 foreach (
Element value
in c.elements.dict.Values)
5325 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5330 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5331 foreach (KeyValuePair<int, int>
item in race.elementMap)
5335 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5338 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5339 for (
int i = 0; i < num2 && i < list.Count; i++)
5341 Tuple<int, int> tuple = list[i];
5342 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5344 if (c.Chara.IsUndead)
5348 isWeightChanged =
true;
5349 c_weight = race.height * 4 + 100;
5350 c_idMainElement = c.c_idMainElement;
5352 int num3 = c.LV - c.sourceCard.LV;
5358 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5362 if (flag2 && c.IsPCFaction && c.IsUnique)
5377 if (IsIgnoreName(
card))
5381 if (IsIgnoreName(card2))
5385 if (
card ==
null && card2 !=
null)
5392 MakeRefFrom(
card, card2);
5393 if (
card.c_idRefCard !=
null)
5395 c_idRefCard =
card.c_idRefCard;
5396 c_altName = TryGetFoodName(
card);
5401 c_altName2 = TryGetFoodName(card2);
5404 static bool IsIgnoreName(
Card c)
5434 if (!row.aka.IsEmpty())
5436 if (row.name ==
"*r" && row.aka ==
"*r")
5438 return "corpseGeneral".lang();
5440 if (row.name ==
"*r")
5442 return row.GetText(
"aka");
5445 return row.GetName();
5450 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5465 c_idRefCard = c1.
id;
5469 c_idRefCard2 = c2.id;
5470 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5472 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5479 thing.c_idMainElement = c_idMainElement;
5488 return GiveBirth(thing, effect);
5499 int num2 = LV - sourceCard.
LV;
5512 return GiveBirth(thing, effect);
5518 EClass.player.forceTalk =
true;
5519 card.Talk(
"giveBirth");
5523 card.pos.PlayEffect(
"revive");
5524 card.pos.PlaySound(
"egg");
5581 SayNothingHappans();
5584 PlayEffect(
"teleport");
5587 Say(
"antiTeleport",
this);
5588 PlaySound(
"gravity");
5593 PlaySound(
"teleport");
5594 Say(
"teleported",
this);
5603 if (chara.
enemy ==
this)
5614 EClass.player.haltMove =
true;
5616 PlayEffect(
"teleport", useRenderPos:
false);
5623 PlayEffect(
"ripple");
5624 PlaySound(
"Footstep/water");
5640 return elements.
Value(ele) >= req;
5655 if (HasElement(764))
5659 if (HasElement(759))
5663 if (HasElement(703))
5681 for (
int i = 0; i < a; i++)
5692 shared.color = 11010048f;
5693 shared.liquidLv = 0;
5695 SetRenderParam(shared);
5715 isDyed = mat !=
null;
5716 c_dyeMat = mat?.id ?? 0;
5728 else if (isElemental)
5764 int num = EClass.game.seed + refVal;
5765 num +=
id[0] % 10000;
5768 num +=
id[1] % 1000;
5771 num +=
id[2] % 1000;
5774 num +=
id[3] % 1000;
5777 num +=
id[4] % 1000;
5786 return ref _randColor;
5803 public void SetImage(Image image,
int dir,
int idSkin = 0)
5805 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin,
this);
5816 sourceRenderCard.
SetImage(image, GetSprite(), colorInt, setNativeSize:
true, 0, 0,
this);
5820 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
5822 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
5826 renderer.
ShowEmo(_emo, duration);
5834 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
5839 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
5844 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
5849 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
5852 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
5854 Card rootCard = GetRootCard();
5861 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
5886 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
5892 Card rootCard = GetRootCard();
5896 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
5904 Card rootCard = GetRootCard();
5927 public virtual void Rotate(
bool reverse =
false)
5930 if (sourceCard.
tiles.Length > 4)
5932 num = sourceCard.
tiles.Length;
5990 fx = fx - vector.x + thingPosition.x;
5991 fy = fy - vector.y + thingPosition.y;
5995 float num2 = (fy = 0f);
6019 renderParam.x = v.x;
6020 renderParam.y = v.y;
6021 renderParam.z = v.z;
6023 v.x = renderParam.
x;
6024 v.y = renderParam.
y;
6025 v.z = renderParam.
z;
6039 v.z += thingPosition.z;
6046 if (useCurrentPosition)
6061 renderer.
Draw(renderParam, ref v, drawShadow:
false);
6072 EClass.player.lightRadius = 1;
6080 return GetLightRadius() > 0;
6088 return 0.01f * LightData.color.a * 256f * 1.12f;
6090 if (IsPCFaction && !IsPC)
6151 num2 = traitLightSource.LightRadius;
6156 if (lightRadius > 0)
6158 if (lightRadius > num2)
6178 int radius = GetLightRadius();
6183 float power = GetLightPower();
6210 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
6221 int num = (trait.UseLightColor ? c_lightColor : 0);
6224 fov.r = (byte)(num / 1024);
6225 fov.g = (byte)(num % 1024 / 32);
6226 fov.b = (byte)(num % 32);
6267 if (fov !=
null && fov.
lastPoints.Count != 0)
6286 things.ForeachReverse(delegate(
Thing t)
6290 if (sourceCard.
_origin ==
"dish")
6298 else if (!isChara && trait.
Decay != 0)
6300 Decay(trait.
Decay * hour);
6318 int num2 = MaxDecay / 4 * 3;
6323 num =
card.trait.DecaySpeedChild;
6325 num = num * trait.DecaySpeed / 100;
6326 int num3 = Evalue(405);
6329 num = num * (100 - num3 * 2) / 100;
6341 if (decay + a > MaxDecay)
6343 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6352 card.AddCard(thing);
6353 if (!IsParentLocked())
6355 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6364 else if (GetRootCard() ==
EClass.
pc)
6366 if (!IsParentLocked())
6378 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6380 if (!IsParentLocked())
6387 bool IsParentLocked()
6389 if (parent is
Thing)
6391 return (parent as
Thing).c_lockLv > 0;
6399 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6402 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6406 EClass.player.forceTalk =
false;
6410 EClass.player.forceTalk =
false;
6411 if (!isSynced && !forceSync)
6416 GameLang.refDrama1 = ref1;
6417 GameLang.refDrama2 = ref2;
6418 string text = GetTalkText(idTopic, stripPun:
true);
6419 if (HasElement(1232) && idTopic !=
"baby")
6426 if (!(text2 ==
"adv_gaki"))
6428 if (text2 ==
"corgon")
6438 TalkRaw(text, ref1, ref2, forceSync);
6441 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6443 if ((!isSynced && !forceSync) || text.IsEmpty())
6450 text = text.Replace(
"#1", ref1);
6454 text = text.Replace(
"#2", ref2);
6456 HostRenderer.Say(ApplyNewLine(text));
6457 bool flag = text.StartsWith(
"*");
6461 text = text.Bracket();
6463 Msg.
Say(text.Replace(
"&",
""));
6468 if (text.Contains(
"&"))
6470 string text2 =
"_comma".lang();
6471 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6472 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6473 text = text.Replace(
"&", Environment.NewLine ??
"");
6478 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6480 if (isSynced && !text.IsEmpty())
6484 text = text.Replace(
"#1", ref1);
6488 text = text.Replace(
"#2", ref2);
6490 HostRenderer.Say(text);
6496 Say(
"nothingHappens");
6499 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6508 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6517 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6526 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6530 if (!text.IsEmpty())
6532 text = text.Split(
'|').RandomItem();
6533 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6535 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6537 text =
"(" + text +
")";
6539 text = text.Replace(
"。)",
")");
6542 return ApplyTone(text, stripPun);
6548 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6551 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6557 string[] array = _tones.IsEmpty(
"").Split(
'|');
6558 string key = array[0];
6563 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6567 if (array[0].IsEmpty())
6576 if (array.Length >= 2)
6578 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6580 if (array.Length >= 3)
6582 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6585 text2 = stringBuilder.ToString();
6589 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6600 return text2.StripLastPun();
6615 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6616 if (list.Count != 0)
6618 int mtp = EClass.core.config.test.extraToneMTP
switch
6631 string text = list.RandomItem()[
"id"];
6632 text = list.RandomItemWeighted((Dictionary<string, string> a) => a[
"chance"].ToInt() * ((!a[
"tag"].Contains(
"meta")) ? 1 : mtp))[
"id"];
6639 return ListCraftBonusTraits().Count > 0;
6644 List<Element> list =
new List<Element>();
6645 string[] tag = sourceCard.
tag;
6646 for (
int i = 0; i < tag.Length; i++)
6648 string[] array = tag[i].Split(
'/');
6649 if (!(array[0] !=
"craft_bonus"))
6665 if (dest.
stack !=
null)
6669 Say(
"stack_thing", t, dest.
stack);
6677 ChangeRarity(
Rarity.Normal);
6683 c_idBacker = row.
id;
6689 chara.hostility = hostility2;
6695 Chara.idFaith = row.
deity.ToLower();
6700 if (
id ==
"putty_snow")
6713 if (c_idBacker == 164)
6726 c_textureData = GetPaintData();
6736 Sprite sprite = GetSprite();
6737 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
6738 int num = sprite.texture.width * 2;
6739 int num2 = sprite.texture.height * 2;
6740 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
6741 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
6742 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
6743 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
6744 texture2D2.SetPixels(pixels);
6746 byte[] result = texture2D2.EncodeToJPG();
6747 UnityEngine.Object.Destroy(texture2D);
6748 UnityEngine.Object.Destroy(texture2D2);
6754 if ((
bool)_paintSprite)
6756 UnityEngine.Object.Destroy(_paintSprite.texture);
6757 UnityEngine.Object.Destroy(_paintSprite);
6758 _paintSprite =
null;
6766 byte[] data = c_textureData;
6767 Texture2D texture2D =
new Texture2D(1, 1);
6768 texture2D.LoadImage(data);
6769 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
6773 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
6776 return _paintSprite;
6781 if (!(GetRestrainer() ==
null || force))
6785 isRestrained =
false;
6786 Say(
"unrestrained",
this);
6797 if (c_rescueState ==
RescueState.WaitingForRescue)
6811 c.DoHostileAction(
item, immediate:
true);
6838 result = row.value * mat.value / 100;
6875 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
6876 if (
id ==
"plat" && !sell)
6887 num2 += (float)c_priceCopy * 0.2f;
6888 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
6892 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
6894 if (IsFood && !
material.tag.Contains(
"food"))
6899 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
6917 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
6919 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
6921 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
6922 if (IsEquipmentOrRanged)
6927 num4 += value.
source.value;
6929 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
6930 if (rarity >=
Rarity.Legendary)
6932 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
6940 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
6942 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)))));
6946 num2 *= (float)(tier + 1);
6953 if (priceType ==
PriceType.CopyShop && sell)
6959 if (
id ==
"littleball")
6974 case "hammer_strip":
6983 if (!(text ==
"lucky_coin"))
6985 if (!(text ==
"book_skill"))
7004 case "diary_sister":
7008 case "diary_catsister":
7010 case "container_magic":
7012 case "wrench_tent_elec":
7014 case "wrench_tent_soil":
7016 case "wrench_tent_seabed":
7020 case "wrench_storage":
7022 case "wrench_fridge":
7024 case "wrench_extend_v":
7026 case "wrench_extend_h":
7038 if (!sell &&
id ==
"casino_coin")
7042 int value = GetValue(priceType, sell);
7052 Trait trait = this.trait;
7057 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
7062 p *= 1f + 0.5f * (float)c_containerSize;
7065 if (c_priceFix != 0)
7067 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
7077 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
7088 if (!sell && category.
id ==
"spellbook")
7092 bool flag = priceType ==
PriceType.CopyShop;
7093 int num = ((!flag) ? 1 : 5);
7094 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
7095 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
7096 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
7101 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
7103 p *= 0.20000000298023224;
7106 p *= 0.20000000298023224;
7109 p *= 0.20000000298023224;
7115 if ((uint)(priceType - 1) <= 1u)
7127 if (
id ==
"rod_wish")
7129 p *= (sell ? 0.01f : 50f);
7144 p *= 0.20000000298023224;
7148 p *= 0.10000000149011612;
7151 p *= 0.0020000000949949026;
7154 p *= 0.00019999999494757503;
7157 p *= 0.004999999888241291;
7168 p *= (flag ? 1.25f : 0.3f);
7172 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
7176 p *= (flag ? 0.9f : 0.5f);
7188 p *= 1f + 0.2f * (float)c.Evalue(1406);
7201 p *= 1.100000023841858;
7235 else if (category.
IsChildOf(
"furniture"))
7255 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
7262 p = ((!sell) ? 1 : 0);
7270 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
7272 else if (p > 10000.0)
7274 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
7276 else if (p > 1000.0)
7278 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
7282 p = Mathf.CeilToInt((
float)p / 100f) * 100;
7286 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7294 if (p > (
double)(sell ? 500000000 : 1000000000))
7307 return Name + GetExtraName();
7324 ForeachPoint(delegate(
Point p,
bool main)
7326 int num2 = DistMulti(p, c);
7334 return DistMulti(pos, c);
7366 isCensored = enable;
7376 if (isDeconstructing != deconstruct)
7386 isDeconstructing = deconstruct;
7400 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7403 sortVal = -GetPrice(
currency) * 1000;
7406 sortVal = -Num * 1000;
7409 sortVal = category.sortVal * 1000;
7412 sortVal = -ChildrenAndSelfWeight * 1000;
7415 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7418 sortVal = -GetPrice(
currency) * 1000;
7421 sortVal = sourceCard._index * 1000;
7431 num =
id.CompareTo(c.
id);
7451 num = encLV - c.
encLV;
7470 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7488 action(pos, arg2:
true);
7502 SE.Play(
"pop_paper");
7527 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7540 if (!HaveFur() || c_fur < 0)
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
virtual bool CancelWhenDamaged
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 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 Set(CardBlueprint _bp)
static CardBlueprint current
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)
void MakeRefFrom(string id)
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
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
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)
string TryGetFoodName(Card c)
string ApplyNewLine(string text)
virtual void LookAt(Point p)
virtual SourceMaterial.Row DefaultMaterial
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
virtual void HealHPHost(int a, HealSource origin=HealSource.None)
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
int GetAffinityExpBonus()
void Say(string lang, Card c1, string ref1=null, string ref2=null)
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 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)
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 int ApplyProtection(int dmg, int mod=100)
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 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()
void DamageHP(int dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
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)
override bool IsDeadOrSleeping
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)
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)
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
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)
static SubPassData Default
string GetTalk(string id, string idTopic, bool useDefault=false, bool human=true)
string GetRandomID(string tag)
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 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)