Gene Integration - Grim-/Talented GitHub Wiki

Gene System Documentation

Basic Resource Gene

The Gene_BasicResource class provides a foundation for genes that manage a resource value. It extends RimWorld's Gene_Resource and implements IGeneResourceDrain.

Key features:

  • Custom resource maximum based on stats
  • Configurable regeneration
  • Resource consumption tracking
  • Support for hemogen mechanics
<Talented.BasicResourceGeneDef>
    <defName>MyResourceGene</defName>
    <label>Resource Gene</label>
    <description>A gene with resource mechanics.</description>
    <geneClass>MyMod.Gene_CustomResource</geneClass>
    
    <!-- Resource Configuration -->
    <maxStat>MaxResourceStat</maxStat>
    <regenStat>ResourceRegenAmount</regenStat>
    <regenSpeedStat>ResourceRegenSpeed</regenSpeedStat>
    <regenTicks>1250</regenTicks>
    <costMult>ResourceCostMultiplier</costMult>
    
    <!-- Visual Settings -->
    <resourceName>MyResource</resourceName>
    <barColor>(3, 3, 138)</barColor>
    <resourceGizmoThresholds>
        <li>0.25</li>
        <li>0.5</li>
        <li>0.75</li>
    </resourceGizmoThresholds>
</Talented.BasicResourceGeneDef>

Talent Tree Gene

The Gene_TalentBase class extends Gene_BasicResource to add talent tree functionality. It manages:

  • Experience and leveling
  • Talent points
  • Active and passive skill trees
  • Event-based experience gain
<Talented.TalentedGeneDef>
    <defName>MyTalentGene</defName>
    <label>Talent Gene</label>
    <description>A gene with talent tree mechanics.</description>
    <geneClass>MyMod.Gene_CustomTalent</geneClass>

    <!-- Tree Configuration -->
    <MainTreeDef>Active_CustomTree</MainTreeDef>
    <SecondaryTreeDef>Passive_CustomTree</SecondaryTreeDef>
    
    <!-- Experience System -->
    <experienceFormula>Basic_LinearXP</experienceFormula>
    <experienceGainSettings>
        <experienceTypes>
            <!-- Combat XP -->
            <li Class="Talented.DamageExperienceTypeDef">
                <baseXP>10</baseXP>
                <damageFactor>0.1</damageFactor>
            </li>
            
            <!-- Skill XP -->
            <li Class="Talented.SkillExperienceTypeDef">
                <SkillDef>Shooting</SkillDef>
                <baseXP>2</baseXP>
            </li>
            
            <!-- Job XP -->
            <li Class="Talented.JobExperienceTypeDef">
                <SkillDef>HaulToCell</SkillDef>
                <baseXP>1</baseXP>
            </li>
            
            <!-- Verb XP -->
            <li Class="Talented.VerbExperienceTypeDef">
                <VerbClassName>Verb_BeatFire</VerbClassName>
                <baseXP>1</baseXP>
            </li>
        </experienceTypes>
    </experienceGainSettings>
    
    <!-- Resource Settings (inherited from BasicResourceGeneDef) -->
    <maxStat>MaxResourceStat</maxStat>
    <regenStat>ResourceRegenAmount</regenStat>
    <barColor>(3, 3, 138)</barColor>
    <resourceGizmoThresholds>
        <li>0.25</li>
        <li>0.5</li>
        <li>0.75</li>
    </resourceGizmoThresholds>
    
    <!-- UI Configuration -->
    <TabLabel>Talents</TabLabel>
</Talented.TalentedGeneDef>

Key Features

Basic Resource Gene

  • Resource value tracking
  • Stat-based maximum value
  • Configurable regeneration
  • Resource consumption with multipliers
  • Built-in gizmos for resource management
  • Hemogen system compatibility

Talent Tree Gene

  • Experience and leveling system (up to level 300)
  • Talent point management
  • Dual tree system (active and passive)
  • Event-driven experience gain
  • Debug commands for testing
  • Save/load functionality

Inheritance Structure

Gene_Resource (RimWorld Base)
    └── Gene_BasicResource
        └── Gene_TalentBase

Implementation Notes

  1. Basic Resource Gene

    • Override PostAdd() for initialization
    • Use Consume() and Restore() for resource management
    • Implement custom stat calculations as needed
    • Handle gizmo creation through GetGizmos()
  2. Talent Tree Gene

    • Override InitializeTrees() for custom tree setup
    • Implement OnExperienceGained() and OnLevelGained()
    • Use GainExperience() for XP rewards
    • Handle tree opening through OpenPassiveTree() and OpenActiveTree()
  3. Save Data

    • Both classes implement ExposeData() for save compatibility
    • Resource values, experience, levels, and tree states are saved
⚠️ **GitHub.com Fallback** ⚠️