Topic on User talk:Hautarche

Jump to navigation Jump to search

Trait miscellanies that accompanied formatting changes

4
Hautarche (talkcontribs)

TODOs: go over creepjoiner section, copy the Pyromaniac info to the relevant documents if that hasn't been done by someone else already, note down the 'starting possessions', and satisfy the request for info on genes that affect traits.

Most of the recent round of changes pertained to more consistent formatting or templatization of moodlets. I could not find a template for opinion thoughts - is there one? Also, other question, what is the correct front-facing formatting for thoughts with dynamic labels e.g. "Jealous of otherPersonName's bedroom" or "Wearing human leather apparelLabel"?

"Xenogenes count as one artificial body part" had to be noted down because the traits page was formerly ambiguous about this. You can figure this out pretty quickly by testing, and the relevant C# function is GeneUtility.AddedAndImplantedPartsWithXenogenesCount. Generally, several other non-formatting changes were also made to reduce ambiguity; an example also pertinent to Body Modders and Purists is the opinion of others based on their artificial parts/xenogenes, which did not specify how the opinion scaled with number of parts/xenogenes.

Body Purist luciferium stuff was sourced by testing.

Ascetic mood lessens as bedroom quality increases - observed via testing. Greedy was also observed purely via testing.

The 'Room stats#Levels of impressiveness' simply redirected to the Rooms page, so I replaced it with a more correct link 'Rooms#Impressiveness'.

All the new stuff for Pyromaniac was verified via testing. "Has incendiary weapon" technically triggers for any equipped weapon that meets one of the following criteria:

  • Is melee and deals extra flame damage (plasmasword and persona version)
  • Fires a projectile with the <ai_IsIncendiary> field set to true in its <projectile> field (this is true for all launchers, despite several of them logically not being incendiary weapons)
  • Fires a beam whose verb has true <ai_BeamIsIncendiary> in its props (no examples usable by colonists)
  • Grants any ability which has true <ai_IsIncendiary> (hellcat, incinerator)

However, that last point is conspicuously absent in the method Pawn.UpdatePyroVerbThought, which is the sole source of the "used flame weapon" thought. Does it make any sense that an EMP launcher is for this purpose an incendiary weapon and the INCINERATOR - a weapon that shoots GLORIOUS FIRE over a WIDE SWATHE OF TERRAIN - is not? No. But this is the world we live in. EDIT: incinerator's normal attack triggers it due to being a "beam" weapon - it's only the ability that doesn't. Hellcat rifle is still exempted

Bloodlust was just severely outdated. I checked the values involved, they were almost all wrong. Also, Bloodlust doesn't just trigger off of strangers, easily verifiable via testing (I had my test Bloodluster punch a colonist she crashlanded with to death, and let her watch the other crashlander get gunned down). We were also missing an organ harvesting mood bonus.

Food poisoning chance for eating corpses was removed from the Cannibal section because it misleadingly implies an inviolable rule that can be circumvented with the Strong Stomach gene.

Perfect Memory was duplicated, in a normal-people traits section and a creepjoiner section, misleadingly implying availability to regular humanlikes.

Tortured Artist is a trait I know *very* well, since it was the inspiration the second trait I ever modded into the game back in late 2022. I just forgot to put in the "mood-induced" clause here for some reason? If you want to test it, tweak TA's <mentalBreakInspirationGainChance> field to >=1 so that it should ALWAYS proc. The relevant code path is MentalState.RecoverFromState -> Trait.Notify_MentalStateEndedOn -> another method with the same name which it calls if and only if the 'causedByMood' bool (passed down by the mental state) is true.

Abrasive "2.3x" was NOT derived from testing/observation, but from the RandomSelectionWeight for slight's and insult's InteractionWorker. Both multiply the base chance by a method called NegativeInteractionUtility.NegativeInteractionChanceFactor, which multiplies the result by 2.3f if the prospective initiator is Abrasive.

Kind Words weighting similarly obtained via looking at the RandomSelectionWeight for kind words: 0 if inhumanized or lacking the non-suppressed Kind trait, 0.01 otherwise.

The "Specific value not listed in flavor text." annotation in the Base Mood traits section was removed due to its redundancy and lack of importance. It's true for any and every moodlet in the game I can think of, so it did not need to appear for just these four traits.

Sickly's random diseases work via a field called <randomDiseaseMtbDays>, which is only referenced by Pawn_HealthTracker.HealthTick. When the MTB that this field gates triggers, it finds the biome the pawn is currently in (or gets a random biome if somehow the pawn isn't in a biome), gets all incident defs of the DiseaseHuman category, and picks one weighted on their evaluations by the biome's BiomeDef.CommonalityOfDisease method. It then applies this incident specifically to the Sickly pawn.

Hautarche (talkcontribs)

Saw the request to re-institute some of the things from the huge change that got reverted a while back, including the gene table. I tried my hand at adding it back. It makes sense for it to be described after the traits are described, but I don't know if it's currently in the best position. Maybe it should be before the obsolete traits?

GeneDefs have both a <forcedTraits> field and a <suppressedTraits> field. These do exactly what their names indicate. Six traits use forcedTraits, but Pyrophobia is the sole user of suppressedTraits. The former six were covered by the prior gene table; the latter was not, I think, but is just as important to note here.

The trait un/suppression shenanigans arise from both modding experience with the gene system, experience with heavily modded playthroughs, and verification just now in a modless testing environment. Take three test pawns:

  • A Baseliner with the psychically sensitive or psychically hypersensitive trait
  • A Yttakin with the same trait
  • Another Yttakin with the same trait

Set the xenotype of each to a Hussar via dev tools (which will populate their xenogenes with the Hussar genes) or otherwise find a way to add the psychically deaf gene to each of them. Then set the xenotype of each to a Baseliner via dev tools (which will remove all of their xenogenes, but leave their endogenes untouched, which is an important detail because Yttakin genes are endogenous) or otherwise find a way to remove the psychically deaf gene from each of them.

This "issue" occurs a lot more in playthroughs with mods that add more trait-forcing genes - the one I wrote into the Traits page is essentially the only way this issue occurs in an unmodded game, since only the Psychically Deaf and Psychically Dull genes suppress each other and the same set of traits.

Hautarche (talkcontribs)

Info for trait mechanics section sourced from PawnGenerator.GenerateTraits, which is as the name indicates how pawns get their traits (aside from growth moments and forced trait custom scenario parts). The "traits from quests" step is actually more flexible than indicated: this is where the "ForcedTraits" parameter of the pawn generation request is processed, it's just that this parameter is only ever used for quests' forced traits in unmodded games.

I could not provide examples for certain steps because no examples exist for those steps using only unmodded content. As an example, a randomly assigned trait can't be 'Any that would disable a work type required by the pawn's "pawn kind"', but Pyromaniac is the only trait that disables a work tag (Firefighting) and there are no pawn kinds that require Firefighting.

Some assertions are easily testable (e.g. if you use dev mode to spawn mechanitor babies, they will have the Recluse trait despite being too young to ordinarily have traits), but others are not (e.g. the 500 tries thing, although I've discovered you CAN test it on accident: simply give a trait an incapability for Violence and eventually you'll get error logs that attest to 500 tries per trait slot). Again, the source for this info is PawnGenerator.GenerateTraits.

Hautarche (talkcontribs)

Okay, that's all the info that needs to be in the traits page, I think.

Starting possessions order of operations is sourced from StartingPawnUtility.GeneratePossessions. Since it occurs in a linear fashion and traits are the second-to-last step, most of the order of operations are pertinent to the Traits page. Ideally, however, most of this information would go to a page actually describing the starting pawn selection process... which does not exist as far as I can tell. Once it is created, I think most of this info should go there, and at most the Traits page will only need an abbreviated summary and/or link alluding to it. Possibly, even the info on which starting possessions each trait has can be relegated to that page, rather than awkwardly crowding out the trait tables with something that's basically trivia.

Reply to "Trait miscellanies that accompanied formatting changes"