Coma Rest Genes - KonradHeinser/EBSGFramework GitHub Wiki
Coma Rest Genes are a type of genes that act similar to Deathrest, but have a little more flexibility and usually don't require C# on your part. The most basic coma gene will include 1 GeneDef, 1 NeedDef, 3 HediffDefs (resting, interrupted, and exhausted), and a JobDef. You can also add a ThoughtDef
The gene contains almost all the information about how the basics of the coma rest function. While the EBSGFramework.Gene_Coma geneClass is a requirement, it can do all of the same things as the Hediff Adder. The coma information and the hediff information will need to me in separate modExtensions (EBSGFramework.ComaExtension for coma information, and EBSGFramework.EBSGExtension for the hediff adding).
A couple other important notes, causesNeed is required to link the gene to the need, and it is strongly recommended that you use the exclusion tag EBSG_Coma to make it not compatible with Deathrest and any other Coma Gene. While it probably wouldn't break the game when a player has both on the same pawn, and I've done some work to minimize known issues, it's better to be safe and just stop players from having multiple of them on the same pawn:
<geneClass>EBSGFramework.Gene_Coma</geneClass>
<causesNeed>InsertNeedDefNameHere</causesNeed>
<exclusionTags>
<li>EBSG_Coma</li>
</exclusionTags>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
</li>
</modExtensions>
Required ComaExtension stuff is listed below. Some of this won't have stuff to use until the next section, but it's still good to make a note:
- comaRestingHediff : The HediffDef to apply to the pawn when they start resting
- comaInterruptedHediff : The HediffDef to apply if the pawn is woken up too soon after starting their rest
- exhaustionHediff : The HediffDef to apply if the need reaches 0
- relatedJob : The JobDef to use when resting needs to start
- noun : What the rest is called. For example, Deathrest uses deathrest
- gerund : What term is used when the rest is occurring. For example, Deathrest uses deathresting
While the below things technically aren't required, it is still recommended that you set them where applicable:
- gainPerDayComatose : Default (0.2) : The rate the need is recovered while comatose. A rate of 0.2 means it takes 5 days to go from completely empty to full
- minComaTicks : Default (30000) : The minimum amount of time the pawn needs to be comatose to avoid the comaInterruptedHediff. While not enforced, this should never take longer than it would take to go from empty to full on the need
- usesBuildings : Default (True) : If don't plan on making special buildings tied to this gene, then it is recommended you set this to False to stop the gene from trying to look for buildings and to hide the related gizmo
- baseBuildingMax : Default (1) : The base number of special buildings the pawn can have linked to them. Not checked if usesBuildings is False
- wakeCommandTexPath : Default (UI/Gizmos/Wake) : The icon used for the wake gizmo
- autoWakeTexCommandPath : Default (UI/Gizmos/DeathrestAutoWake) : The icon used for the autowake gizmo
Remaining stuff:
- needBedOutOfSunlight : Default (False) : When true, this acts similarly to Deathrest where the pawn will be woken up/can't go to sleep when
- restingMote : Mote created while the pawn is comatose
- chamberName : Default ({noun} chamber) : Normally this throws the string that you put for noun in front of the word chamber, but you can overwrite it. This is only applicable if useBuildings is not False
- fallStat : The StatDef that multiplies how quickly the need falls
- riseStat : The StatDef that affects both how quickly the need recovers while resting and the minimum amount of time they must rest
At this point we need to take care of the remaining basics, starting with the need. Most of it is just standard NeedDef stuff, with the exception of the class and a modExtension that links it back to the gene. You can copy paste this example and tweak stuff to your preference:
<NeedDef>
<defName>Hibernation</defName>
<label>hibernation</label>
<needClass>EBSGFramework.Need_ComaGene</needClass>
<description>.</description>
<baseLevel>0.01</baseLevel>
<fallPerDay>0.05</fallPerDay>
<listPriority>600</listPriority>
<major>true</major>
<minIntelligence>ToolUser</minIntelligence>
<onlyIfCausedByGene>true</onlyIfCausedByGene>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>Hibernation</relatedGene>
</li>
</modExtensions>
</NeedDef>
The JobDef requires even less than the need def. The only things that are absolutely required are the driverClass and the coma extension linking to the gene. This can be copy pasted for your own use, with the defName and reportString being freely changeable
<JobDef>
<defName>Hibernate</defName>
<driverClass>EBSGFramework.JobDriver_GeneComa</driverClass>
<reportString>hibernating.</reportString>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>Hibernation</relatedGene>
</li>
</modExtensions>
</JobDef>
For the hediff defs, I won't be making any code here because there isn't anything special with them. The gene itself keeps track of what hediffs are correct, and handles adding and removing them. Almost everything else involving the hediffs are standard hediff things though, so you can set stat offsets and comps like normal.
The only notes I have are that all three should only have 1 stage, and the comaRestingHediff should set the consciousness max to 0.1 to ensure the pawn doesn't start trying to run around. It should also have isBad and everCurableByItem set to false to be extra safe. Neither of us expect people to try to use a healer serum on a coma resting pawn, but tempting fate is ill advised.
If you want a ThoughtDef associated with exhaustion, you can use the vanilla ThoughtWorker_Hediff workerClass on a thought to link a thought to that hediff. I've added an example of this below:
<ThoughtDef>
<defName>HibernationExhaustion</defName>
<workerClass>ThoughtWorker_Hediff</workerClass>
<validWhileDespawned>true</validWhileDespawned>
<hediff>HibernationExhaustion</hediff>
<stages>
<li>
<label>exhaustion</label>
<description>.</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
This example creates a hibernation type gene that forces a pawn to go to sleep for an entire day or two
<GeneDef>
<defName>Hibernation</defName>
<label>hibernation</label>
<description>Carriers of this gene must regularly hibernate for two full days so their body's natural cycle can continue without issue.</description>
<iconPath>UI/Icons/Genes/Gene_HairColor</iconPath>
<displayCategory>Miscellaneous</displayCategory>
<geneClass>EBSGFramework.Gene_Coma</geneClass>
<causesNeed>Hibernation</causesNeed>
<exclusionTags>
<li>EBSG_Coma</li>
</exclusionTags>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedNeed>Hibernation</relatedNeed>
<comaRestingHediff>Hibernation</comaRestingHediff>
<comaInterruptedHediff>InterruptedHibernation</comaInterruptedHediff>
<exhaustionHediff>HibernationExhaustion</exhaustionHediff>
<gainPerDayComatose>0.5</gainPerDayComatose> <!--Takes 2 days to go from 0 to full-->
<minComaTicks>60000</minComaTicks> <!--Must rest for at least one day or suffer the interrupted hediff-->
<!--Because no buildings have been made for this gene, we can tell the code to ignore any building related things.
If you do have buildings, the you won't need the usesBuildings line at all because the code assumes there are buildings by default-->
<usesBuildings>False</usesBuildings>
<noun>hibernation</noun> <!--What the coma state is called-->
<gerund>hibernating</gerund> <!--Term for entering the state-->
<relatedJob>Hibernate</relatedJob>
<chamberName>Hibernation cave</chamberName> <!--When usesBuildings is False, this is ignored-->
</li>
</modExtensions>
</GeneDef>
<NeedDef>
<defName>Hibernation</defName>
<label>hibernation</label>
<needClass>EBSGFramework.Need_ComaGene</needClass>
<description>People with the hibernation gene must hibernate every quadrum. While hibernating, the pawn will be sleeping and their wounds will heal slightly faster than they would normally.</description>
<baseLevel>0.01</baseLevel>
<fallPerDay>0.05</fallPerDay> <!--Requires hibernation every 20 days-->
<listPriority>600</listPriority>
<major>true</major>
<minIntelligence>ToolUser</minIntelligence>
<onlyIfCausedByGene>true</onlyIfCausedByGene>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>Hibernation</relatedGene>
</li>
</modExtensions>
</NeedDef>
<HediffDef>
<defName>Hibernation</defName>
<label>hibernating</label>
<description>A deep coma-like sleep that lasts several days and restores the body's resources.</description>
<everCurableByItem>false</everCurableByItem>
<isBad>false</isBad>
<recordDownedTale>false</recordDownedTale>
<defaultLabelColor>(149, 189, 252)</defaultLabelColor>
<stages>
<li>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0.1</setMax>
</li>
</capMods>
<statFactors>
<InjuryHealingFactor>1.5</InjuryHealingFactor>
<ImmunityGainSpeed>1.5</ImmunityGainSpeed>
</statFactors>
</li>
</stages>
</HediffDef>
<HediffDef>
<defName>InterruptedHibernation</defName>
<label>interrupted hibernation</label>
<description>Hibernation was interrupted, disrupting the natural cycle of this pawn's body. They will be sick for days while it tries to recover.</description>
<hediffClass>HediffWithComps</hediffClass>
<makesSickThought>true</makesSickThought>
<defaultLabelColor>(0.9, 1.0, 0.35)</defaultLabelColor>
<initialSeverity>0.001</initialSeverity>
<comps>
<li Class="HediffCompProperties_Disappears">
<disappearsAfterTicks>300000</disappearsAfterTicks>
<showRemainingTime>true</showRemainingTime>
</li>
</comps>
<stages>
<li>
<capMods>
<li>
<capacity>Consciousness</capacity>
<postFactor>0.8</postFactor>
</li>
<li>
<capacity>Moving</capacity>
<postFactor>0.9</postFactor>
</li>
<li>
<capacity>Manipulation</capacity>
<postFactor>0.9</postFactor>
</li>
</capMods>
</li>
</stages>
</HediffDef>
<HediffDef>
<defName>HibernationExhaustion</defName>
<label>hibernation exhaustion</label>
<description>This person desperately needs to hibernate so their body can recover from its fatigue.</description>
<defaultLabelColor>(0.9, 1.0, 0.35)</defaultLabelColor>
<stages>
<li>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0.5</setMax>
</li>
</capMods>
<statFactors>
<InjuryHealingFactor>0.9</InjuryHealingFactor>
</statFactors>
</li>
</stages>
</HediffDef>
<JobDef>
<defName>Hibernate</defName>
<driverClass>EBSGFramework.JobDriver_GeneComa</driverClass>
<reportString>hibernating.</reportString>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>Hibernation</relatedGene>
</li>
</modExtensions>
</JobDef>
<ThoughtDef>
<defName>HibernationExhaustion</defName>
<workerClass>ThoughtWorker_Hediff</workerClass>
<validWhileDespawned>true</validWhileDespawned>
<hediff>HibernationExhaustion</hediff>
<stages>
<li>
<label>exhaustion</label>
<description>It's been too long since I've hibernated. I can feel my thoughts getting sluggish.</description>
<baseMoodEffect>-10</baseMoodEffect>
</li>
</stages>
</ThoughtDef>
In some cases you may want to expand the coma rest gene to have special buildings similar to Deathrest. The first step to doing this is to make a special bed for the gene. This is required because all other buildings for this gene will only try to activate if the pawn is sleeping in a special bed in the same room. This will not remove the pawn's ability to coma rest in a normal bed.
The first step is making a bed, which for the most part you can just copy from any other bed that only accepts one person, including the Deathrest Casket. This bed will have two additional comps and an optional placeworker attached to it to make it interact with other things properly.
GeneticBed allows the bed to act like a bed, with the addition of ways to restrict what genetics someone must have to sleep in the bed. It has all the same stuff available as anything else with CompAssignableToPawn_Bed:
- anyOfGenes : List of GeneDefs that the pawn must have at least one of to be assigned to the bed
- allOfGenes : List of GeneDefs that the pawn must have all of to be assigned to the bed
- noneOfGenes : List of GeneDefs that the pawn must have all of to be assigned to the bed
Most common use of this comp when used for Coma Rest Genes is adding any coma types that you want to be available for this be in the anyOfGenes category:
<li Class="EBSGFramework.CompProperties_GeneticBed">
<anyOfGenes>
<li>InsertComaGeneDefNameHere</li>
</anyOfGenes>
</li>
ComaBindable is the comp that actually interacts with the Coma Rest Gene. It handles most of the things related to the rest portion:
<li Class="EBSGFramework.CompProperties_ComaBindable">
<relatedGenes>
<li>Hibernation</li>
</relatedGenes>
</li>
ComaBindable options:
-
relatedGenes : Required list of GeneDefs that point the building to the right pawns. This will usually only have one item on it, but it's in list form for those who want to create multiple xenotypes that use a variety of coma rest genes, but have overlap on the buildings used
-
stackLimit : Default (1) : The limit of how many of this building can connect
-
unbindTexPath : Default (UI/Gizmos/DeathrestAutoWake) : The icon used for the unbind gizmo. The unbind gizmo gives players an easy way to unbind a building from a pawn without any weird trickery
-
countsTowardsBuildingLimit : Default (True) : Determines whether this building contributes to the capacity listed by the gene. Beds should usually have this set to False, but it can also be toggled for any other building that you want attaching to the bed
-
displayTimeActive : Default (True) : Shows how much of the rest the building has been attached for. The building must be attached for at least 75% of the rest for the hediff to be applied
-
comaRestEffectivenessFactor : Default (1) : Impacts how quickly the rest progresses. A value of 1 means the building doesn't impact the rate, and a value of 2 doubles the rate
-
hediffToApply : The HediffDef to apply to the pawn when the rest is over. Additive stacking with other buildings
-
severity : Default (1) : The severity of the hediffToApply to set/add
-
soundWorking : The SoundDef sustained while resting
-
soundStart : The SoundDef played when the coma starts
-
soundEnd : The SoundDef played when the coma ends
-
connectionLinePath : This only applies for non-bed buildings, and must be set on those buildings instead. Requires a path linking to a non-directional texture. This tries to draw a texture from the center of the building to the bed the pawn is sleeping in. Deathrest buildings use Other/DeathrestBuildingConnection
The EBSGFramework.PlaceWorker_DrawLinesToComaRestBuildings placeWorker will draw lines between the building someone is trying to place and partner buildings in the same room that has at least one related gene in common. If it is a bed, it will link to non-beds, and if it is a non-bed, it will link to beds. It is not required, so if you are noticing performance issues with your buildings caused while people are trying to build them, it can be safely ignored:
<placeWorkers>
<li>EBSGFramework.PlaceWorker_DrawLinesToComaRestBuildings</li>
</placeWorkers>
Buildings other than the bed use the same CompBindable and placeWorker as the bed. The only common differences between them and the bed when it comes to the CompBindable is that they don't usually set countsTowardsBuildingLimit to false, and they can make use of the connectionLinePath thing mentioned at the bottom of the list
The hediff that the buildings apply to the pawn don't require anything special because the gene will handle applying them when the rest ends, and removes them when the next rest begins if the pawn still has any of them.
At the moment there's only one method for players to increase the building capacity of a gene beyond the base, and that is through a comp in a usable item. This comp has two tags, offset and gene, and will require that the user has the gene to be able to use the item. For a more complete example check out the defs at the bottom of the page:
<comps>
<li Class="EBSGFramework.CompProperties_UseEffectOffsetComaCapacity">
<offset>1</offset>
<gene>InsertComaGeneDefNameHere</gene>
</li>
</comps>
Now that you have a special bed for pawns to sleep in, the game will start to recognize special coma rest chambers when rooms are populated with the related furniture. This is important for two reasons. First, you can now use chamberName in your gene if you don't like the name it generates by default, and second, you can now create a thought that triggers any time the pawn finishes resting in one of these chambers.
This ThoughtDef must use the EBSGFramework.ThoughtWorker_ComaRestChamber workerClass, a ComaExtension with the related gene and must have 11 stages. The first stage is an outdoors stage, which only triggers for those who are not considered wild, or if the stage gives a positive mood effect. The remaining stages are based on room quality, with the second stage being an awful chamber, the third stage being a dull chamber, all the way up to wondrous. If you want to skip a stage set IsNull="True" for the stage:
Create a null stage:
<li IsNull="True" />
The worker and extension:
<workerClass>EBSGFramework.ThoughtWorker_ComaRestChamber</workerClass>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>InsertComaGeneDefNameHere</relatedGene>
</li>
</modExtensions>
These examples demonstrate everything described in this section, namely a special bed, a buff giver, a building capacity changer, and a thought about the resting chamber. These are all extensions of the previous example, so if you want to try copy pasting them into a file for your own experimentation you can. Just make sure to remove the usesBuildings line on the gene so it can properly keep track of buildings:
<ThingDef ParentName="FurnitureWithQualityBase">
<defName>HibernationCasket</defName>
<label>hibernation casket</label>
<description>An enclosed med-casket that accelerates the process of hibernation. It can connect to other devices which confer additional bonuses on the hibernator. The number of devices that can connect depends on the person's hibernation capacity, which can be seen by selecting them.\n\nOnly those with the hibernation gene can use the hibernation casket.</description>
<thingClass>Building_Bed</thingClass>
<tickerType>Rare</tickerType>
<fillPercent>0.4</fillPercent>
<pathCost>42</pathCost>
<drawGUIOverlay>true</drawGUIOverlay>
<canOverlapZones>false</canOverlapZones>
<passability>PassThroughOnly</passability>
<defaultPlacingRot>South</defaultPlacingRot>
<thingCategories Inherit="False">
<li>BuildingsMisc</li>
</thingCategories>
<graphicData>
<texPath>Things/Building/Misc/DeathrestCasket/DeathrestCasket</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(2,2)</drawSize>
</graphicData>
<building>
<bed_showSleeperBody>true</bed_showSleeperBody>
<ai_chillDestination>false</ai_chillDestination>
<bed_healPerDay>4</bed_healPerDay>
<bed_canBeMedical>false</bed_canBeMedical>
<bed_DisplayOwnerType>false</bed_DisplayOwnerType>
<bed_DisplayOwnersInInspectString>false</bed_DisplayOwnersInInspectString>
<bed_countsForBedroomOrBarracks>false</bed_countsForBedroomOrBarracks>
<buildingTags>
<li>Bed</li>
<li>Biotech</li>
</buildingTags>
<relatedBuildCommands>
<li>GlucosoidTuner</li>
</relatedBuildCommands>
</building>
<designationCategory>Biotech</designationCategory>
<uiOrder>2000</uiOrder>
<statBases>
<MaxHitPoints>200</MaxHitPoints>
<WorkToBuild>2500</WorkToBuild>
<Mass>50</Mass>
<Flammability>0.5</Flammability>
<Beauty>5</Beauty>
<BedRestEffectiveness>1</BedRestEffectiveness>
<Comfort>0.75</Comfort>
<ImmunityGainSpeedFactor>1.07</ImmunityGainSpeedFactor>
<SurgerySuccessChanceFactor>1</SurgerySuccessChanceFactor>
</statBases>
<size>(1,2)</size>
<costList>
<Steel>100</Steel>
<ComponentIndustrial>3</ComponentIndustrial>
</costList>
<comps>
<li Class="EBSGFramework.CompProperties_GeneticBed">
<drawAssignmentOverlay>false</drawAssignmentOverlay>
<anyOfGenes>
<li>Hibernation</li>
</anyOfGenes>
</li>
<li Class="CompProperties_Power">
<compClass>CompPowerTrader</compClass>
<basePowerConsumption>100</basePowerConsumption>
<idlePowerDraw>0</idlePowerDraw>
<alwaysDisplayAsUsingPower>true</alwaysDisplayAsUsingPower>
</li>
<li Class="CompProperties_Flickable"/>
<li Class="EBSGFramework.CompProperties_ComaBindable">
<stackLimit>1</stackLimit>
<countsTowardsBuildingLimit>false</countsTowardsBuildingLimit>
<comaRestEffectivenessFactor>1.1</comaRestEffectivenessFactor>
<displayTimeActive>false</displayTimeActive>
<soundStart>DeathrestCasket_Enter</soundStart>
<soundEnd>DeathrestCasket_Exit</soundEnd>
<relatedGenes>
<li>Hibernation</li>
</relatedGenes>
</li>
</comps>
<placeWorkers>
<li>EBSGFramework.PlaceWorker_DrawLinesToComaRestBuildings</li>
</placeWorkers>
</ThingDef>
<ThingDef ParentName="BuildingBase">
<defName>GlucosoidTuner</defName>
<label>glucosoid tuner</label>
<description>This device allows the hibernating pawn to move faster after hibernating. It pumps the body with extra muscle-signaling factors while cleaning waste products from muscle tissue. The effect lasts until the individual hibernates again. It must be connected to a hibernation casket to function.</description>
<graphicData>
<texPath>Things/Building/Misc/GlucosoidPump/GlucosoidPump</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(1,2)</drawSize>
<shadowData>
<volume>(0.9, 0.3, 1.8)</volume>
</shadowData>
<damageData>
<rect>(0.1,0.1,0.9,1.8)</rect>
</damageData>
</graphicData>
<castEdgeShadows>true</castEdgeShadows>
<fillPercent>0.4</fillPercent>
<pathCost>42</pathCost>
<tickerType>Normal</tickerType>
<canOverlapZones>false</canOverlapZones>
<passability>PassThroughOnly</passability>
<defaultPlacingRot>South</defaultPlacingRot>
<designationCategory>Biotech</designationCategory>
<altitudeLayer>Building</altitudeLayer>
<uiOrder>2000</uiOrder>
<drawerType>MapMeshAndRealTime</drawerType>
<minifiedDef>MinifiedThing</minifiedDef>
<thingCategories Inherit="False">
<li>BuildingsMisc</li>
</thingCategories>
<descriptionHyperlinks>
<ThingDef>HibernationCasket</ThingDef>
<HediffDef>GlucosoidRush</HediffDef>
</descriptionHyperlinks>
<building>
<relatedBuildCommands>
<li>HibernationCasket</li>
</relatedBuildCommands>
<buildingTags>
<li>Biotech</li>
</buildingTags>
</building>
<statBases>
<MaxHitPoints>200</MaxHitPoints>
<WorkToBuild>4000</WorkToBuild>
<Mass>50</Mass>
<Flammability>0.4</Flammability>
</statBases>
<size>(1,2)</size>
<costList>
<Steel>150</Steel>
<ComponentIndustrial>6</ComponentIndustrial>
</costList>
<constructionSkillPrerequisite>4</constructionSkillPrerequisite>
<comps>
<li Class="CompProperties_Power">
<compClass>CompPowerTrader</compClass>
<basePowerConsumption>100</basePowerConsumption>
<idlePowerDraw>0</idlePowerDraw>
<alwaysDisplayAsUsingPower>true</alwaysDisplayAsUsingPower>
</li>
<li Class="CompProperties_Flickable"/>
<li Class="EBSGFramework.CompProperties_ComaBindable">
<stackLimit>4</stackLimit>
<hediffToApply>GlucosoidTuned</hediffToApply>
<soundStart>GlucosoidPump_Start</soundStart>
<soundEnd>GlucosoidPump_Stop</soundEnd>
<soundWorking>GlucosoidPump_Ambience</soundWorking>
<connectionLinePath>Other/DeathrestBuildingConnection</connectionLinePath>
<relatedGenes>
<li>Hibernation</li>
</relatedGenes>
</li>
</comps>
<placeWorkers>
<li>EBSGFramework.PlaceWorker_DrawLinesToComaRestBuildings</li>
</placeWorkers>
</ThingDef>
<HediffDef>
<defName>GlucosoidTuned</defName>
<label>glucosoid tuned</label>
<description>Move speed is increased because this person used a glucosoid tuner while hibernating. This effect lasts until the next hibernation.</description>
<isBad>false</isBad>
<initialSeverity>1</initialSeverity>
<defaultLabelColor>(169, 224, 155, 255)</defaultLabelColor>
<extraTooltip>Lasts until the next hibernation.</extraTooltip>
<descriptionHyperlinks>
<ThingDef>GlucosoidTuner</ThingDef>
</descriptionHyperlinks>
<stages>
<li>
<multiplyStatChangesBySeverity>true</multiplyStatChangesBySeverity>
<statFactors>
<MoveSpeed>1.12</MoveSpeed>
</statFactors>
</li>
</stages>
</HediffDef>
<ThingDef ParentName="ResourceBase">
<defName>HibernationCapacitySerum</defName>
<label>hibernation capacity serum</label>
<description>A serum that permanently increases the number of hibernation buildings a person can connect to during hibernation.\n\nThe serum can only be ingested by individuals with the hibernation gene.</description>
<descriptionHyperlinks>
<ThingDef>HibernationCasket</ThingDef>
<ThingDef>GlucosoidTuner</ThingDef>
</descriptionHyperlinks>
<stackLimit>10</stackLimit>
<graphicData>
<texPath>Things/Item/Resource/DeathrestCapacitySerum</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<statBases>
<MaxHitPoints>60</MaxHitPoints>
<MarketValue>1000</MarketValue>
<DeteriorationRate>5</DeteriorationRate>
<Mass>0.50</Mass>
<Flammability>0.7</Flammability>
</statBases>
<thingCategories>
<li>Drugs</li>
</thingCategories>
<comps>
<li Class="CompProperties_Usable">
<useJob>UseArtifact</useJob>
<useLabel>Inject {0_label}</useLabel>
<showUseGizmo>true</showUseGizmo>
</li>
<li Class="EBSGFramework.CompProperties_UseEffectOffsetComaCapacity">
<offset>1</offset>
<gene>Hibernation</gene>
</li>
<li Class="CompProperties_UseEffectPlaySound">
<soundOnUsed>DeathrestCapacitySerum_Consume</soundOnUsed>
</li>
<li Class="CompProperties_UseEffectDestroySelf" />
</comps>
<thingSetMakerTags>
<li>RewardStandardHighFreq</li>
</thingSetMakerTags>
</ThingDef>
<ThoughtDef>
<defName>HibernationChamber</defName>
<workerClass>EBSGFramework.ThoughtWorker_ComaRestChamber</workerClass>
<validWhileDespawned>true</validWhileDespawned>
<stages>
<li>
<label>hibernated outside</label>
<description>I had to hibernate outdoors. It was awful.</description>
<baseMoodEffect>-4</baseMoodEffect>
</li>
<li>
<label>awful hibernation chamber</label>
<description>I had to hibernate in an awful chamber.</description>
<baseMoodEffect>-4</baseMoodEffect>
</li>
<li IsNull="True" /> <!-- dull -->
<li IsNull="True" /> <!-- mediocre -->
<li>
<label>decent hibernation chamber</label>
<description>I hibernated in a decent chamber.</description>
<baseMoodEffect>2</baseMoodEffect>
</li>
<li>
<label>good hibernation chamber</label>
<description>I hibernated in a slightly impressive chamber. It was nice.</description>
<baseMoodEffect>3</baseMoodEffect>
</li>
<li>
<label>great hibernation chamber</label>
<description>I hibernated in an impressive chamber. I feel rejuvenated.</description>
<baseMoodEffect>4</baseMoodEffect>
</li>
<li>
<label>excellent hibernation chamber</label>
<description>I hibernated in a very impressive chamber. I feel amazing.</description>
<baseMoodEffect>5</baseMoodEffect>
</li>
<li>
<label>exceptional hibernation chamber</label>
<description>I hibernated in an extremely impressive chamber. It was glorious.</description>
<baseMoodEffect>6</baseMoodEffect>
</li>
<li>
<label>unbelievable hibernation chamber</label>
<description>I hibernated in an unbelievably impressive chamber. It was spectacular.</description>
<baseMoodEffect>7</baseMoodEffect>
</li>
<li>
<label>wondrous hibernation chamber</label>
<description>I hibernated in such a luxurious chamber! It was wondrous.</description>
<baseMoodEffect>8</baseMoodEffect>
</li>
</stages>
<modExtensions>
<li Class="EBSGFramework.ComaExtension">
<relatedGene>Hibernation</relatedGene>
</li>
</modExtensions>
</ThoughtDef>