2using System.Collections.Generic;
4using System.Runtime.Serialization;
27 [JsonProperty(PropertyName =
"A")]
28 public int[]
_ints =
new int[30];
30 [JsonProperty(PropertyName =
"B")]
31 public string id =
"";
33 [JsonProperty(PropertyName =
"C")]
36 [JsonProperty(PropertyName =
"D")]
39 [JsonProperty(PropertyName =
"E")]
42 [JsonProperty(PropertyName =
"SC")]
241 return 0.001f * (float)
_ints[15];
245 _ints[15] = (int)(value * 1000f);
253 return 0.001f * (float)
_ints[16];
257 _ints[16] = (int)(value * 1000f);
269 _ints[17] = (int)value;
281 _ints[18] = (int)value;
305 _ints[19] = (int)value * 100;
979 SetInt(103, value ? 1 : 0);
991 SetInt(109, value ? 1 : 0);
1003 SetInt(63, value ? 1 : 0);
1015 SetInt(64, value ? 1 : 0);
1027 SetInt(120, value ? 1 : 0);
1039 SetInt(121, value ? 1 : 0);
1051 SetInt(122, value ? 1 : 0);
1700 return GetObj<UniqueData>(6);
1712 return GetObj<Thing>(9);
1724 return GetObj<List<SocketData>>(17);
1736 return GetObj<Thing>(10);
1760 return GetObj<CharaUpgrade>(11);
1772 return GetObj<CharaGenes>(15);
1784 return GetObj<List<int>>(16);
1808 return GetObj<DNA>(14);
1820 return GetObj<CharaList>(13);
1832 return GetObj<byte[]>(4);
1931 if (_childrenWeight < 0 || _childrenWeight > 10000000)
2019 if (
Tiles.Length == 1)
2021 return dir % 2 == 1;
2083 return id ==
"grass";
2205 return EClass.player.fame / 100 + 1;
2215 if (
Tiles.Length < 3)
2289 return bio.gender == 2;
2441 if (
card.isSale || !
card.trait.CanUseContent)
2446 if (windowSaveData !=
null)
2458 EClass.player.wasDirtyWeight =
true;
2476 public int Evalue(
int ele,
bool ignoreGlobalElement)
2502 return c_editorTags?.Contains(tag.ToString()) ??
false;
2535 int num2 =
item.Value;
2606 thing.parent =
this;
2623 public void Create(
string _id,
int _idMat = -1,
int genLv = -1)
2628 CardBlueprint.current =
null;
2677 if (
id ==
"microchip")
2758 EClass._zone.Boss =
Chara;
2798 int num = elementContainer.Value(value.
id);
2826 a = a * (50 + EClass.game.principal.petFeatExpMtp * 50) / 100;
2830 a = a * (100 +
Evalue(1237) * 30) / 100;
2853 Say(
"dingExp",
this);
2866 int num = Mathf.Min(1 +
LV / 5, 22);
2867 for (
int i = 0; i < num; i++)
2869 if (
Evalue(1644) < i + 1)
2909 if (rootCard !=
null && rootCard.
IsPC)
2964 Debug.LogWarning(
"already child:" + t);
2969 Debug.Log(
"already in the list" + t);
2984 t.ignoreAutoPick =
false;
3028 if (rootCard !=
null && rootCard.
IsPC)
3037 t.isNPCProperty =
false;
3051 Msg.
Say((count == 1) ?
"newIng" :
"newIngs", count.ToString() ??
"");
3054 void TryAdd(
Thing a)
3056 if (!ings.Contains(a.
id))
3070 List<Chara> list =
new List<Chara>();
3084 if (!
item.IsPCFactionOrMinion)
3088 List<Thing> list2 =
item.things.List((
Thing t) => t.
id == af.id && t != af);
3089 if (list2.Count == 0)
3093 foreach (
Thing item2
in list2)
3103 for (
int num =
things.Count - 1; num >= 0; num--)
3114 rootCard.Chara.held =
null;
3120 instance.selectedButton.card =
null;
3123 ActionMode.AdvOrRegion.updatePlans =
true;
3140 if (thing.
invY == 1)
3142 WidgetCurrentTool.dirty =
true;
3146 if (thing.
props !=
null)
3154 WidgetHotbar.dirtyCurrentItem =
true;
3155 thing.parent =
null;
3160 if (
item.invs[0].owner.Container.GetRootCard() !=
EClass.
pc &&
item.floatInv)
3167 thing.parent =
null;
3176 return EClass.ui.layers.Count > 0;
3198 to.c_isImportant =
true;
3223 return card.GetRootCard();
3250 thing.encLV =
encLV;
3251 thing.decay =
decay;
3254 foreach (KeyValuePair<int, int>
item in mapInt)
3258 foreach (KeyValuePair<int, string> item2
in mapStr)
3260 thing.
mapStr[item2.Key] = item2.Value;
3266 thing.sockets = IO.DeepCopy(
sockets);
3282 ModNum(-a, notify:
false);
3294 return this as
Thing;
3297 return this as
Thing;
3303 return this as
Thing;
3306 public void ModNum(
int a,
bool notify =
true)
3345 ApplySocket(traitMod.source.id, traitMod.owner.encLV, traitMod.owner);
3351 for (
int i = 0; i <
sockets.Count; i++)
3369 for (
int i = 0; i <
sockets.Count; i++)
3375 int ele = num / 100;
3376 int num2 = num % 100;
3405 type = SocketData.Type.Rune
3465 if (row.category ==
"resist")
3469 if (
item.source.category ==
"resist" && (
item.vBase != 0 ||
item.vSource != 0))
3500 if (this.placeState == newState)
3506 Debug.Log(
"tried to change placestate of non-root card:" +
this);
3518 float num2 = (
fy = 0f);
3529 this.placeState = newState;
3537 this.placeState = newState;
3588 num = num * (100 +
Quality) / 100;
3625 int num = ((a == 1) ? 180 : ((a == 2) ? 400 : ((a >= 3) ? 600 : 0)));
3672 public bool TryPay(
int a,
string id =
"money")
3679 Msg.
Say((
id ==
"ration") ?
"notEnoughFood" :
"notEnoughMoney");
3683 if (
IsPC && !(
id ==
"ration"))
3703 Say(
"spellbookCrumble",
this);
3712 if (
id ==
"influence")
3724 if (
id ==
"influence")
3755 num = (long)a * (
long)Mathf.Max(100 -
Evalue(93), 1) / 100;
3757 if (num > 100000000)
3789 int num =
PV + orCreateElement.Value +
DEX / 10;
3796 num2 = num3 / 10 + 1;
3797 sides = num3 / num2 + 1;
3799 dmg = dmg * 100 / (100 + num);
3801 int num4 =
Dice.
Roll(num2, sides, bonus,
this);
3802 dmg -= num4 * mod / 100;
3812 DamageHP(dmg, 0, 0, attackSource, origin);
3822 if (ele == 0 || ele == 926)
3827 dmg = dmg * Mathf.Max(100 + origin.Evalue(93) / 2, 10) / 100;
3833 if (attackSource !=
AttackSource.Condition && showEffect)
3843 int num = ((origin !=
null) ? origin.Evalue(1238) : 0);
3849 dmg = dmg * 100 / (100 + Mathf.Clamp(
Evalue(961) * 5, -50, 200));
3850 dmg = dmg * Mathf.Max(100 -
Evalue(93), 10) / 100;
3857 if (chara2 !=
null && chara2.
isWet)
3866 if (chara !=
null && chara.
isWet)
3868 dmg = dmg * 150 / 100;
3874 if (origin !=
null && origin.isChara && origin.Chara.HasCondition<
ConSupress>())
3882 dmg = dmg * (100 - (int)Mathf.Min(80f, Mathf.Sqrt(
LV - 50) * 2.5f)) / 100;
3889 dmg = dmg * (100 - (int)Mathf.Min(95f, Mathf.Sqrt(num2 - 50))) / 100;
3892 dmg = dmg * Mathf.Max(0, 100 -
Evalue((e ==
Element.
Void || e.
id == 926) ? 55 : 56)) / 100;
3899 dmg = dmg * 90 / 100;
3903 dmg = dmg * 100 / Mathf.Clamp(100 +
Evalue(971), 25, 1000);
3907 dmg = dmg * 90 / 100;
3926 dmg = dmg * 100 / Mathf.Min(100 + num3 * 5, 120);
3930 dmg = dmg * Mathf.Min(100 + num4 * 5, 120) / 100;
3935 dmg = dmg * 100 / Mathf.Clamp(105 +
EClass.
pc.
Evalue(135) / 10, 10, 110);
3937 if (
HasElement(1218) && attackSource != AttackSource.ManaBackfire && (
hp > 0 ||
Evalue(1421) <= 0))
3939 dmg = dmg * (1000 -
Evalue(1218)) / 1000;
3947 int num5 =
MaxHP / 10;
3948 int num6 = dmg - num5;
3949 num6 = num6 * 100 / (200 +
Evalue(68) * 10);
3961 int num7 = Mathf.Clamp(dmg * 6 /
MaxHP, 0, 4) + ((dmg > 0) ? 1 : 0);
3971 if (hp < 0 && Chara.mana.value >= 0)
3987 Chara.mana.value -= dmg;
4004 float ratio = (float)dmg / (
float)
MaxHP;
4015 if (
EClass.
pc.
ai is
AI_PracticeDummy { IsRunning: not
false } aI_PracticeDummy && aI_PracticeDummy.target ==
this && (origin ==
null || origin.IsPC))
4017 aI_PracticeDummy.hit++;
4018 aI_PracticeDummy.totalDamage += dmg;
4075 Msg.
Say(
IsPC ?
"abort_damage" :
"abort_damgeAlly");
4077 EClass.player.invlunerable =
true;
4117 text =
"dead_" + e.
source.alias;
4121 text =
"dead_attack";
4129 text =
"kill_" + e.source.alias;
4133 text =
"kill_attack";
4135 (
IsPC ? EClass.pc : origin).
Say(text, origin,
this);
4143 Say(
"reboot",
this);
4150 if (HasCondition<ConRebirth>())
4152 Say(
"rebirth",
this);
4164 Msg.alwaysVisible =
true;
4165 Msg.
Say(
"layhand", chara3,
this);
4166 Msg.
Say(
"pray_heal",
this);
4176 if (zoneInstanceBout !=
null)
4200 Die(e, origin, attackSource);
4206 string text2 =
new int[18]
4208 233, 235, 236, 236, 236, 1170, 1143, 1144, 727, 728,
4209 237, 869, 1178, 1179, 1180, 1243, 1244, 1245
4210 }.RandomItem().ToString();
4213 text2 =
"casino_coin";
4217 text2 =
"scratchcard";
4245 if (origin !=
null && origin.isChara)
4267 if (origin.GetInt(106) == 0)
4269 origin.Chara.TalkTopic(
"kill");
4276 (
IsPC ? EClass.pc : origin).
Say(
"dmgMelee" + num7 + (
IsPC ?
"pc" :
""), origin,
this);
4280 int num10 = ((attackSource != AttackSource.Condition && attackSource !=
AttackSource.WeaponEnchant) ? 1 : 2);
4285 Say(
"dmg_" + e.source.alias,
this);
4289 Say(
"dmg" + num7,
this);
4303 if (origin !=
null && origin.IsAliveInCurrentZone && origin.isChara)
4307 origin.HealHP(Mathf.Clamp(
EClass.
rnd(dmg * (50 + eleP) / 500 + 5), 1, origin.MaxHP / 5 +
EClass.
rnd(10)));
4314 if (
id ==
"hedgehog_ether")
4318 Say(
"reflect_thorne",
this, origin);
4324 Say(
"reflect_acid",
this, origin);
4337 int a3 = (int)(100L * (
long)(dmg * 100 /
MaxHP) / 100) + 1;
4348 int num11 = ((
EClass.
rnd(2) == 0) ? 1 : 0);
4362 if (Chance(30 + eleP / 5, 100))
4370 if (Chance(30 + eleP / 10, 100))
4375 else if (Chance(50 + eleP / 10, 100))
4381 if (Chance(75 + eleP / 20, 100) &&
EClass.
rnd(3) == 0)
4387 if (Chance(30 + eleP / 5, 100))
4393 if (Chance(30 + eleP / 5, 100))
4400 if (Chance(30 + eleP / 5, 100))
4409 if (Chance(30 + eleP / 5, 100))
4414 else if (Chance(30 + eleP / 5, 100))
4420 if (Chance(50 + eleP / 10, 100))
4428 if (Chance(30 + eleP / 5, 100))
4447 if (Chance(5 + eleP / 25, 40))
4451 if (Chance(5 + eleP / 25, 40))
4455 if (Chance(5 + eleP / 25, 40))
4459 if (Chance(5 + eleP / 25, 40))
4463 if (Chance(5 + eleP / 25, 40))
4467 if (Chance(5 + eleP / 25, 40))
4471 if (Chance(30 + eleP / 10, 100))
4477 if (Chance(50 + eleP / 10, 100))
4483 if (Chance(50 + eleP / 10, 100) &&
EClass.
rnd(4) == 0)
4494 Condition.ignoreEffect =
true;
4496 Condition.ignoreEffect =
false;
4504 float num12 = (float)
hp / (
float)
MaxHP;
4511 PlaySound(
"heartbeat", 1f - num12 * 2f);
4541 if (origin !=
null && origin.isChara && attackSource !=
AttackSource.Finish)
4552 bool Chance(
int a,
int max)
4554 if (dmg > 0 || (origin !=
null && origin.HasElement(1345)))
4556 return Mathf.Min(a, max) >
EClass.
rnd(100);
4565 Chara.mana.value = 0;
4578 if (origin !=
null && origin.isChara &&
isChara && (
weapon ==
null || !
weapon.HasElement(486)))
4580 int valueOrDefault = (origin.Evalue(662) +
weapon?.Evalue(662, ignoreGlobalElement:
true)).GetValueOrDefault();
4581 int valueOrDefault2 = (origin.Evalue(661) +
weapon?.Evalue(661, ignoreGlobalElement:
true)).GetValueOrDefault();
4584 int num13 =
EClass.
rnd(3 + Mathf.Clamp(dmg / 100, 0, valueOrDefault / 10));
4585 origin.Chara.stamina.Mod(num13);
4591 if (origin.HasElement(1350) && attackSource ==
AttackSource.Melee)
4593 int num14 =
EClass.
rndHalf(2 + Mathf.Clamp(dmg / 10, 0, origin.Chara.GetPietyValue() + 10));
4594 origin.Chara.mana.Mod(num14);
4600 if (valueOrDefault2 > 0 && attackSource ==
AttackSource.Melee)
4602 int num15 =
EClass.
rnd(2 + Mathf.Clamp(dmg / 10, 0, valueOrDefault2 + 10));
4603 origin.Chara.mana.Mod(num15);
4615 Card rootCard = GetRootCard();
4617 if (_pos !=
null && !_pos.
IsValid)
4628 string text = ((rootCard !=
this) ?
"destroyed_inv_" :
"destroyed_ground_");
4629 if (e !=
null &&
LangGame.
Has(text + e.source.alias))
4631 text += e.source.alias;
4635 Msg.
Say(text,
this, rootCard);
4640 Msg.
Say(
"destroyed",
this);
4645 things.ForeachReverse(delegate(
Thing t)
4654 if (e !=
null && _pos !=
null && e.id == 21)
4660 Explode(pos, origin);
4668 origin = origin?.Chara,
4670 aliasEle =
"eleImpact"
4676 PlaySound(
material.GetSoundDead(sourceCard));
4684 Debug.Log(Name +
" is already destroyed.");
4695 Chara.isDead =
true;
4713 for (
int num = things.Count - 1; num >= 0; num--)
4715 things[num].Destroy();
4722 if (!isChara || IsPCFactionMinion || (isCopy &&
EClass.
rnd(10) != 0))
4728 List<Card> list =
new List<Card>();
4730 if (!IsPCFaction && !isUserZone && sourceCard.
idActor.IsEmpty())
4733 if (this.rarity >=
Rarity.Legendary)
4766 else if (origin !=
null && origin.
HasElement(290) && !IsMinion)
4778 if (
id ==
"littleOne" && IsPCFactionOrMinion)
4782 if (flag2 && !isUserZone)
4785 bool num2 = text ==
"_meat";
4793 text =
"meat_marble";
4796 if (thing3.
source._origin ==
"meat")
4810 if (!IsPCFaction && !isUserZone)
4812 foreach (
string item2
in sourceCard.
loot.Concat(
Chara.
race.loot).ToList())
4814 string[] array = item2.
Split(
'/');
4815 int num4 = array[1].ToInt();
4854 if (!isBackerContent && !flag)
4883 int num5 = ((EClass._zone.Boss ==
this) ? 2 : ((this.rarity >=
Rarity.Legendary) ? 1 : 0));
4893 if (text2 ==
"big_daddy" || text2 ==
"santa")
4901 List<Thing> list2 =
new List<Thing>();
4902 foreach (
Thing thing4
in things)
4928 if (num5 > 0 && list2.Count > 0)
4931 for (
int j = 0; j < list2.Count && j < num5; j++)
4937 if (this.rarity >=
Rarity.Legendary && !IsUnique && c_bossType !=
BossType.Evolved)
4940 foreach (
Card item3
in list)
4949 int num7 = ((!(EClass._zone is
Zone_Void)) ? 1 : 2);
4954 for (
int k = 0; k < num5; k++)
4977 foreach (
Thing thing5
in things)
4979 if (thing5.
GetInt(116) != 0)
4984 Point nearestPoint = GetRootCard().pos;
4989 foreach (
Card item4
in list)
4995 item4.isHidden =
false;
5052 case "egg_fertilized":
5056 string text =
"c_wilds";
5057 if (
id ==
"_meat" ||
id ==
"meat_marble")
5061 for (
int i = 0; i < 20; i++)
5064 if (cardRow.
model.
Chara.
race.corpse[0] !=
"_meat" &&
id !=
"milk" &&
id !=
"_egg" &&
id !=
"egg_fertilized")
5070 if (c_idRefCard.IsEmpty())
5072 MakeRefFrom(cardRow.
model);
5077 MakeFoodFrom(cardRow.
model);
5084 return this as
Thing;
5097 int num = race.
food[0].ToInt();
5098 bool flag =
id ==
"meat_marble";
5100 bool flag2 = category.
IsChildOf(
"meat");
5112 elements.
SetBase(70, race.
STR * race.
STR / 5 * num / 100 - 10 + num / 10);
5115 elements.
SetBase(440, race.
END * race.
END / 5 * num / 100 - 10 + num / 10);
5117 elements.
SetBase(71, (
int)Mathf.Clamp((
float)(num / 10) + Mathf.Sqrt(race.
height) - 10f, 1f, 60f));
5121 elements.
SetBase(444, race.
LER * race.
LER / 5 * num / 100 - 10 + num / 10);
5139 foreach (
Element value
in c.elements.dict.Values)
5141 if ((!flag3 || value.
id != 1229) && (value.
source.category ==
"food" || value.
source.tag.Contains(
"foodEnc") || value.
IsTrait))
5146 List<Tuple<int, int>> list =
new List<Tuple<int, int>>();
5147 foreach (KeyValuePair<int, int>
item in race.elementMap)
5151 list.Add(
new Tuple<int, int>(
item.Key,
item.Value));
5154 list.Sort((Tuple<int, int> a, Tuple<int, int> b) => b.Item2 - a.Item2);
5155 for (
int i = 0; i < num2 && i < list.Count; i++)
5157 Tuple<int, int> tuple = list[i];
5158 elements.
SetBase(tuple.Item1, tuple.Item2 * tuple.Item2 / 4);
5164 isWeightChanged =
true;
5165 c_weight = race.height * 4 + 100;
5166 c_idMainElement = c.c_idMainElement;
5168 int num3 = c.LV - c.sourceCard.LV;
5174 if (c.rarity >=
Rarity.Legendary || c.IsUnique)
5178 if (flag2 && c.IsPCFaction && c.IsUnique)
5193 if (IsIgnoreName(
card))
5197 if (IsIgnoreName(card2))
5201 if (
card ==
null && card2 !=
null)
5208 MakeRefFrom(
card, card2);
5209 if (
card.c_idRefCard !=
null)
5211 c_idRefCard =
card.c_idRefCard;
5212 c_altName = TryGetFoodName(
card);
5217 c_altName2 = TryGetFoodName(card2);
5220 static bool IsIgnoreName(
Card c)
5250 if (!row.aka.IsEmpty())
5252 if (row.name ==
"*r" && row.aka ==
"*r")
5254 return "corpseGeneral".lang();
5256 if (row.name ==
"*r")
5258 return row.GetText(
"aka");
5261 return row.GetName();
5266 return s.Replace(
"_corpseFrom".lang(),
"_corpseTo".lang());
5281 c_idRefCard = c1.
id;
5285 c_idRefCard2 = c2.id;
5286 c_altName2 = (c2.IsPC ? c2.c_altName : c2.GetName(
NameStyle.Ref, (!c2.isChara) ? 1 : 0));
5288 c_extraNameRef = (c1.IsPC ? EClass.pc.c_altName : c1.
c_extraNameRef);
5338 SayNothingHappans();
5341 PlayEffect(
"teleport");
5344 Say(
"antiTeleport",
this);
5345 PlaySound(
"gravity");
5350 PlaySound(
"teleport");
5351 Say(
"teleported",
this);
5360 if (chara.
enemy ==
this)
5371 EClass.player.haltMove =
true;
5373 PlayEffect(
"teleport", useRenderPos:
false);
5380 PlayEffect(
"ripple");
5381 PlaySound(
"Footstep/water");
5397 return elements.
Value(ele) >= req;
5421 for (
int i = 0; i < a; i++)
5432 shared.color = 11010048f;
5433 shared.liquidLv = 0;
5435 SetRenderParam(shared);
5455 isDyed = mat !=
null;
5456 c_dyeMat = mat?.id ?? 0;
5468 else if (isElemental)
5497 int num = EClass.game.seed + refVal;
5498 num +=
id[0] % 10000;
5501 num +=
id[1] % 1000;
5504 num +=
id[2] % 1000;
5507 num +=
id[3] % 1000;
5510 num +=
id[4] % 1000;
5519 return ref _randColor;
5536 public void SetImage(Image image,
int dir,
int idSkin = 0)
5538 sourceRenderCard.
SetImage(image, GetSprite(dir), colorInt, setNativeSize:
true, dir, idSkin);
5549 sourceRenderCard.
SetImage(image, GetSprite(), colorInt);
5553 public void ShowEmo(
Emo _emo =
Emo.none,
float duration = 0f,
bool skipSame =
true)
5555 if ((!isChara ||
Chara.
host ==
null) && !(_emo == lastEmo && skipSame))
5559 renderer.
ShowEmo(_emo, duration);
5567 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
5572 PlaySound(
material.GetSoundDrop(sourceCard), 1f, spatial);
5577 PlaySound(
material.GetSoundImpact(sourceCard), 1f, spatial);
5582 PlaySound(
material.GetSoundDead(sourceCard), 1f, spatial);
5585 public SoundSource
PlaySound(
string id,
float v = 1f,
bool spatial =
true)
5587 Card rootCard = GetRootCard();
5594 return rootCard.
pos.
PlaySound(
id, isSynced || !spatial, v, spatial);
5619 public Effect PlayEffect(
string id,
bool useRenderPos =
true,
float range = 0f, Vector3 fix =
default(Vector3))
5625 Card rootCard = GetRootCard();
5629 public void PlayEffect(
int ele,
bool useRenderPos =
true,
float range = 0f)
5637 Card rootCard = GetRootCard();
5660 public virtual void Rotate(
bool reverse =
false)
5663 if (sourceCard.
tiles.Length > 4)
5665 num = sourceCard.
tiles.Length;
5723 fx = fx - vector.x + thingPosition.x;
5724 fy = fy - vector.y + thingPosition.y;
5728 float num2 = (fy = 0f);
5752 renderParam.x = v.x;
5753 renderParam.y = v.y;
5754 renderParam.z = v.z;
5756 v.x = renderParam.
x;
5757 v.y = renderParam.
y;
5758 v.z = renderParam.
z;
5772 v.z += thingPosition.z;
5779 if (useCurrentPosition)
5794 renderer.
Draw(renderParam, ref v, drawShadow:
false);
5805 EClass.player.lightRadius = 1;
5813 return GetLightRadius() > 0;
5821 return 0.01f * LightData.color.a * 256f * 1.12f;
5823 if (IsPCFaction && !IsPC)
5884 num2 = traitLightSource.LightRadius;
5889 if (lightRadius > 0)
5891 if (lightRadius > num2)
5911 int radius = GetLightRadius();
5916 float power = GetLightPower();
5943 fov.
Perform(pos.
x, pos.
z, radius, power * 2f);
5954 int num = (trait.UseLightColor ? c_lightColor : 0);
5957 fov.r = (byte)(num / 1024);
5958 fov.g = (byte)(num % 1024 / 32);
5959 fov.b = (byte)(num % 32);
6000 if (fov !=
null && fov.
lastPoints.Count != 0)
6019 things.ForeachReverse(delegate(
Thing t)
6023 if (sourceCard.
_origin ==
"dish")
6031 else if (!isChara && trait.
Decay != 0)
6033 Decay(trait.
Decay * hour);
6051 int num2 = MaxDecay / 4 * 3;
6056 num =
card.trait.DecaySpeedChild;
6058 num = num * trait.DecaySpeed / 100;
6059 int num3 = Evalue(405);
6062 num = num * (100 - num3 * 2) / 100;
6074 if (decay + a > MaxDecay)
6076 if (
card !=
null && !
card.trait.OnChildDecay(
this, !IsDecayed))
6085 card.AddCard(thing);
6086 if (!IsParentLocked())
6088 GetRootCard().Say(
"seed_rot", GetRootCard(),
this, thing.
Name);
6097 else if (GetRootCard() ==
EClass.
pc)
6099 if (!IsParentLocked())
6111 else if (decay < num2 && decay + a >= num2 && GetRootCard() ==
EClass.
pc)
6113 if (!IsParentLocked())
6120 bool IsParentLocked()
6122 if (parent is
Thing)
6124 return (parent as
Thing).c_lockLv > 0;
6132 return !
MOD.
listTalk.
GetTalk(c_idTalk.IsEmpty(
id), idTopic, useDefault:
true).IsEmpty();
6135 public void Talk(
string idTopic,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6139 EClass.player.forceTalk =
false;
6143 EClass.player.forceTalk =
false;
6144 if (!isSynced && !forceSync)
6149 GameLang.refDrama1 = ref1;
6150 GameLang.refDrama2 = ref2;
6151 string text = GetTalkText(idTopic, stripPun:
true);
6152 if (HasElement(1232) && idTopic !=
"baby")
6159 if (!(text2 ==
"adv_gaki"))
6161 if (text2 ==
"corgon")
6171 TalkRaw(text, ref1, ref2, forceSync);
6174 public void TalkRaw(
string text,
string ref1 =
null,
string ref2 =
null,
bool forceSync =
false)
6176 if ((!isSynced && !forceSync) || text.IsEmpty())
6183 text = text.Replace(
"#1", ref1);
6187 text = text.Replace(
"#2", ref2);
6189 HostRenderer.Say(ApplyNewLine(text));
6190 bool flag = text.StartsWith(
"*");
6194 text = text.Bracket();
6196 Msg.
Say(text.Replace(
"&",
""));
6201 if (text.Contains(
"&"))
6203 string text2 =
"_comma".lang();
6204 text = text.Replace(text2 +
" &", Environment.NewLine ??
"");
6205 text = text.Replace(text2 +
"&", Environment.NewLine ??
"");
6206 text = text.Replace(
"&", Environment.NewLine ??
"");
6211 public void SayRaw(
string text,
string ref1 =
null,
string ref2 =
null)
6213 if (isSynced && !text.IsEmpty())
6217 text = text.Replace(
"#1", ref1);
6221 text = text.Replace(
"#2", ref2);
6223 HostRenderer.Say(text);
6229 Say(
"nothingHappens");
6232 public void Say(
string lang,
string ref1 =
null,
string ref2 =
null)
6241 public void Say(
string lang,
Card c1,
Card c2,
string ref1 =
null,
string ref2 =
null)
6250 public void Say(
string lang,
Card c1,
string ref1 =
null,
string ref2 =
null)
6259 public string GetTalkText(
string idTopic,
bool stripPun =
false,
bool useDefault =
true)
6263 if (!text.IsEmpty())
6265 text = text.Split(
'|').RandomItem();
6266 if (!flag || (IsDeadOrSleeping && IsAliveInCurrentZone))
6268 if (!text.StartsWith(
"(") && !text.StartsWith(
"*"))
6270 text =
"(" + text +
")";
6272 text = text.Replace(
"。)",
")");
6275 return ApplyTone(text, stripPun);
6281 return ApplyTone(
Chara, ref text, c_idTone, bio?.gender ?? 0, stripPun);
6284 public static string ApplyTone(
Chara c, ref
string text,
string _tones,
int gender,
bool stripPun =
false)
6290 string[] array = _tones.IsEmpty(
"").Split(
'|');
6291 string key = array[0];
6296 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6300 if (array[0].IsEmpty())
6309 if (array.Length >= 2)
6311 stringBuilder.Replace(
"_toneI".lang(), array[1]);
6313 if (array.Length >= 3)
6315 stringBuilder.Replace(
"_toneYou".lang(), array[2]);
6318 text2 = stringBuilder.ToString();
6322 text2 = text.Replace(
"{",
"").Replace(
"}",
"");
6329 return text2.StripLastPun();
6344 List<Dictionary<string, string>> list =
MOD.
tones.
list;
6345 if (list.Count == 0)
6349 string text = list.RandomItem()[
"id"];
6350 for (
int i = 0; i < 10; i++)
6352 Dictionary<string, string> dictionary = list.RandomItem();
6353 if (
EClass.
rnd(100) <= dictionary[
"chance"].ToInt())
6355 text = dictionary[
"id"];
6364 return ListCraftBonusTraits().Count > 0;
6369 List<Element> list =
new List<Element>();
6370 string[] tag = sourceCard.
tag;
6371 for (
int i = 0; i < tag.Length; i++)
6373 string[] array = tag[i].Split(
'/');
6374 if (!(array[0] !=
"craft_bonus"))
6390 if (dest.
stack !=
null)
6394 Say(
"stack_thing", t, dest.
stack);
6402 ChangeRarity(
Rarity.Normal);
6408 c_idBacker = row.
id;
6414 chara.hostility = hostility2;
6420 Chara.idFaith = row.
deity.ToLower();
6425 if (
id ==
"putty_snow")
6438 if (c_idBacker == 164)
6451 c_textureData = GetPaintData();
6461 Sprite sprite = GetSprite();
6462 Texture2D texture2D = ScreenCapture.CaptureScreenshotAsTexture();
6463 int num = sprite.texture.width * 2;
6464 int num2 = sprite.texture.height * 2;
6465 int x = (int)Mathf.Clamp(Input.mousePosition.x - (
float)(num / 2), 1f, texture2D.width - num - 1);
6466 int y = (int)Mathf.Clamp(Input.mousePosition.y - (
float)(num2 / 2), 1f, texture2D.height - num2 - 1);
6467 Color[] pixels = texture2D.GetPixels(x, y, num, num2);
6468 Texture2D texture2D2 =
new Texture2D(num, num2, TextureFormat.ARGB32, mipChain:
false);
6469 texture2D2.SetPixels(pixels);
6471 byte[] result = texture2D2.EncodeToJPG();
6472 UnityEngine.Object.Destroy(texture2D);
6473 UnityEngine.Object.Destroy(texture2D2);
6479 if ((
bool)_paintSprite)
6481 UnityEngine.Object.Destroy(_paintSprite.texture);
6482 UnityEngine.Object.Destroy(_paintSprite);
6483 _paintSprite =
null;
6491 byte[] data = c_textureData;
6492 Texture2D texture2D =
new Texture2D(1, 1);
6493 texture2D.LoadImage(data);
6494 _paintSprite = Sprite.Create(texture2D,
new Rect(0f, 0f, texture2D.width, texture2D.height),
new Vector2(0.5f, 0.5f), 200f);
6498 texture2D.filterMode = ((!traitCanvas.PointFilter) ? FilterMode.Bilinear : FilterMode.Point);
6501 return _paintSprite;
6506 if (!(GetRestrainer() ==
null || force))
6510 isRestrained =
false;
6511 Say(
"unrestrained",
this);
6522 if (c_rescueState ==
RescueState.WaitingForRescue)
6536 c.DoHostileAction(
item, immediate:
true);
6563 result = row.value * mat.value / 100;
6600 int num = ((c_fixedValue == 0) ? trait.
GetValue() : c_fixedValue);
6601 if (
id ==
"plat" && !sell)
6612 num2 += (float)c_priceCopy * 0.2f;
6613 num2 = num2 * (float)Mathf.Max(150 + rarityLv, 150) / 100f;
6617 num2 = num2 * (float)Mathf.Max(100 + rarityLv + Mathf.Min(QualityLv * 10, 200), 80) / 100f;
6619 if (IsFood && !
material.tag.Contains(
"food"))
6624 if (IsEquipmentOrRangedOrAmmo || trait is
TraitMod)
6642 if (IsEquipmentOrRanged && rarity >=
Rarity.Legendary)
6644 num2 = Mathf.Max(num2, 1800f + num2 / 5f);
6646 num2 = num2 * (100f + num3 * (float)(
material.value - 100)) / 100f;
6647 if (IsEquipmentOrRanged)
6652 num4 += value.
source.value;
6654 num2 = num2 * (float)(100 + (sell ? ((
int)MathF.Sqrt(num4) * 10) : num4)) / 100f;
6655 if (rarity >=
Rarity.Legendary)
6657 num2 = Mathf.Max(num2, 3600f + num2 / 5f);
6665 if (encLV != 0 && !category.
tag.Contains(
"noEnc"))
6667 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)))));
6671 num2 *= (float)(tier + 1);
6680 if (
id ==
"littleball")
6695 if (!(text ==
"lucky_coin"))
6697 if (!(text ==
"book_skill"))
6716 case "diary_sister":
6720 case "diary_catsister":
6722 case "container_magic":
6724 case "wrench_tent_elec":
6726 case "wrench_tent_soil":
6730 case "wrench_storage":
6732 case "wrench_fridge":
6734 case "wrench_extend_v":
6736 case "wrench_extend_h":
6748 if (!sell &&
id ==
"casino_coin")
6752 int value = GetValue(priceType, sell);
6762 Trait trait = this.trait;
6767 p *= 1f + 4f * (float)(things.
width - traitContainer.Width) + 4f * (float)(things.
height - traitContainer.Height);
6772 p *= 1f + 0.5f * (float)c_containerSize;
6775 if (c_priceFix != 0)
6777 p = (int)((
float)p * (float)Mathf.Clamp(100 + c_priceFix, 0, 1000000) / 100f);
6787 p = p * 100.0 / (double)Mathf.Max(110f, 170f - Mathf.Sqrt(
EClass.
Branch.
Evalue(2824) * 5));
6798 if (!sell && category.
id ==
"spellbook")
6802 bool flag = priceType ==
PriceType.CopyShop;
6803 int num = ((!flag) ? 1 : 5);
6804 float num2 = Mathf.Min(0.01f * (
float)Evalue(752), 1f);
6805 float num3 = Mathf.Min(0.01f * (
float)Evalue(751), 1f);
6806 float num4 = Mathf.Min(0.02f * (
float)Evalue(759), 2f);
6811 float num5 = Mathf.Clamp(1f + num2 + num3, 0.5f, 5f) + num4;
6813 p *= 0.20000000298023224;
6816 p *= 0.20000000298023224;
6819 p *= 0.20000000298023224;
6825 if ((uint)(priceType - 1) <= 1u)
6837 if (
id ==
"rod_wish")
6839 p *= (sell ? 0.01f : 50f);
6854 p *= 0.20000000298023224;
6858 p *= 0.10000000149011612;
6861 p *= 0.0020000000949949026;
6864 p *= 0.00019999999494757503;
6867 p *= 0.004999999888241291;
6870 if (IsIdentified || (this.trait is
TraitErohon && !sell))
6878 p *= (flag ? 1.25f : 0.3f);
6882 p = p * 0.05000000074505806 + p * (double)(0.5f + Mathf.Clamp(0.1f * (
float)c_charges, 0f, 1.5f));
6886 p *= (flag ? 0.9f : 0.5f);
6898 p *= 1f + 0.2f * (float)c.Evalue(1406);
6911 p *= 1.100000023841858;
6945 else if (category.
IsChildOf(
"furniture"))
6965 p *= (sell ? (1f + num6 * 0.02f) : (1f - num6 * 0.02f));
6972 p = ((!sell) ? 1 : 0);
6980 p = Mathf.CeilToInt((
float)p / 100000f) * 100000;
6982 else if (p > 10000.0)
6984 p = Mathf.CeilToInt((
float)p / 10000f) * 10000;
6986 else if (p > 1000.0)
6988 p = Mathf.CeilToInt((
float)p / 1000f) * 1000;
6992 p = Mathf.CeilToInt((
float)p / 100f) * 100;
6996 p = Mathf.CeilToInt((
float)p / 10f) * 10;
7004 if (p > (
double)(sell ? 500000000 : 1000000000))
7017 return Name + GetExtraName();
7034 ForeachPoint(delegate(
Point p,
bool main)
7036 int num2 = DistMulti(p, c);
7044 return DistMulti(pos, c);
7076 isCensored = enable;
7086 if (isDeconstructing != deconstruct)
7096 isDeconstructing = deconstruct;
7110 sortVal = ((c_equippedSlot == 0) ? (category.
sortVal * 1000) : 0);
7113 sortVal = -GetPrice(
currency) * 1000;
7116 sortVal = -Num * 1000;
7119 sortVal = category.sortVal * 1000;
7122 sortVal = -ChildrenAndSelfWeight * 1000;
7125 sortVal = -ChildrenAndSelfWeightSingle * 1000;
7128 sortVal = -GetPrice(
currency) * 1000;
7131 sortVal = sourceCard._index * 1000;
7141 num =
id.CompareTo(c.
id);
7161 num = encLV - c.
encLV;
7180 foreach (KeyValuePair<int, byte> lastPoint
in fov.
lastPoints)
7198 action(pos, arg2:
true);
7212 SE.Play(
"pop_paper");
7237 if (text ==
"putty_snow" || text ==
"putty_snow_gold")
7250 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)
void SetTier(int a, bool setTraits=true)
void ModExp(int ele, int a)
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
bool CanAddRune(SourceElement.Row row)
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)
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)
Thing AddThing(Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
void PlaySoundHold(bool spatial=true)
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)
bool IsExcludeFromCraft()
virtual void SetDir(int d)
virtual void HealHP(int a, HealSource origin=HealSource.None)
bool IsEquipmentOrRangedOrAmmo
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)
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
void DamageHP(int dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null)
SourceMaterial.Row _material
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None)
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
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)
virtual void SetImage(Image image)
virtual bool CanStackTo(Thing to)
SocketData AddRune(int idEle, int v)
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)
Thing TryMakeRandomItem(int lv=-1)
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
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)
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)
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)
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
Dictionary< int, Element > dict
void CopyTo(ElementContainer container)
int ValueWithoutLink(int ele)
void ModExp(int ele, int a, bool chain=false)
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)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
ref Vector3 PositionCenter()
Effect PlayEffect(string id)
void RefreshNeighborTiles()
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false)
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)
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 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
Card AddCard(Card t, Point point)
void OnChildNumChange(Card c)