Elin Decompiled Documentation EA 23.320 Nyaightly Patch 1
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)
 
int GetBodySlot ()
 
void ReplaceBodySlot (int slot)
 
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:1897
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 }
250 c.Refresh();
251 if (reverse)
252 {
254 }
255 }
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
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1772
CharaBody body
Definition: Chara.cs:94
override bool IsPC
Definition: Chara.cs:630
void RemoveAllStances()
Definition: Chara.cs:10027
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:10289
void RefreshFaithElement()
Definition: Chara.cs:10603
CharaAbility ability
Definition: Chara.cs:428
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:61

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(), Chara.Refresh(), CharaBody.RefreshBodyParts(), Chara.RefreshFaithElement(), CharaAbility.Remove(), Chara.RemoveAllStances(), CharaBody.RemoveBodyPart(), Chara.SetFeat(), EClass.sources, type, vals, and ElementContainer.ValueWithoutLink().

◆ CalcCost()

void DNA.CalcCost ( )
inline

Definition at line 502 of file DNA.cs.

503 {
504 if (cost < 0)
505 {
506 cost = 0;
507 }
508 }

References cost.

Referenced by Generate().

◆ CalcSlot()

void DNA.CalcSlot ( )
inline

Definition at line 510 of file DNA.cs.

511 {
512 slot = 0;
513 for (int i = 0; i < vals.Count; i += 2)
514 {
515 Element element = Element.Create(vals[i], vals[i + 1]);
516 if (element.source.geneSlot < 0)
517 {
518 slot = 99;
519 }
520 if (element.source.geneSlot > slot)
521 {
522 slot = element.source.geneSlot;
523 }
524 }
525 if (slot < 0)
526 {
527 slot = 0;
528 }
529 }
SourceElement.Row source
Definition: ELEMENT.cs:280
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1121

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

Referenced by Generate().

◆ CanRemove()

bool DNA.CanRemove ( Chara  c)
inline

Definition at line 257 of file DNA.cs.

258 {
259 for (int i = 0; i < vals.Count; i += 2)
260 {
261 switch (vals[i])
262 {
263 case 1237:
264 case 1415:
265 return false;
266 case 1228:
267 case 1414:
268 if (c != null)
269 {
270 return !c.IsPC;
271 }
272 return true;
273 }
274 }
275 return true;
276 }

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:2103
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3194
DNA c_DNA
Definition: Card.cs:1933
string c_idRefCard
Definition: Card.cs:1777

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 285 of file DNA.cs.

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

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 278 of file DNA.cs.

279 {
280 Generate(_type, model);
282 gene.elements.SetTo(10, 0);
283 }
string GetMaterialId(Type type)
Definition: DNA.cs:542
void Generate(Type _type, Chara model=null)
Definition: DNA.cs:285
void SetTo(int id, int v)

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

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

◆ GetBodySlot()

int DNA.GetBodySlot ( )
inline

Definition at line 714 of file DNA.cs.

715 {
716 for (int i = 0; i < vals.Count; i += 2)
717 {
718 Element element = Element.Create(vals[i], vals[i + 1]);
719 if (element.source.category == "slot")
720 {
721 return element.id;
722 }
723 }
724 return -1;
725 }

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

Referenced by AI_Fuck.Finish().

◆ GetDurationHour()

int DNA.GetDurationHour ( )
inline

Definition at line 553 of file DNA.cs.

554 {
555 return Mathf.Min(cost, 5000) * Mathf.Min(cost, 5000) / 2;
556 }

References cost.

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

◆ GetInvalidAction()

Element DNA.GetInvalidAction ( Chara  c)
inline

Definition at line 694 of file DNA.cs.

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

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 668 of file DNA.cs.

669 {
670 for (int i = 0; i < vals.Count; i += 2)
671 {
672 Element element = Element.Create(vals[i], vals[i + 1]);
673 if (c.IsPC && !CanRemove(c))
674 {
675 return element;
676 }
677 if (!(element.source.category == "feat"))
678 {
679 continue;
680 }
681 if (c.Evalue(element.id) < element.source.max)
682 {
683 Element orCreateElement = c.elements.GetOrCreateElement(element.id);
684 if (orCreateElement != null && orCreateElement.vLink == 0)
685 {
686 continue;
687 }
688 }
689 return element;
690 }
691 return null;
692 }
int Evalue(int ele)
Definition: Card.cs:2688
bool CanRemove(Chara c)
Definition: DNA.cs:257
Element GetOrCreateElement(Element ele)
int vLink
Definition: ELEMENT.cs:267

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 542 of file DNA.cs.

543 {
544 return type switch
545 {
546 Type.Default => "jelly",
547 Type.Superior => "gold",
548 Type.Brain => "amethyst",
549 _ => "process",
550 };
551 }

References type.

Referenced by GenerateWithGene().

◆ GetRandomType()

Type DNA.GetRandomType ( )
inline

Definition at line 558 of file DNA.cs.

559 {
560 if (EClass.rnd(5) == 0)
561 {
562 return Type.Superior;
563 }
564 if (EClass.rnd(10) == 0)
565 {
566 return Type.Inferior;
567 }
568 return Type.Default;
569 }

References EClass.rnd().

Referenced by GenerateGene().

◆ GetText()

string DNA.GetText ( )
inline

Definition at line 571 of file DNA.cs.

572 {
573 string text = EClass.sources.cards.map.TryGetValue(id)?.GetName() ?? "???";
574 if (text == "*r")
575 {
576 text = "???";
577 }
578 return "gene".lang(text.ToTitleCase(), (cost == 0) ? "" : (cost.ToString() ?? ""));
579 }
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 531 of file DNA.cs.

532 {
533 return idMat switch
534 {
535 "jelly" => Type.Default,
536 "gold" => Type.Superior,
537 "amethyst" => Type.Brain,
538 _ => Type.Inferior,
539 };
540 }

Referenced by ActEffect.Proc().

◆ MakeSlimeFood()

void DNA.MakeSlimeFood ( Chara  c)
inline

Definition at line 738 of file DNA.cs.

739 {
740 int num = c.Evalue(6608) + 10;
741 for (int i = 0; i < vals.Count; i += 2)
742 {
743 Element element = Element.Create(vals[i], vals[i + 1]);
744 if ((element.source.category == "attribute" || element.source.category == "skill") && vals[i + 1] > num)
745 {
746 vals[i + 1] = num;
747 }
748 }
749 cost = 0;
750 }

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

Referenced by AI_Fuck.Finish().

◆ ReplaceBodySlot()

void DNA.ReplaceBodySlot ( int  slot)
inline

Definition at line 727 of file DNA.cs.

728 {
729 for (int i = 0; i < vals.Count; i += 2)
730 {
731 if (Element.Create(vals[i], vals[i + 1]).source.category == "slot")
732 {
733 vals[i] = slot;
734 }
735 }
736 }

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

Referenced by AI_Fuck.Finish().

◆ WriteNote()

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

Definition at line 581 of file DNA.cs.

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

651 {
652 n.AddHeader("HeaderAdditionalTrait", "gene_hint");
653 _ = tg.c_genes;
654 int num = slot;
655 if (num > 1 && tg.HasElement(1237))
656 {
657 num--;
658 }
659 int num2 = tg.MaxGeneSlot - tg.CurrentGeneSlot;
660 int num3 = num2 - num;
661 int maxGeneSlot = tg.MaxGeneSlot;
662 n.AddText("gene_hint_slot".lang(num2.ToString() ?? "", num3.ToString() ?? "", maxGeneSlot.ToString() ?? ""), (num3 >= 0) ? FontColor.Good : FontColor.Bad);
663 int num4 = cost * tg.GeneCostMTP / 100;
664 int num5 = tg.feat - num4;
665 n.AddText("gene_hint_cost".lang(tg.feat.ToString() ?? "", num4 + ((num4 == cost) ? "" : ("(" + cost + ")")), num5.ToString() ?? ""), (num5 >= 0) ? FontColor.Good : FontColor.Bad);
666 }
int feat
Definition: Card.cs:377
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6304
int MaxGeneSlot
Definition: Chara.cs:1091
int CurrentGeneSlot
Definition: Chara.cs:1106
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

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(), ReplaceBodySlot(), 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: