Elin Decompiled Documentation EA 23.287 Stable Patch 3
Loading...
Searching...
No Matches
DNA Class Reference
Inheritance diagram for DNA:
EClass

Public Types

enum  Type { Inferior = 0 , Default = 3 , Superior = 5 , Brain = 8 }
 

Public Member Functions

void Apply (Chara c)
 
void Apply (Chara c, bool reverse)
 
bool CanRemove (Chara c)
 
void GenerateWithGene (Type _type, Card gene, Chara model=null)
 
void Generate (Type _type, Chara model=null)
 
void CalcCost ()
 
void CalcSlot ()
 
string GetMaterialId (Type type)
 
int GetDurationHour ()
 
Type GetRandomType ()
 
string GetText ()
 
void WriteNote (UINote n, Chara tg=null)
 
void WriteNoteExtra (UINote n, Chara tg)
 
Element GetInvalidFeat (Chara c)
 
Element GetInvalidAction (Chara c)
 
void MakeSlimeFood (Chara c)
 

Static Public Member Functions

static Thing GenerateGene (Chara c, Type? type=null)
 
static Thing GenerateGene (CardRow r, Type? type=null, int lv=-1, int seed=-1)
 
static Thing CopyDNA (Thing from, Thing to)
 
static Thing GenerateRandomGene (int lv=-1, int seed=-1)
 
static Thing GenerateManiGene (Card owner)
 
static Type GetType (string idMat)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

Public Attributes

string id
 
int[] ints = new int[6]
 
List< int > vals = new List<int>()
 
BitArray32 bits
 

Properties

Type type [get, set]
 
int cost [get, set]
 
int lv [get, set]
 
int seed [get, set]
 
int slot [get, set]
 
bool isManiGene [get, set]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Private Member Functions

void _OnSerializing (StreamingContext context)
 
void _OnDeserialized (StreamingContext context)
 

Additional Inherited Members

- Static Public Attributes inherited from EClass
static Core core
 

Detailed Description

Definition at line 7 of file DNA.cs.

Member Enumeration Documentation

◆ Type

enum DNA.Type
Enumerator
Inferior 
Default 
Superior 
Brain 

Definition at line 9 of file DNA.cs.

10 {
11 Inferior = 0,
12 Default = 3,
13 Superior = 5,
14 Brain = 8
15 }

Member Function Documentation

◆ _OnDeserialized()

void DNA._OnDeserialized ( StreamingContext  context)
inlineprivate

Definition at line 107 of file DNA.cs.

108 {
109 if (ints.Length < 6)
110 {
111 Array.Resize(ref ints, 6);
112 slot = 1;
113 }
114 }
int slot
Definition: DNA.cs:77
int[] ints
Definition: DNA.cs:21

References ints, and slot.

◆ _OnSerializing()

void DNA._OnSerializing ( StreamingContext  context)
inlineprivate

Definition at line 101 of file DNA.cs.

102 {
103 ints[4] = bits.ToInt();
104 }
BitArray32 bits
Definition: DNA.cs:26
int ToInt()
Definition: BitArray32.cs:84

References bits, ints, and BitArray32.ToInt().

◆ Apply() [1/2]

void DNA.Apply ( Chara  c)
inline

Definition at line 178 of file DNA.cs.

179 {
180 if (c.c_genes == null)
181 {
182 c.c_genes = new CharaGenes();
183 }
184 CharaGenes c_genes = c.c_genes;
185 if (type == Type.Inferior)
186 {
187 c.c_genes.inferior++;
188 return;
189 }
190 c.feat -= cost * c.GeneCostMTP / 100;
191 Apply(c, reverse: false);
192 c_genes.items.Add(this);
193 }
CharaGenes c_genes
Definition: Card.cs:1883
int inferior
Definition: CharaGenes.cs:10
List< DNA > items
Definition: CharaGenes.cs:7
Type type
Definition: DNA.cs:29
int cost
Definition: DNA.cs:41
Type
Definition: DNA.cs:10
void Apply(Chara c)
Definition: DNA.cs:178

References Apply(), Card.c_genes, cost, CharaGenes.inferior, CharaGenes.items, and type.

Referenced by Apply(), FoodEffect.Proc(), and DramaOutcome.upgrade_miscreation().

◆ Apply() [2/2]

void DNA.Apply ( Chara  c,
bool  reverse 
)
inline

Definition at line 195 of file DNA.cs.

196 {
197 if (type == Type.Brain)
198 {
199 c._tactics = null;
200 return;
201 }
202 for (int i = 0; i < vals.Count; i += 2)
203 {
204 int num = vals[i];
205 int num2 = vals[i + 1];
207 switch (row.category)
208 {
209 case "slot":
210 if (reverse)
211 {
212 c.body.RemoveBodyPart(row.id);
213 }
214 else
215 {
216 c.body.AddBodyPart(row.id);
217 }
219 if (c.IsPC && (bool)WidgetEquip.Instance)
220 {
222 }
223 break;
224 case "feat":
225 c.SetFeat(num, c.elements.ValueWithoutLink(num) + ((!reverse) ? 1 : (-1)), !reverse);
226 break;
227 case "ability":
228 if (reverse)
229 {
230 c.ability.Remove(num * ((num2 >= 0) ? 1 : (-1)));
231 }
232 else
233 {
234 c.ability.Add(num, Mathf.Abs(num2), num2 < 0);
235 }
236 break;
237 default:
238 if (!reverse && c.elements.ValueWithoutLink(row.id) == 0)
239 {
240 c.elements.Learn(row.id, num2);
241 }
242 else
243 {
244 c.elements.ModBase(num, reverse ? (-num2) : num2);
245 }
246 break;
247 }
248 }
249 }
ElementContainerCard elements
Definition: Card.cs:42
void Add(int id, int chance, bool pt)
void Remove(int id)
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:283
void RefreshBodyParts()
Definition: CharaBody.cs:309
void RemoveBodyPart(int ele)
Definition: CharaBody.cs:338
CharaBody body
Definition: Chara.cs:94
override bool IsPC
Definition: Chara.cs:626
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:10090
CharaAbility ability
Definition: Chara.cs:426
List< int > vals
Definition: DNA.cs:24
Definition: EClass.cs:6
static SourceManager sources
Definition: EClass.cs:43
void Learn(int ele, int v=1)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
SourceElement elements
static WidgetEquip Instance
Definition: WidgetEquip.cs:11
void Rebuild()
Definition: WidgetEquip.cs:53

References Chara.ability, CharaAbility.Add(), CharaBody.AddBodyPart(), Chara.body, SourceElement.Row.category, Card.elements, SourceManager.elements, SourceElement.Row.id, WidgetEquip.Instance, Chara.IsPC, ElementContainer.Learn(), ElementContainer.ModBase(), WidgetEquip.Rebuild(), CharaBody.RefreshBodyParts(), CharaAbility.Remove(), CharaBody.RemoveBodyPart(), Chara.SetFeat(), EClass.sources, type, vals, and ElementContainer.ValueWithoutLink().

◆ CalcCost()

void DNA.CalcCost ( )
inline

Definition at line 496 of file DNA.cs.

497 {
498 if (cost < 0)
499 {
500 cost = 0;
501 }
502 }

References cost.

Referenced by Generate().

◆ CalcSlot()

void DNA.CalcSlot ( )
inline

Definition at line 504 of file DNA.cs.

505 {
506 slot = 0;
507 for (int i = 0; i < vals.Count; i += 2)
508 {
509 Element element = Element.Create(vals[i], vals[i + 1]);
510 if (element.source.geneSlot < 0)
511 {
512 slot = 99;
513 }
514 if (element.source.geneSlot > slot)
515 {
516 slot = element.source.geneSlot;
517 }
518 }
519 if (slot < 0)
520 {
521 slot = 0;
522 }
523 }
SourceElement.Row source
Definition: ELEMENT.cs:278
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1115

References Element.Create(), slot, Element.source, and vals.

Referenced by Generate().

◆ CanRemove()

bool DNA.CanRemove ( Chara  c)
inline

Definition at line 251 of file DNA.cs.

252 {
253 for (int i = 0; i < vals.Count; i += 2)
254 {
255 switch (vals[i])
256 {
257 case 1237:
258 case 1415:
259 return false;
260 case 1228:
261 case 1414:
262 if (c != null)
263 {
264 return !c.IsPC;
265 }
266 return true;
267 }
268 }
269 return true;
270 }

References Chara.IsPC, and vals.

Referenced by GetInvalidFeat(), WindowCharaMini.Refresh(), and WriteNote().

◆ CopyDNA()

static Thing DNA.CopyDNA ( Thing  from,
Thing  to 
)
inlinestatic

Definition at line 142 of file DNA.cs.

143 {
144 to.c_DNA = from.c_DNA;
145 to.c_idRefCard = from.c_idRefCard;
146 to.ChangeMaterial(from.material);
147 return to;
148 }
SourceMaterial.Row material
Definition: Card.cs:2089
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3117
DNA c_DNA
Definition: Card.cs:1919
string c_idRefCard
Definition: Card.cs:1763

References Card.c_DNA, Card.c_idRefCard, Card.ChangeMaterial(), and Card.material.

Referenced by Card.TryMakeRandomItem().

◆ Generate()

void DNA.Generate ( Type  _type,
Chara  model = null 
)
inline

Definition at line 279 of file DNA.cs.

280 {
281 type = _type;
282 cost = 0;
283 slot = 0;
284 vals.Clear();
286 if (model == null)
287 {
288 model = CharaGen.Create(id);
289 if (lv > model.LV)
290 {
291 model.SetLv(lv);
292 }
293 }
294 if (type == Type.Inferior || model == null)
295 {
296 type = Type.Inferior;
297 return;
298 }
299 if (type == Type.Brain)
300 {
301 cost = 4;
302 return;
303 }
304 int body = 0;
305 int action = 0;
306 int feat = 0;
307 int maxSlot = 1;
308 List<Element> listAttb = model.elements.ListBestAttributes();
309 List<Element> listSkill = model.elements.ListBestSkills();
310 List<Element> listFeat = model.elements.ListGeneFeats();
312 if (listFeat.Count == 0)
313 {
314 listFeat = model.ListAvailabeFeats(pet: true);
315 }
317 switch (type)
318 {
319 case Type.Default:
320 AddRandom(EClass.rnd(EClass.rnd(4)) + 1);
321 if (EClass.rnd(3) == 0 || vals.Count == 0)
322 {
323 AddSpecial();
324 }
325 break;
326 case Type.Superior:
327 AddRandom(EClass.rnd(EClass.rnd(4)) + 3);
328 if (EClass.rnd(3) == 0)
329 {
330 AddSpecial();
331 }
332 AddSpecial();
333 break;
334 }
335 if (vals.Count == 0)
336 {
337 for (int i = 0; i < 10; i++)
338 {
339 if (EClass.rnd(4) == 0)
340 {
341 AddSpecial();
342 }
343 else
344 {
345 AddRandom(1);
346 }
347 if (vals.Count > 0)
348 {
349 break;
350 }
351 }
352 }
353 Rand.SetSeed();
354 CalcCost();
355 CalcSlot();
356 void AddAction()
357 {
358 if (model.ability.list.items.Count != 0)
359 {
360 ActList.Item a = model.ability.list.items.RandomItem();
361 if (!(a.act.source.category != "ability") && a.act.source.geneSlot >= 0)
362 {
363 AddVal(a.act.source.id, a.chance * ((!a.pt) ? 1 : (-1)), allowStack: false, (int v) => 8 + a.act.source.cost[0] / 10 * 2, allowNegative: true);
364 action++;
365 }
366 }
367 }
368 void AddAttribute()
369 {
370 Element element = listAttb[EClass.rnd(3)];
371 AddVal(element.id, EClass.rndHalf(element.ValueWithoutLink / 2), allowStack: true, (int v) => v / 5 + 1, allowNegative: false);
372 }
373 void AddBody()
374 {
375 if (body == 0)
376 {
377 BodySlot bodySlot = null;
378 for (int j = 0; j < 100; j++)
379 {
380 BodySlot bodySlot2 = model.body.slots.RandomItem();
381 if (bodySlot2 != null && bodySlot2.elementId != 40 && bodySlot2.elementId != 44)
382 {
383 bodySlot = bodySlot2;
384 break;
385 }
386 }
387 if (bodySlot != null)
388 {
389 AddVal(bodySlot.elementId, 1, allowStack: false, (int v) => 20, allowNegative: false);
390 body++;
391 }
392 }
393 }
394 void AddFeat()
395 {
396 if (listFeat.Count != 0)
397 {
398 feat++;
399 Element e = listFeat.RandomItem();
400 if (maxSlot <= 1 || e.source.geneSlot <= 1)
401 {
402 if (e.source.geneSlot > maxSlot)
403 {
404 maxSlot = e.source.geneSlot;
405 }
406 AddVal(e.id, 1, allowStack: false, (int v) => e.source.cost[0] * 5, allowNegative: false);
407 }
408 }
409 }
410 void AddRandom(int n)
411 {
412 for (int l = 0; l < n; l++)
413 {
414 if (EClass.debug.enable && EClass.rnd(2) == 0)
415 {
416 AddSpecial();
417 }
418 else if (EClass.rnd(2) == 0)
419 {
420 AddSkill();
421 }
422 else
423 {
424 AddAttribute();
425 }
426 }
427 }
428 void AddSkill()
429 {
430 Element element2 = listSkill[Mathf.Clamp(EClass.rnd(6), 0, listSkill.Count - 1)];
431 AddVal(element2.id, EClass.rndHalf(element2.ValueWithoutLink / 2), allowStack: true, (int v) => v / 5 + 1, allowNegative: false);
432 }
433 void AddSpecial()
434 {
435 if (EClass.rnd(3) == 0)
436 {
437 AddAction();
438 }
439 else if (EClass.rnd(5) == 0)
440 {
441 AddBody();
442 }
443 else if (listFeat.Count > 0)
444 {
445 AddFeat();
446 }
447 else if (EClass.rnd(2) == 0)
448 {
449 AddSkill();
450 }
451 else
452 {
453 AddAttribute();
454 }
455 }
456 void AddVal(int id, int v, bool allowStack, Func<int, int> funcCost, bool allowNegative)
457 {
458 if (v >= 0 || allowNegative)
459 {
460 bool flag = false;
461 int num = EClass.curve(v, 20, 10, 90);
462 if (v < -100)
463 {
464 num = EClass.curve(Mathf.Abs(v + 100), 20, 10, 90);
465 }
466 v = EClass.curve(v, 20, 10, 80);
467 for (int k = 0; k < vals.Count; k += 2)
468 {
469 if (vals[k] == id)
470 {
471 if (allowStack)
472 {
473 v /= 2;
474 num /= 2;
475 vals[k + 1] += v;
476 Debug.Log(vals[k + 1] + ": " + v + "/" + num);
477 flag = true;
478 break;
479 }
480 return;
481 }
482 }
483 if (v != 0)
484 {
485 if (!flag)
486 {
487 vals.Add(id);
488 vals.Add(v);
489 }
490 cost += Mathf.Max(0, funcCost(num));
491 }
492 }
493 }
494 }
int chance
Definition: ActList.cs:9
bool pt
Definition: ActList.cs:11
Act act
Definition: ActList.cs:7
List< Item > items
Definition: ActList.cs:14
int elementId
Definition: BodySlot.cs:6
Card SetLv(int a)
Definition: Card.cs:2977
int LV
Definition: Card.cs:387
ActList list
Definition: CharaAbility.cs:12
List< BodySlot > slots
Definition: CharaBody.cs:8
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:10075
bool enable
Definition: CoreDebug.cs:286
int seed
Definition: DNA.cs:65
void CalcSlot()
Definition: DNA.cs:504
void CalcCost()
Definition: DNA.cs:496
int lv
Definition: DNA.cs:53
static int curve(long _a, int start, int step, int rate=75)
Definition: EClass.cs:69
static int rnd(long a)
Definition: EClass.cs:59
static int rndHalf(int a)
Definition: EClass.cs:97
static CoreDebug debug
Definition: EClass.cs:49
List< Element > ListBestSkills()
List< Element > ListBestAttributes()
List< Element > ListGeneFeats()
int ValueWithoutLink
Definition: ELEMENT.cs:299
int id
Definition: ELEMENT.cs:255
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:44

References ActList.Item.act, CalcCost(), CalcSlot(), ActList.Item.chance, cost, CharaGen.Create(), EClass.curve(), EClass.debug, Debug, BodySlot.elementId, CoreDebug.enable, Element.id, lv, ActList.Item.pt, EClass.rnd(), EClass.rndHalf(), seed, Card.SetLv(), Rand.SetSeed(), slot, Element.source, type, vals, and Element.ValueWithoutLink.

Referenced by GenerateWithGene(), and ActEffect.Proc().

◆ GenerateGene() [1/2]

static Thing DNA.GenerateGene ( CardRow  r,
Type type = null,
int  lv = -1,
int  seed = -1 
)
inlinestatic

Definition at line 129 of file DNA.cs.

130 {
131 Thing thing = ThingGen.Create((type == Type.Brain) ? "gene_brain" : "gene");
132 DNA dNA = new DNA();
133 thing.MakeRefFrom(r.id);
134 dNA.id = r.id;
135 dNA.lv = ((lv == -1) ? r.LV : lv);
136 dNA.seed = ((seed == -1) ? EClass.rnd(20000) : seed);
137 thing.c_DNA = dNA;
138 dNA.GenerateWithGene(type ?? dNA.GetRandomType(), thing);
139 return thing;
140 }
string id
Definition: CardRow.cs:7
Card MakeRefFrom(string id)
Definition: Card.cs:5804
Definition: DNA.cs:8
void GenerateWithGene(Type _type, Card gene, Chara model=null)
Definition: DNA.cs:272
Type GetRandomType()
Definition: DNA.cs:552
int LV
Definition: RenderRow.cs:22
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8

References ThingGen.Create(), GenerateWithGene(), GetRandomType(), CardRow.id, lv, RenderRow.LV, Card.MakeRefFrom(), EClass.rnd(), seed, and type.

◆ GenerateGene() [2/2]

static Thing DNA.GenerateGene ( Chara  c,
Type type = null 
)
inlinestatic

Definition at line 116 of file DNA.cs.

117 {
118 Thing thing = ThingGen.Create((type == Type.Brain) ? "gene_brain" : "gene");
119 DNA dNA = new DNA();
120 thing.MakeRefFrom(c);
121 dNA.id = c.id;
122 dNA.lv = c.LV;
123 dNA.seed = EClass.rnd(20000);
124 thing.c_DNA = dNA;
125 dNA.GenerateWithGene(type ?? dNA.GetRandomType(), thing, c);
126 return thing;
127 }
string id
Definition: Card.cs:36

References ThingGen.Create(), GenerateWithGene(), GetRandomType(), Card.id, Card.LV, Card.MakeRefFrom(), EClass.rnd(), and type.

Referenced by Trait.CreateStock(), GenerateManiGene(), GenerateRandomGene(), Chara.MakeBraineCell(), and Chara.MakeGene().

◆ GenerateManiGene()

static Thing DNA.GenerateManiGene ( Card  owner)
inlinestatic

Definition at line 162 of file DNA.cs.

163 {
164 owner.things.DestroyAll();
165 Debug.Log("Mani:" + owner.c_seed);
166 Rand.SetSeed(owner.c_seed);
167 CardRow r = SpawnList.Get("chara").Select(100);
168 Rand.SetSeed(owner.c_seed);
169 Thing thing = GenerateGene(r, Type.Superior, owner.LV, owner.c_seed);
170 thing.c_DNA.cost = thing.c_DNA.cost / 2;
171 thing.c_DNA.isManiGene = true;
172 thing.MakeRefFrom("mani");
173 Rand.SetSeed();
174 owner.c_seed++;
175 return thing;
176 }
int c_seed
Definition: Card.cs:1331
ThingContainer things
Definition: Card.cs:39
static Thing GenerateGene(Chara c, Type? type=null)
Definition: DNA.cs:116
static SpawnList Get(string id, string parent=null, CardFilter filter=null)
Definition: SpawnList.cs:18
CardRow Select(int lv=-1, int levelRange=-1)
Definition: SpawnList.cs:139
void DestroyAll(Func< Thing, bool > funcExclude=null)

References Card.c_seed, Debug, ThingContainer.DestroyAll(), GenerateGene(), SpawnList.Get(), Card.LV, Card.MakeRefFrom(), SpawnList.Select(), Rand.SetSeed(), and Card.things.

Referenced by TraitGodStatue._OnUse(), and TraitGodStatue.OnChangeMaterial().

◆ GenerateRandomGene()

static Thing DNA.GenerateRandomGene ( int  lv = -1,
int  seed = -1 
)
inlinestatic

Definition at line 150 of file DNA.cs.

151 {
152 if (lv == -1)
153 {
155 }
157 CardRow r = SpawnList.Get("chara").Select(100);
158 Rand.SetSeed();
159 return GenerateGene(r, Type.Superior, lv, seed);
160 }
static Zone _zone
Definition: EClass.cs:21
override int ContentLv
Definition: Zone.cs:98

References EClass._zone, Zone.ContentLv, GenerateGene(), SpawnList.Get(), lv, seed, SpawnList.Select(), and Rand.SetSeed().

Referenced by Card.TryMakeRandomItem(), and DramaOutcome.upgrade_miscreation().

◆ GenerateWithGene()

void DNA.GenerateWithGene ( Type  _type,
Card  gene,
Chara  model = null 
)
inline

Definition at line 272 of file DNA.cs.

273 {
274 Generate(_type, model);
276 gene.elements.SetTo(10, 0);
277 }
string GetMaterialId(Type type)
Definition: DNA.cs:536
void Generate(Type _type, Chara model=null)
Definition: DNA.cs:279
void SetTo(int id, int v)

References Card.ChangeMaterial(), Card.elements, Generate(), GetMaterialId(), ElementContainer.SetTo(), and type.

Referenced by TraitCrafter.Craft(), and GenerateGene().

◆ GetDurationHour()

int DNA.GetDurationHour ( )
inline

Definition at line 547 of file DNA.cs.

548 {
549 return Mathf.Min(cost, 5000) * Mathf.Min(cost, 5000) / 2;
550 }

References cost.

Referenced by InvOwnerGene._OnProcess(), and TraitGene.WriteNote().

◆ GetInvalidAction()

Element DNA.GetInvalidAction ( Chara  c)
inline

Definition at line 688 of file DNA.cs.

689 {
690 for (int i = 0; i < vals.Count; i += 2)
691 {
692 Element element = Element.Create(vals[i], vals[i + 1]);
693 if (!(element.source.category == "ability"))
694 {
695 continue;
696 }
697 foreach (ActList.Item item in c.ability.list.items)
698 {
699 if (item.act.source.id == element.id)
700 {
701 return element;
702 }
703 }
704 }
705 return null;
706 }

References Chara.ability, Element.Create(), Element.id, item, ActList.items, CharaAbility.list, Element.source, and vals.

Referenced by InvOwnerGene._OnProcess(), AI_Fuck.Finish(), TraitGene.TrySetHeldAct(), and DramaOutcome.upgrade_miscreation().

◆ GetInvalidFeat()

Element DNA.GetInvalidFeat ( Chara  c)
inline

Definition at line 662 of file DNA.cs.

663 {
664 for (int i = 0; i < vals.Count; i += 2)
665 {
666 Element element = Element.Create(vals[i], vals[i + 1]);
667 if (c.IsPC && !CanRemove(c))
668 {
669 return element;
670 }
671 if (!(element.source.category == "feat"))
672 {
673 continue;
674 }
675 if (c.Evalue(element.id) < element.source.max)
676 {
677 Element orCreateElement = c.elements.GetOrCreateElement(element.id);
678 if (orCreateElement != null && orCreateElement.vLink == 0)
679 {
680 continue;
681 }
682 }
683 return element;
684 }
685 return null;
686 }
int Evalue(int ele)
Definition: Card.cs:2611
bool CanRemove(Chara c)
Definition: DNA.cs:251
Element GetOrCreateElement(Element ele)
int vLink
Definition: ELEMENT.cs:265

References CanRemove(), Element.Create(), Card.elements, Card.Evalue(), ElementContainer.GetOrCreateElement(), Element.id, Chara.IsPC, Element.source, vals, and Element.vLink.

Referenced by InvOwnerGene._OnProcess(), AI_Fuck.Finish(), TraitGene.TrySetHeldAct(), and DramaOutcome.upgrade_miscreation().

◆ GetMaterialId()

string DNA.GetMaterialId ( Type  type)
inline

Definition at line 536 of file DNA.cs.

537 {
538 return type switch
539 {
540 Type.Default => "jelly",
541 Type.Superior => "gold",
542 Type.Brain => "amethyst",
543 _ => "process",
544 };
545 }

References type.

Referenced by GenerateWithGene().

◆ GetRandomType()

Type DNA.GetRandomType ( )
inline

Definition at line 552 of file DNA.cs.

553 {
554 if (EClass.rnd(5) == 0)
555 {
556 return Type.Superior;
557 }
558 if (EClass.rnd(10) == 0)
559 {
560 return Type.Inferior;
561 }
562 return Type.Default;
563 }

References EClass.rnd().

Referenced by GenerateGene().

◆ GetText()

string DNA.GetText ( )
inline

Definition at line 565 of file DNA.cs.

566 {
567 string text = EClass.sources.cards.map.TryGetValue(id)?.GetName() ?? "???";
568 if (text == "*r")
569 {
570 text = "???";
571 }
572 return "gene".lang(text.ToTitleCase(), (cost == 0) ? "" : (cost.ToString() ?? ""));
573 }
Dictionary< string, CardRow > map
Definition: SourceCard.cs:9
SourceCard cards

References SourceManager.cards, cost, SourceCard.map, and EClass.sources.

Referenced by WindowCharaMini.Refresh(), and WindowChara.RefreshSkill().

◆ GetType()

static Type DNA.GetType ( string  idMat)
inlinestatic

Definition at line 525 of file DNA.cs.

526 {
527 return idMat switch
528 {
529 "jelly" => Type.Default,
530 "gold" => Type.Superior,
531 "amethyst" => Type.Brain,
532 _ => Type.Inferior,
533 };
534 }

Referenced by ActEffect.Proc().

◆ MakeSlimeFood()

void DNA.MakeSlimeFood ( Chara  c)
inline

Definition at line 708 of file DNA.cs.

709 {
710 int num = c.Evalue(6608) + 10;
711 for (int i = 0; i < vals.Count; i += 2)
712 {
713 Element element = Element.Create(vals[i], vals[i + 1]);
714 if ((element.source.category == "attribute" || element.source.category == "skill") && vals[i + 1] > num)
715 {
716 vals[i + 1] = num;
717 }
718 }
719 cost = 0;
720 }

References cost, Element.Create(), Card.Evalue(), Element.source, and vals.

Referenced by AI_Fuck.Finish().

◆ WriteNote()

void DNA.WriteNote ( UINote  n,
Chara  tg = null 
)
inline

Definition at line 575 of file DNA.cs.

576 {
577 if (slot >= 1)
578 {
579 n.AddText("NoteText_enc", "isGeneReqSlots".lang(slot.ToString() ?? ""), FontColor.Warning);
580 }
581 if (!CanRemove(tg))
582 {
583 n.AddText("NoteText_enc", "isPermaGene".lang(), FontColor.Warning);
584 }
585 n.Space(4);
586 if (type == Type.Brain)
587 {
588 SourceChara.Row row = EClass.sources.charas.map.TryGetValue(id);
589 if (row != null)
590 {
591 string key = row.tactics.IsEmpty(EClass.sources.tactics.map.TryGetValue(row.id)?.id ?? EClass.sources.tactics.map.TryGetValue(row.job)?.id ?? "predator");
592 n.AddText("NoteText_enc", "gene_info".lang(EClass.sources.tactics.map[key].GetName().ToTitleCase(), ""), FontColor.ButtonGeneral);
593 }
594 for (int i = 0; i < vals.Count; i += 2)
595 {
596 int num = vals[i];
597 int num2 = vals[i + 1];
598 FontColor color = ((num2 >= 0) ? FontColor.Good : FontColor.Bad);
599 string @ref = (num + 1).ToString() ?? "";
600 string text = "";
601 num2 = Mathf.Abs(num2 / 20) + 1;
602 text = text + "[" + "*".Repeat(Mathf.Clamp(num2, 1, 5)) + ((num2 > 5) ? "+" : "") + "]";
603 n.AddText("NoteText_enc", "gene_info_brain".lang(@ref, text), color);
604 }
605 return;
606 }
607 for (int j = 0; j < vals.Count; j += 2)
608 {
609 Element element = Element.Create(vals[j], vals[j + 1]);
610 string text2 = "";
611 int num3 = element.Value / 10;
612 FontColor color2 = FontColor.Good;
613 bool flag = false;
614 switch (element.source.category)
615 {
616 case "slot":
617 color2 = FontColor.Myth;
618 num3 = -1;
619 break;
620 case "feat":
621 color2 = FontColor.FoodMisc;
622 num3 = -1;
623 break;
624 case "ability":
625 color2 = FontColor.Topic2;
626 num3 = -1;
627 break;
628 default:
629 flag = true;
630 break;
631 }
632 if (num3 >= 0)
633 {
634 text2 = text2 + "[" + "*".Repeat(Mathf.Clamp(num3, 1, 5)) + ((num3 > 5) ? "+" : "") + "]";
635 }
636 if (flag)
637 {
638 text2 = text2 + " (" + element.Value + ")";
639 }
640 n.AddText("NoteText_enc", "gene_info".lang(element.Name.ToTitleCase(wholeText: true), text2), color2);
641 }
642 }
FontColor
Definition: FontColor.cs:2
virtual string Name
Definition: ELEMENT.cs:309
SourceChara charas
SourceTactics tactics
UIItem AddText(string text, FontColor color=FontColor.DontChange)
Definition: UINote.cs:113
void Space(int sizeY=0, int sizeX=1)
Definition: UINote.cs:62

References UINote.AddText(), CanRemove(), SourceManager.charas, Element.Create(), CardRow.id, SourceChara.Row.job, Element.Name, slot, Element.source, EClass.sources, UINote.Space(), SourceChara.Row.tactics, SourceManager.tactics, type, and vals.

Referenced by WindowCharaMini.Refresh(), WindowChara.RefreshSkill(), and TraitGene.WriteNote().

◆ WriteNoteExtra()

void DNA.WriteNoteExtra ( UINote  n,
Chara  tg 
)
inline

Definition at line 644 of file DNA.cs.

645 {
646 n.AddHeader("HeaderAdditionalTrait", "gene_hint");
647 _ = tg.c_genes;
648 int num = slot;
649 if (num > 1 && tg.HasElement(1237))
650 {
651 num--;
652 }
653 int num2 = tg.MaxGeneSlot - tg.CurrentGeneSlot;
654 int num3 = num2 - num;
655 int maxGeneSlot = tg.MaxGeneSlot;
656 n.AddText("gene_hint_slot".lang(num2.ToString() ?? "", num3.ToString() ?? "", maxGeneSlot.ToString() ?? ""), (num3 >= 0) ? FontColor.Good : FontColor.Bad);
657 int num4 = cost * tg.GeneCostMTP / 100;
658 int num5 = tg.feat - num4;
659 n.AddText("gene_hint_cost".lang(tg.feat.ToString() ?? "", num4 + ((num4 == cost) ? "" : ("(" + cost + ")")), num5.ToString() ?? ""), (num5 >= 0) ? FontColor.Good : FontColor.Bad);
660 }
int feat
Definition: Card.cs:375
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6122
int MaxGeneSlot
Definition: Chara.cs:1082
int CurrentGeneSlot
Definition: Chara.cs:1097
UIItem AddHeader(string text, Sprite sprite=null)
Definition: UINote.cs:79

References UINote.AddHeader(), UINote.AddText(), Card.c_genes, cost, Chara.CurrentGeneSlot, Card.feat, Card.HasElement(), Chara.MaxGeneSlot, and slot.

Referenced by InvOwnerGene.OnWriteNote(), and TraitGene.WriteNote().

Member Data Documentation

◆ bits

BitArray32 DNA.bits

Definition at line 26 of file DNA.cs.

Referenced by _OnSerializing().

◆ id

string DNA.id

Definition at line 18 of file DNA.cs.

◆ ints

int [] DNA.ints = new int[6]

Definition at line 21 of file DNA.cs.

Referenced by _OnDeserialized(), and _OnSerializing().

◆ vals

List<int> DNA.vals = new List<int>()

Property Documentation

◆ cost

int DNA.cost
getset

Definition at line 40 of file DNA.cs.

41 {
42 get
43 {
44 return ints[1];
45 }
46 set
47 {
48 ints[1] = value;
49 }
50 }

Referenced by Apply(), CalcCost(), Generate(), GetDurationHour(), GetText(), TraitGene.GetValue(), MakeSlimeFood(), InvOwnerGene.ShouldShowGuide(), TraitGene.TrySetHeldAct(), TraitGene.WriteNote(), and WriteNoteExtra().

◆ isManiGene

bool DNA.isManiGene
getset

Definition at line 88 of file DNA.cs.

89 {
90 get
91 {
92 return bits[0];
93 }
94 set
95 {
96 bits[0] = value;
97 }
98 }

◆ lv

int DNA.lv
getset

Definition at line 52 of file DNA.cs.

53 {
54 get
55 {
56 return ints[2];
57 }
58 set
59 {
60 ints[2] = value;
61 }
62 }

Referenced by Generate(), GenerateGene(), and GenerateRandomGene().

◆ seed

int DNA.seed
getset

Definition at line 64 of file DNA.cs.

65 {
66 get
67 {
68 return ints[3];
69 }
70 set
71 {
72 ints[3] = value;
73 }
74 }

Referenced by Generate(), GenerateGene(), and GenerateRandomGene().

◆ slot

int DNA.slot
getset

Definition at line 76 of file DNA.cs.

77 {
78 get
79 {
80 return ints[5];
81 }
82 set
83 {
84 ints[5] = value;
85 }
86 }

Referenced by _OnDeserialized(), InvOwnerGene._OnProcess(), CalcSlot(), Generate(), FoodEffect.Proc(), WriteNote(), and WriteNoteExtra().

◆ type

Type DNA.type
getset

Definition at line 28 of file DNA.cs.

29 {
30 get
31 {
32 return ints[0].ToEnum<Type>();
33 }
34 set
35 {
36 ints[0] = (int)value;
37 }
38 }

Referenced by InvOwnerGene._OnProcess(), Apply(), Generate(), GenerateGene(), GenerateWithGene(), GetMaterialId(), TraitGene.GetName(), Thing.MatchEncSearch(), FoodEffect.Proc(), and WriteNote().


The documentation for this class was generated from the following file: