mirror of
				https://github.com/amevarashi/RJW-Sexperience.git
				synced 2024-08-14 23:54:08 +00:00 
			
		
		
		
	1.0.1.8
This commit is contained in:
		
							parent
							
								
									183fb87f02
								
							
						
					
					
						commit
						b709cab584
					
				
					 52 changed files with 2003 additions and 360 deletions
				
			
		| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<Manifest>
 | 
			
		||||
	<identifier>RJW Sexperience</identifier>
 | 
			
		||||
	<version>1.0.1.7</version>
 | 
			
		||||
	<version>1.0.1.8</version>
 | 
			
		||||
	<dependencies>
 | 
			
		||||
	</dependencies>
 | 
			
		||||
	<incompatibleWith />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -1,10 +0,0 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
 | 
			
		||||
<Defs>
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>RapeVictim</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_RapeVictim</driverClass>
 | 
			
		||||
		<reportString>rapin' victim</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										61
									
								
								Defs/ThingDefs/Buildings_Cum.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Defs/ThingDefs/Buildings_Cum.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,61 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  
 | 
			
		||||
  <ThingDef ParentName="FurnitureWithQualityBase">
 | 
			
		||||
    <defName>CumBucket</defName>
 | 
			
		||||
    <label>cum bucket</label>
 | 
			
		||||
    <description>A bucket for collecting cums.</description>
 | 
			
		||||
    <thingClass>RJWSexperience.Building_CumBucket</thingClass>
 | 
			
		||||
    <graphicData>
 | 
			
		||||
      <texPath>Things/Item/CumBucket</texPath>
 | 
			
		||||
      <graphicClass>Graphic_Multi</graphicClass>
 | 
			
		||||
      <drawSize>(1,1)</drawSize>
 | 
			
		||||
    </graphicData>
 | 
			
		||||
    <altitudeLayer>Building</altitudeLayer>
 | 
			
		||||
    <passability>PassThroughOnly</passability>
 | 
			
		||||
    <fillPercent>0.4</fillPercent>
 | 
			
		||||
    <castEdgeShadows>true</castEdgeShadows>
 | 
			
		||||
    <pathCost>50</pathCost>
 | 
			
		||||
    <rotatable>false</rotatable>
 | 
			
		||||
    <stuffCategories>
 | 
			
		||||
      <li>Metallic</li>
 | 
			
		||||
      <li>Woody</li>
 | 
			
		||||
      <li>Stony</li>
 | 
			
		||||
    </stuffCategories>
 | 
			
		||||
    <costStuffCount>10</costStuffCount>
 | 
			
		||||
    <statBases>
 | 
			
		||||
      <MaxHitPoints>50</MaxHitPoints>
 | 
			
		||||
      <Mass>8</Mass>
 | 
			
		||||
      <WorkToBuild>200</WorkToBuild>
 | 
			
		||||
      <Flammability>1.0</Flammability>
 | 
			
		||||
      <Beauty>-5</Beauty>
 | 
			
		||||
    </statBases>
 | 
			
		||||
    <size>(1,1)</size>
 | 
			
		||||
    <building>
 | 
			
		||||
      <preventDeteriorationOnTop>true</preventDeteriorationOnTop>
 | 
			
		||||
      <ignoreStoredThingsBeauty>true</ignoreStoredThingsBeauty>
 | 
			
		||||
      <fixedStorageSettings>
 | 
			
		||||
        <filter>
 | 
			
		||||
          <disallowNotEverStorable>true</disallowNotEverStorable>
 | 
			
		||||
          <thingDefs>
 | 
			
		||||
            <li>GatheredCum</li>
 | 
			
		||||
          </thingDefs>
 | 
			
		||||
        </filter>
 | 
			
		||||
      </fixedStorageSettings>
 | 
			
		||||
      <defaultStorageSettings>
 | 
			
		||||
        <priority>Low</priority>
 | 
			
		||||
        <filter>
 | 
			
		||||
          <thingDefs>
 | 
			
		||||
            <li>GatheredCum</li>
 | 
			
		||||
          </thingDefs>
 | 
			
		||||
        </filter>
 | 
			
		||||
      </defaultStorageSettings>
 | 
			
		||||
    </building>
 | 
			
		||||
    <inspectorTabs>
 | 
			
		||||
      <li>ITab_Storage</li>
 | 
			
		||||
    </inspectorTabs>
 | 
			
		||||
    <surfaceType>Item</surfaceType>
 | 
			
		||||
    <canOverlapZones>false</canOverlapZones>
 | 
			
		||||
  </ThingDef>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  <ThingDef ParentName="OrganicProductBase">
 | 
			
		||||
  <ThingDef Name ="GatheredCum" ParentName="OrganicProductBase">
 | 
			
		||||
    <defName>GatheredCum</defName>
 | 
			
		||||
    <label>cum</label>
 | 
			
		||||
    <description>Gathered cum.</description>
 | 
			
		||||
| 
						 | 
				
			
			@ -24,13 +24,33 @@
 | 
			
		|||
      <Flammability>0.1</Flammability>
 | 
			
		||||
    </statBases>
 | 
			
		||||
    <ingestible>
 | 
			
		||||
      <foodType>Fluid, AnimalProduct</foodType>
 | 
			
		||||
      <preferability>DesperateOnlyForHumanlikes</preferability>
 | 
			
		||||
      	<foodType>Fluid, AnimalProduct</foodType>
 | 
			
		||||
      	<preferability>DesperateOnlyForHumanlikes</preferability>
 | 
			
		||||
	    <tasteThought>AteCum</tasteThought>
 | 
			
		||||
	    <specialThoughtAsIngredient>AteCum</specialThoughtAsIngredient>
 | 
			
		||||
	    <optimalityOffsetHumanlikes>-10</optimalityOffsetHumanlikes>
 | 
			
		||||
      <optimalityOffsetFeedingAnimals>-10</optimalityOffsetFeedingAnimals>
 | 
			
		||||
		<optimalityOffsetHumanlikes>-10</optimalityOffsetHumanlikes>
 | 
			
		||||
      	<optimalityOffsetFeedingAnimals>-10</optimalityOffsetFeedingAnimals>
 | 
			
		||||
		<outcomeDoers>
 | 
			
		||||
			<li Class="IngestionOutcomeDoer_GiveHediff">
 | 
			
		||||
				<hediffDef>CumTolerance</hediffDef>
 | 
			
		||||
				<severity>0.032</severity>
 | 
			
		||||
				<divideByBodySize>true</divideByBodySize>
 | 
			
		||||
			</li>
 | 
			
		||||
			<li Class="IngestionOutcomeDoer_OffsetPsyfocus">
 | 
			
		||||
				<offset>0.05</offset>
 | 
			
		||||
			</li>
 | 
			
		||||
		</outcomeDoers>
 | 
			
		||||
    </ingestible>
 | 
			
		||||
	<comps>
 | 
			
		||||
		<li Class="CompProperties_Drug">
 | 
			
		||||
			<chemical>Cum</chemical>
 | 
			
		||||
			<addictiveness>0.050</addictiveness>
 | 
			
		||||
			<minToleranceToAddict>0.8</minToleranceToAddict>
 | 
			
		||||
			<existingAddictionSeverityOffset>0.1</existingAddictionSeverityOffset>
 | 
			
		||||
			<needLevelOffset>1</needLevelOffset>
 | 
			
		||||
			<listOrder>30</listOrder>
 | 
			
		||||
		</li>
 | 
			
		||||
	</comps>
 | 
			
		||||
  </ThingDef>
 | 
			
		||||
  
 | 
			
		||||
	<ThingDef ParentName="PlantFoodRawBase">
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +77,16 @@
 | 
			
		|||
			<preferability>DesperateOnlyForHumanlikes</preferability>
 | 
			
		||||
	    <tasteThought>AteCum</tasteThought>
 | 
			
		||||
	    <specialThoughtAsIngredient>AteCum</specialThoughtAsIngredient>
 | 
			
		||||
		<outcomeDoers>
 | 
			
		||||
			<li Class="IngestionOutcomeDoer_GiveHediff">
 | 
			
		||||
				<hediffDef>CumTolerance</hediffDef>
 | 
			
		||||
				<severity>0.032</severity>
 | 
			
		||||
				<divideByBodySize>true</divideByBodySize>
 | 
			
		||||
			</li>
 | 
			
		||||
			<li Class="IngestionOutcomeDoer_OffsetPsyfocus">
 | 
			
		||||
				<offset>0.05</offset>
 | 
			
		||||
			</li>
 | 
			
		||||
		</outcomeDoers>
 | 
			
		||||
		</ingestible>
 | 
			
		||||
		<altitudeLayer>Item</altitudeLayer>
 | 
			
		||||
		<tickerType>Never</tickerType>
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +97,89 @@
 | 
			
		|||
		<thingCategories>
 | 
			
		||||
			<li>AnimalProductRaw</li>
 | 
			
		||||
		</thingCategories>
 | 
			
		||||
		<comps>
 | 
			
		||||
			<li Class="CompProperties_Drug">
 | 
			
		||||
				<chemical>Cum</chemical>
 | 
			
		||||
				<addictiveness>0.050</addictiveness>
 | 
			
		||||
				<minToleranceToAddict>0.8</minToleranceToAddict>
 | 
			
		||||
				<existingAddictionSeverityOffset>0.1</existingAddictionSeverityOffset>
 | 
			
		||||
				<needLevelOffset>1</needLevelOffset>
 | 
			
		||||
				<listOrder>30</listOrder>
 | 
			
		||||
			</li>
 | 
			
		||||
		</comps>
 | 
			
		||||
	</ThingDef>
 | 
			
		||||
 | 
			
		||||
	<ChemicalDef>
 | 
			
		||||
		<defName>Cum</defName>
 | 
			
		||||
		<label>cum</label>
 | 
			
		||||
		<addictionHediff>CumAddiction</addictionHediff>
 | 
			
		||||
		<toleranceHediff>CumTolerance</toleranceHediff>
 | 
			
		||||
	</ChemicalDef>
 | 
			
		||||
 | 
			
		||||
	<NeedDef ParentName="DrugAddictionNeedBase">
 | 
			
		||||
		<defName>Chemical_Cum</defName>
 | 
			
		||||
		<needClass>Need_Chemical</needClass>
 | 
			
		||||
		<label>cum</label>
 | 
			
		||||
		<description>Addicted to cum.</description>
 | 
			
		||||
		<listPriority>10</listPriority>
 | 
			
		||||
	</NeedDef>
 | 
			
		||||
 | 
			
		||||
	<HediffDef ParentName="DrugToleranceBase">
 | 
			
		||||
		<defName>CumTolerance</defName>
 | 
			
		||||
		<label>cum addictiveness</label>
 | 
			
		||||
		<description>cum addictiveness.</description>
 | 
			
		||||
		<isBad>false</isBad>
 | 
			
		||||
		<comps>
 | 
			
		||||
			<li Class="HediffCompProperties_SeverityPerDay">
 | 
			
		||||
				<severityPerDay>-0.020</severityPerDay>
 | 
			
		||||
			</li>
 | 
			
		||||
		</comps>
 | 
			
		||||
	</HediffDef>
 | 
			
		||||
 | 
			
		||||
	<HediffDef ParentName="AddictionBase">
 | 
			
		||||
		<defName>CumAddiction</defName>
 | 
			
		||||
		<hediffClass>Hediff_Addiction</hediffClass>
 | 
			
		||||
		<label>cum addiction</label>
 | 
			
		||||
		<description>cum addiction.</description>
 | 
			
		||||
		<causesNeed>Chemical_Cum</causesNeed>
 | 
			
		||||
		<comps>
 | 
			
		||||
			<li Class="HediffCompProperties_SeverityPerDay">
 | 
			
		||||
				<severityPerDay>-0.1</severityPerDay>
 | 
			
		||||
				<showDaysToRecover>true</showDaysToRecover>
 | 
			
		||||
			</li>
 | 
			
		||||
		</comps>
 | 
			
		||||
		<stages>
 | 
			
		||||
			<li>
 | 
			
		||||
				<statOffsets>
 | 
			
		||||
					<SexSatisfaction>0.25</SexSatisfaction>
 | 
			
		||||
					<SexFrequency>0.25</SexFrequency>
 | 
			
		||||
					<Vulnerability>0.5</Vulnerability>
 | 
			
		||||
				</statOffsets>
 | 
			
		||||
			</li>
 | 
			
		||||
			<li>
 | 
			
		||||
				<label>withdrawal</label>
 | 
			
		||||
				<statOffsets>
 | 
			
		||||
					<SexSatisfaction>0.25</SexSatisfaction>
 | 
			
		||||
					<SexFrequency>1.0</SexFrequency>
 | 
			
		||||
				</statOffsets>
 | 
			
		||||
			</li>
 | 
			
		||||
		</stages>
 | 
			
		||||
	</HediffDef>
 | 
			
		||||
 | 
			
		||||
	<ThoughtDef>
 | 
			
		||||
		<defName>CumWithdrawal</defName>
 | 
			
		||||
		<workerClass>ThoughtWorker_Hediff</workerClass>
 | 
			
		||||
		<hediff>CumAddiction</hediff>
 | 
			
		||||
		<validWhileDespawned>true</validWhileDespawned>
 | 
			
		||||
		<stages>
 | 
			
		||||
			<li>
 | 
			
		||||
				<visible>false</visible>
 | 
			
		||||
			</li>
 | 
			
		||||
			<li>
 | 
			
		||||
				<label>cum withdrawal</label>
 | 
			
		||||
				<description>I need it.</description>
 | 
			
		||||
				<baseMoodEffect>-5</baseMoodEffect>
 | 
			
		||||
			</li>
 | 
			
		||||
		</stages>
 | 
			
		||||
	</ThoughtDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,7 @@
 | 
			
		|||
  <RSNotHuman>not human</RSNotHuman>
 | 
			
		||||
  <RSNotAnimal>not animal</RSNotAnimal>
 | 
			
		||||
  <RSShouldCanFuck>capable of sex is required</RSShouldCanFuck>
 | 
			
		||||
  <RSTotalGatheredCum>Total gathered cum: </RSTotalGatheredCum>
 | 
			
		||||
 | 
			
		||||
  <RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
 | 
			
		||||
  <RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								LoadFolders.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								LoadFolders.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 | 
			
		||||
<loadFolders>
 | 
			
		||||
	<v1.3>
 | 
			
		||||
		<li>\</li>
 | 
			
		||||
		<li IfModActive="Ludeon.RimWorld.Ideology">RJWSexperience_Ideology</li>
 | 
			
		||||
	</v1.3>
 | 
			
		||||
</loadFolders>
 | 
			
		||||
| 
						 | 
				
			
			@ -26,9 +26,6 @@
 | 
			
		|||
	<Operation Class="PatchOperationAdd">
 | 
			
		||||
		<xpath>Defs/StatDef[defName="Vulnerability"]/parts</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<li Class="RJWSexperience.StatPart_GenderPrimacy">
 | 
			
		||||
				<modifier>0.5</modifier>
 | 
			
		||||
			</li>
 | 
			
		||||
			<li Class="RJWSexperience.StatPart_Slave">
 | 
			
		||||
				<factor>3.0</factor>
 | 
			
		||||
			</li>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										51
									
								
								RJWSexperience/RJWSexperience/Buildings.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								RJWSexperience/RJWSexperience/Buildings.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Verse;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class Building_CumBucket : Building_Storage
 | 
			
		||||
    {
 | 
			
		||||
        protected float storedcum = 0f;
 | 
			
		||||
        protected float totalgathered = 0f;
 | 
			
		||||
 | 
			
		||||
        public override void ExposeData()
 | 
			
		||||
        {
 | 
			
		||||
            Scribe_Values.Look(ref storedcum, "storedcum", storedcum, true);
 | 
			
		||||
            Scribe_Values.Look(ref totalgathered, "totalgathered", totalgathered, true);
 | 
			
		||||
            base.ExposeData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override string GetInspectString()
 | 
			
		||||
        {
 | 
			
		||||
            return Keyed.RSTotalGatheredCum + String.Format("{0:0.##}ml", totalgathered);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddCum(float amount)
 | 
			
		||||
        {
 | 
			
		||||
            AddCum(amount, VariousDefOf.GatheredCum);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddCum(float amount, ThingDef cumDef)
 | 
			
		||||
        {
 | 
			
		||||
            Thing cum = ThingMaker.MakeThing(cumDef);
 | 
			
		||||
            AddCum(amount, cum);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddCum(float amount, Thing cum)
 | 
			
		||||
        {
 | 
			
		||||
            storedcum += amount;
 | 
			
		||||
            totalgathered += amount;
 | 
			
		||||
            int num = (int)storedcum;
 | 
			
		||||
 | 
			
		||||
            cum.stackCount = num;
 | 
			
		||||
            if (cum.stackCount > 0) GenPlace.TryPlaceThing(cum, PositionHeld, Map, ThingPlaceMode.Direct, out Thing res);
 | 
			
		||||
            storedcum -= num;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										343
									
								
								RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										343
									
								
								RJWSexperience/RJWSexperience/Ideology/RJW_Patch_Ideo.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,343 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using HarmonyLib;
 | 
			
		||||
using rjw;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
using Verse;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience.Ideology
 | 
			
		||||
{
 | 
			
		||||
    [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")]
 | 
			
		||||
    public static class RJW_Patch_ChancePerHour_Bestiality
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float BestialityByPrecept(Ideo ideo)
 | 
			
		||||
        {
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f;
 | 
			
		||||
            else return 5f;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(ThinkNode_ChancePerHour_RapeCP), "MtbHours")]
 | 
			
		||||
    public static class RJW_Patch_ChancePerHour_RapeCP
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float RapeByPrecept(Ideo ideo)
 | 
			
		||||
        {
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f;
 | 
			
		||||
            else return 3f;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "is_rapist")]
 | 
			
		||||
    public static class RJW_Patch_is_rapist
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null && !pawn.IsSubmissive())
 | 
			
		||||
            {
 | 
			
		||||
                __result = __result || ideo.HasMeme(VariousDefOf.Rapist);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "is_zoophile")]
 | 
			
		||||
    public static class RJW_Patch_is_zoophile
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            {
 | 
			
		||||
                __result = __result || ideo.HasMeme(VariousDefOf.Zoophile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "is_necrophiliac")]
 | 
			
		||||
    public static class RJW_Patch_is_necrophiliac
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            {
 | 
			
		||||
                __result = __result || ideo.HasMeme(VariousDefOf.Necrophile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "Aftersex", new Type[] { typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool), typeof(xxx.rjwSextype) })]
 | 
			
		||||
    public static class RJW_Patch_Aftersex
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static void Postfix(Pawn pawn, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype)
 | 
			
		||||
        {
 | 
			
		||||
            //Log.Message("Aftersex " + pawn.Label + ": " + sextype);
 | 
			
		||||
            if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, usedCondom, rape, isCoreLovin, sextype);
 | 
			
		||||
            else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, usedCondom, false, isCoreLovin, sextype, true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static void AfterSexHuman(Pawn human, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype, bool isHumanReceiving = false)
 | 
			
		||||
        {
 | 
			
		||||
            string tag = "";
 | 
			
		||||
            if (human.IsIncest(partner))
 | 
			
		||||
            {
 | 
			
		||||
                tag += HETag.Incestous;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (partner.Dead)
 | 
			
		||||
            {
 | 
			
		||||
                Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithCorpse.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
            }
 | 
			
		||||
            else if (partner.IsAnimal())
 | 
			
		||||
            {
 | 
			
		||||
                if (isHumanReceiving && rape)
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.IsSlave) RapeEffectSlave(human);
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (xxx.is_human(partner))
 | 
			
		||||
            {
 | 
			
		||||
                if (rape)
 | 
			
		||||
                {
 | 
			
		||||
                    if (partner.IsSlave)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        RapeEffectSlave(partner);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (partner.IsPrisoner)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        partner.guest.will = Math.Max(0, partner.guest.will - 0.2f);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    HistoryEventDef sexevent = GetSexHistoryDef(sextype);
 | 
			
		||||
                    if (sexevent != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag + HETag.Gender(partner), human));
 | 
			
		||||
                        if (sexevent == VariousDefOf.PromiscuousSex)
 | 
			
		||||
                        {
 | 
			
		||||
                            human.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                            partner.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RapeEffectSlave(Pawn victim)
 | 
			
		||||
        {
 | 
			
		||||
            Need_Suppression suppression = victim.needs.TryGetNeed<Need_Suppression>();
 | 
			
		||||
            if (suppression != null)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff broken = victim.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken);
 | 
			
		||||
                if (broken != null) suppression.CurLevel += 0.3f * broken.Severity + 0.05f;
 | 
			
		||||
                else suppression.CurLevel += 0.05f;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// only for non-violate human sex
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pawn"></param>
 | 
			
		||||
        /// <param name="partner"></param>
 | 
			
		||||
        /// <param name="sextype"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static HistoryEventDef GetSexHistoryDef(xxx.rjwSextype sextype)
 | 
			
		||||
        {
 | 
			
		||||
            switch (sextype)
 | 
			
		||||
            {
 | 
			
		||||
                case xxx.rjwSextype.None:
 | 
			
		||||
                case xxx.rjwSextype.MechImplant:
 | 
			
		||||
                default:
 | 
			
		||||
                    return null;
 | 
			
		||||
                case xxx.rjwSextype.Vaginal:
 | 
			
		||||
                    return VariousDefOf.VaginalSex;
 | 
			
		||||
                case xxx.rjwSextype.Anal:
 | 
			
		||||
                case xxx.rjwSextype.Rimming:
 | 
			
		||||
                    return VariousDefOf.AnalSex;
 | 
			
		||||
                case xxx.rjwSextype.Oral:
 | 
			
		||||
                case xxx.rjwSextype.Fellatio:
 | 
			
		||||
                case xxx.rjwSextype.Cunnilingus:
 | 
			
		||||
                    return VariousDefOf.OralSex;
 | 
			
		||||
 | 
			
		||||
                case xxx.rjwSextype.Masturbation:
 | 
			
		||||
                case xxx.rjwSextype.Boobjob:
 | 
			
		||||
                case xxx.rjwSextype.Handjob:
 | 
			
		||||
                case xxx.rjwSextype.Footjob:
 | 
			
		||||
                case xxx.rjwSextype.Fingering:
 | 
			
		||||
                case xxx.rjwSextype.MutualMasturbation:
 | 
			
		||||
                    return VariousDefOf.MiscSex;
 | 
			
		||||
                case xxx.rjwSextype.DoublePenetration:
 | 
			
		||||
                case xxx.rjwSextype.Scissoring:
 | 
			
		||||
                case xxx.rjwSextype.Fisting:
 | 
			
		||||
                case xxx.rjwSextype.Sixtynine:
 | 
			
		||||
                    return VariousDefOf.PromiscuousSex;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Set prefer sextype using precepts
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")]
 | 
			
		||||
    public static class RJW_Patch_DetermineSexScores
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List<float> __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 0);
 | 
			
		||||
 | 
			
		||||
            ideo = partner.Ideo;
 | 
			
		||||
            if (!rape && ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 1);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void PreceptSextype(Ideo ideo, float sexdrive, List<float> result, int offset)
 | 
			
		||||
        {
 | 
			
		||||
            float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive));
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[0 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[2 + offset] *= mult;
 | 
			
		||||
                result[6 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[4 + offset] *= mult;
 | 
			
		||||
                result[8 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous))
 | 
			
		||||
            {
 | 
			
		||||
                result[10 + offset] *= mult;
 | 
			
		||||
                result[20 + offset] *= mult;
 | 
			
		||||
                result[24 + offset] *= mult;
 | 
			
		||||
                result[26 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] { typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })]
 | 
			
		||||
    public static class RJW_Patch_would_fuck
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            if (xxx.is_human(fucker))
 | 
			
		||||
            {
 | 
			
		||||
                Ideo ideo = fucker.Ideo;
 | 
			
		||||
                if (ideo != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (fucker.IsIncest(fucked))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f;
 | 
			
		||||
                        else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f;
 | 
			
		||||
                            else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (fucked.IsAnimal())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f;
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f;
 | 
			
		||||
                            else __result *= 0.05f;
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f;
 | 
			
		||||
                        else __result *= 0.5f;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(PawnDesignations_Breedee), "UpdateCanDesignateBreeding")]
 | 
			
		||||
    public static class RJW_Patch_UpdateCanDesignateBreeding
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null && ideo.HasMeme(VariousDefOf.Zoophile))
 | 
			
		||||
            {
 | 
			
		||||
                SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true;
 | 
			
		||||
                __result = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")]
 | 
			
		||||
    public static class RJW_Patch_PostBirth
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn mother, Pawn father, Pawn baby)
 | 
			
		||||
        {
 | 
			
		||||
            if (!mother.IsAnimal())
 | 
			
		||||
            {
 | 
			
		||||
                //baby.SetFactionDirect(baby.GetFactionUsingPrecept());
 | 
			
		||||
                baby.SetFaction(baby.GetFactionUsingPrecept(out Ideo ideo));
 | 
			
		||||
                baby.ideo.SetIdeo(ideo);
 | 
			
		||||
                if (baby.Faction == Find.FactionManager.OfPlayer && !baby.IsSlave) baby.guest.SetGuestStatus(null, GuestStatus.Guest);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +22,7 @@ namespace RJWSexperience
 | 
			
		|||
        public static readonly string RSNotHuman = "RSNotHuman".Translate();
 | 
			
		||||
        public static readonly string RSNotAnimal = "RSNotAnimal".Translate();
 | 
			
		||||
        public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate();
 | 
			
		||||
        public static readonly string RSTotalGatheredCum = "RSTotalGatheredCum".Translate();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static readonly string Option_1_Label = "RSOption_1_Label".Translate();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,17 +16,16 @@ namespace RJWSexperience
 | 
			
		|||
        {
 | 
			
		||||
            Pawn mother = other.GetMother();
 | 
			
		||||
            Pawn father = other.GetFather();
 | 
			
		||||
 | 
			
		||||
            if (me != other && (mother == me || father == me))
 | 
			
		||||
            {
 | 
			
		||||
                //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) return true;
 | 
			
		||||
                //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true) return true;
 | 
			
		||||
                return (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) || (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true);
 | 
			
		||||
                if (mother == null || father == null) return true;
 | 
			
		||||
                else if (mother.relations != null) return !(mother.relations.DirectRelationExists(PawnRelationDefOf.Spouse, father) || mother.relations.DirectRelationExists(PawnRelationDefOf.ExSpouse, father));
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
                
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,11 +77,14 @@
 | 
			
		|||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="Buildings.cs" />
 | 
			
		||||
    <Compile Include="Configurations.cs" />
 | 
			
		||||
    <Compile Include="DebugAction.cs" />
 | 
			
		||||
    <Compile Include="GoodwillSituationWorker_MemeCompatibility.cs" />
 | 
			
		||||
    <Compile Include="Harmony.cs" />
 | 
			
		||||
    <Compile Include="Ideology\RJW_Patch_Ideo.cs" />
 | 
			
		||||
    <Compile Include="PawnRelationWorkers.cs" />
 | 
			
		||||
    <Compile Include="Rituals\JobGiver_DrugOrgy.cs" />
 | 
			
		||||
    <Compile Include="Rituals\JobGiver_GangbangVictim.cs" />
 | 
			
		||||
    <Compile Include="Keyed.cs" />
 | 
			
		||||
    <Compile Include="PreceptComp_SelftTookThoughtExtended.cs" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,8 +49,8 @@ namespace RJWSexperience
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Pawn mother = baby.GetMother();
 | 
			
		||||
            ideo = mother.Ideo;
 | 
			
		||||
            return mother.Faction;
 | 
			
		||||
            ideo = mother?.Ideo;
 | 
			
		||||
            return mother?.Faction ?? baby.Faction;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -96,28 +96,32 @@ namespace RJWSexperience
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")]
 | 
			
		||||
    public static class RJW_Patch_SatisfyPersonal_Pre
 | 
			
		||||
    public static class RJW_Patch_SatisfyPersonal
 | 
			
		||||
    {
 | 
			
		||||
        private const float base_sat_per_fuck = 0.4f;
 | 
			
		||||
 | 
			
		||||
        public static void Prefix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, ref float satisfaction)
 | 
			
		||||
        {
 | 
			
		||||
            satisfaction *= partner.GetSexStat();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")]
 | 
			
		||||
    public static class RJW_Patch_SatisfyPersonal_Post
 | 
			
		||||
    {
 | 
			
		||||
        private const float base_sat_per_fuck = 0.4f;
 | 
			
		||||
        public static void Postfix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, float satisfaction)
 | 
			
		||||
        {
 | 
			
		||||
            float? lust = pawn.records?.GetValue(VariousDefOf.Lust);
 | 
			
		||||
            if (lust != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (sextype != xxx.rjwSextype.Masturbation) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * LustIncrementFactor(lust ?? 0),-0.5f,0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite.
 | 
			
		||||
                else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor(lust ?? 0), 0,0.5f));                                             // Masturbation always increases lust.
 | 
			
		||||
                if (sextype != xxx.rjwSextype.Masturbation || partner != null) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * LustIncrementFactor(lust ?? 0), -0.5f, 0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite.
 | 
			
		||||
                else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor(lust ?? 0), 0, 0.5f));                                             // Masturbation always increases lust.
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (sextype == xxx.rjwSextype.Masturbation || partner == null)
 | 
			
		||||
            {
 | 
			
		||||
                Building_CumBucket cumbucket = (Building_CumBucket)pawn.GetAdjacentBuilding<Building_CumBucket>();
 | 
			
		||||
                if (cumbucket != null)
 | 
			
		||||
                {
 | 
			
		||||
                    cumbucket.AddCum(pawn.GetCumVolume());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float LustIncrementFactor(float lust)
 | 
			
		||||
| 
						 | 
				
			
			@ -125,43 +129,8 @@ namespace RJWSexperience
 | 
			
		|||
            return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")]
 | 
			
		||||
    public static class RJW_Patch_ChancePerHour_Bestiality
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float BestialityByPrecept(Ideo ideo)
 | 
			
		||||
        {
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f;
 | 
			
		||||
            else return 5f;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(ThinkNode_ChancePerHour_RapeCP), "MtbHours")]
 | 
			
		||||
    public static class RJW_Patch_ChancePerHour_RapeCP
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float RapeByPrecept(Ideo ideo)
 | 
			
		||||
        {
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f;
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f;
 | 
			
		||||
            else return 3f;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "TransferNutrition")]
 | 
			
		||||
| 
						 | 
				
			
			@ -178,212 +147,7 @@ namespace RJWSexperience
 | 
			
		|||
                sextype == xxx.rjwSextype.Fellatio ||
 | 
			
		||||
                sextype == xxx.rjwSextype.Sixtynine))
 | 
			
		||||
            {
 | 
			
		||||
                receiver.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); 
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "is_rapist")]
 | 
			
		||||
    public static class RJW_Patch_is_rapist
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            {
 | 
			
		||||
                __result = __result || ideo.HasMeme(VariousDefOf.Rapist);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(xxx), "is_zoophile")]
 | 
			
		||||
    public static class RJW_Patch_is_zoophile
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            {
 | 
			
		||||
                __result = __result || ideo.HasMeme(VariousDefOf.Zoophile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "Aftersex", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool), typeof(xxx.rjwSextype) })]
 | 
			
		||||
    public static class RJW_Patch_Aftersex
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        public static void Postfix(Pawn pawn, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype)
 | 
			
		||||
        {
 | 
			
		||||
            //Log.Message("Aftersex " + pawn.Label + ": " + sextype);
 | 
			
		||||
            if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, usedCondom, rape, isCoreLovin, sextype);
 | 
			
		||||
            else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, usedCondom, false, isCoreLovin, sextype, true);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        public static void AfterSexHuman(Pawn human, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype, bool isHumanReceiving = false)
 | 
			
		||||
        {
 | 
			
		||||
            string tag = "";
 | 
			
		||||
            if (human.IsIncest(partner))
 | 
			
		||||
            {
 | 
			
		||||
                tag += HETag.Incestous;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (partner.IsAnimal())
 | 
			
		||||
            {
 | 
			
		||||
                if (isHumanReceiving && rape)
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.IsSlave) RapeEffectSlave(human);
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.BeenRaped + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                    else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else if (xxx.is_human(partner))
 | 
			
		||||
            {
 | 
			
		||||
                if (rape)
 | 
			
		||||
                {
 | 
			
		||||
                    if (partner.IsSlave)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human ,tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        RapeEffectSlave(partner);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (partner.IsPrisoner)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                        partner.guest.will = Math.Max(0, partner.guest.will - 0.2f);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.BeenRaped + HETag.Gender(partner), human));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    HistoryEventDef sexevent = GetSexHistoryDef(sextype);
 | 
			
		||||
                    if (sexevent != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag + HETag.Gender(human), partner));
 | 
			
		||||
                        Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag + HETag.Gender(partner), human));
 | 
			
		||||
                        if (sexevent == VariousDefOf.PromiscuousSex)
 | 
			
		||||
                        {
 | 
			
		||||
                            human.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                            partner.records.AddTo(VariousDefOf.Lust, 1.0f);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RapeEffectSlave(Pawn victim)
 | 
			
		||||
        {
 | 
			
		||||
            Need_Suppression suppression = victim.needs.TryGetNeed<Need_Suppression>();
 | 
			
		||||
            if (suppression != null)
 | 
			
		||||
            {
 | 
			
		||||
                Hediff broken = victim.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken);
 | 
			
		||||
                if (broken != null) suppression.CurLevel += 0.3f * broken.Severity + 0.05f;
 | 
			
		||||
                else suppression.CurLevel += 0.05f;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// only for non-violate human sex
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pawn"></param>
 | 
			
		||||
        /// <param name="partner"></param>
 | 
			
		||||
        /// <param name="sextype"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public static HistoryEventDef GetSexHistoryDef(xxx.rjwSextype sextype)
 | 
			
		||||
        {
 | 
			
		||||
            switch (sextype)
 | 
			
		||||
            {
 | 
			
		||||
                case xxx.rjwSextype.None:
 | 
			
		||||
                case xxx.rjwSextype.MechImplant:
 | 
			
		||||
                default:
 | 
			
		||||
                    return null;
 | 
			
		||||
                case xxx.rjwSextype.Vaginal:
 | 
			
		||||
                    return VariousDefOf.VaginalSex;
 | 
			
		||||
                case xxx.rjwSextype.Anal:
 | 
			
		||||
                case xxx.rjwSextype.Rimming:
 | 
			
		||||
                    return VariousDefOf.AnalSex;
 | 
			
		||||
                case xxx.rjwSextype.Oral:
 | 
			
		||||
                case xxx.rjwSextype.Fellatio:
 | 
			
		||||
                case xxx.rjwSextype.Cunnilingus:
 | 
			
		||||
                    return VariousDefOf.OralSex;
 | 
			
		||||
 | 
			
		||||
                case xxx.rjwSextype.Masturbation:
 | 
			
		||||
                case xxx.rjwSextype.Boobjob:
 | 
			
		||||
                case xxx.rjwSextype.Handjob:
 | 
			
		||||
                case xxx.rjwSextype.Footjob:
 | 
			
		||||
                case xxx.rjwSextype.Fingering:
 | 
			
		||||
                case xxx.rjwSextype.MutualMasturbation:
 | 
			
		||||
                    return VariousDefOf.MiscSex;
 | 
			
		||||
                case xxx.rjwSextype.DoublePenetration  :
 | 
			
		||||
                case xxx.rjwSextype.Scissoring         :
 | 
			
		||||
                case xxx.rjwSextype.Fisting            :
 | 
			
		||||
                case xxx.rjwSextype.Sixtynine          :
 | 
			
		||||
                    return VariousDefOf.PromiscuousSex;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Set prefer sextype using precepts
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")]
 | 
			
		||||
    public static class RJW_Patch_DetermineSexScores
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List<float> __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 0);
 | 
			
		||||
            
 | 
			
		||||
            ideo = partner.Ideo;
 | 
			
		||||
            if (!rape && ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 1);
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void PreceptSextype(Ideo ideo, float sexdrive,  List<float> result, int offset)
 | 
			
		||||
        {
 | 
			
		||||
            float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive));
 | 
			
		||||
            if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[0 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[2 + offset] *= mult;
 | 
			
		||||
                result[6 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly))
 | 
			
		||||
            {
 | 
			
		||||
                result[4 + offset] *= mult;
 | 
			
		||||
                result[8 + offset] *= mult;
 | 
			
		||||
            }
 | 
			
		||||
            else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous))
 | 
			
		||||
            {
 | 
			
		||||
                result[10 + offset] *= mult;
 | 
			
		||||
                result[20 + offset] *= mult;
 | 
			
		||||
                result[24 + offset] *= mult;
 | 
			
		||||
                result[26 + offset] *= mult;
 | 
			
		||||
                receiver.CumDrugEffect();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -403,74 +167,6 @@ namespace RJWSexperience
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })]
 | 
			
		||||
    public static class RJW_Patch_would_fuck
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result)
 | 
			
		||||
        {
 | 
			
		||||
            if (xxx.is_human(fucker))
 | 
			
		||||
            {
 | 
			
		||||
                Ideo ideo = fucker.Ideo;
 | 
			
		||||
                if (ideo != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (fucker.IsIncest(fucked))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f;
 | 
			
		||||
                        else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f;
 | 
			
		||||
                            else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (fucked.IsAnimal())
 | 
			
		||||
                    {
 | 
			
		||||
                        if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f;
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated))
 | 
			
		||||
                        {
 | 
			
		||||
                            if (ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f;
 | 
			
		||||
                            else __result *= 0.05f;
 | 
			
		||||
                        }
 | 
			
		||||
                        else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f;
 | 
			
		||||
                        else __result *= 0.5f;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(PawnDesignations_Breedee), "UpdateCanDesignateBreeding")]
 | 
			
		||||
    public static class RJW_Patch_UpdateCanDesignateBreeding
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn pawn, ref bool __result)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null && ideo.HasMeme(VariousDefOf.Zoophile))
 | 
			
		||||
            {
 | 
			
		||||
                SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true;
 | 
			
		||||
                __result = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")]
 | 
			
		||||
    public static class RJW_Patch_PostBirth
 | 
			
		||||
    {
 | 
			
		||||
        public static void Postfix(Pawn mother, Pawn father, Pawn baby)
 | 
			
		||||
        {
 | 
			
		||||
            if (!mother.IsAnimal())
 | 
			
		||||
            {
 | 
			
		||||
                //baby.SetFactionDirect(baby.GetFactionUsingPrecept());
 | 
			
		||||
                baby.SetFaction(baby.GetFactionUsingPrecept(out Ideo ideo));
 | 
			
		||||
                baby.ideo.SetIdeo(ideo);
 | 
			
		||||
                if (baby.Faction == Find.FactionManager.OfPlayer && !baby.IsSlave) baby.guest.SetGuestStatus(null, GuestStatus.Guest);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,8 @@ namespace RJWSexperience
 | 
			
		|||
                Find.HistoryEventsManager.RecordEvent(new HistoryEvent(VariousDefOf.Incestuos_Marriage, secondPawn.Named(HistoryEventArgsNames.Doer)));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										279
									
								
								RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										279
									
								
								RJWSexperience/RJWSexperience/Rituals/JobGiver_DrugOrgy.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,279 @@
 | 
			
		|||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using rjw;
 | 
			
		||||
using Verse;
 | 
			
		||||
using Verse.AI;
 | 
			
		||||
using RimWorld;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace RJWSexperience
 | 
			
		||||
{
 | 
			
		||||
    public class JobGiver_DrugOrgy : ThinkNode_JobGiver
 | 
			
		||||
    {
 | 
			
		||||
        protected override Job TryGiveJob(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            if (pawn.Drafted) return null;
 | 
			
		||||
            DutyDef dutyDef = null;
 | 
			
		||||
            PawnDuty duty = null;
 | 
			
		||||
            if (pawn.mindState != null)
 | 
			
		||||
            {
 | 
			
		||||
                duty = pawn.mindState.duty;
 | 
			
		||||
                dutyDef = duty.def;
 | 
			
		||||
            }
 | 
			
		||||
            else return null;
 | 
			
		||||
 | 
			
		||||
            if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
 | 
			
		||||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            Pawn target = FindPartner(pawn, duty);
 | 
			
		||||
 | 
			
		||||
            if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(VariousDefOf.DrugMasturbate);
 | 
			
		||||
 | 
			
		||||
            return JobMaker.MakeJob(VariousDefOf.DrugSex, target);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected Pawn FindPartner(Pawn pawn, PawnDuty duty)
 | 
			
		||||
        {
 | 
			
		||||
            if (duty != null)
 | 
			
		||||
            {
 | 
			
		||||
                List<Pawn> pawns = pawn.Map.mapPawns.AllPawnsSpawned.FindAll(x => x.mindState?.duty?.def == duty.def);
 | 
			
		||||
                return pawns.RandomElementByWeightWithDefault(x => SexAppraiser.would_fuck(pawn,x), 0.1f);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// copied from rjw
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class JobDriver_SexDrugOrgy : JobDriver_SexBaseInitiator
 | 
			
		||||
	{
 | 
			
		||||
		public override bool TryMakePreToilReservations(bool errorOnFailed)
 | 
			
		||||
		{
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
			
		||||
		{
 | 
			
		||||
			//ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called");
 | 
			
		||||
			setup_ticks();
 | 
			
		||||
			var PartnerJob = VariousDefOf.GettinDrugSex;
 | 
			
		||||
 | 
			
		||||
			this.FailOnDespawnedNullOrForbidden(iTarget);
 | 
			
		||||
			this.FailOn(() => !Partner.health.capacities.CanBeAwake);
 | 
			
		||||
			this.FailOn(() => pawn.Drafted);
 | 
			
		||||
			this.FailOn(() => Partner == null);
 | 
			
		||||
			yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			//Toil findQuickieSpot = new Toil();
 | 
			
		||||
			//findQuickieSpot.defaultCompleteMode = ToilCompleteMode.PatherArrival;
 | 
			
		||||
			//findQuickieSpot.initAction = delegate
 | 
			
		||||
			//{
 | 
			
		||||
			//	var spot = Partner.Position.RandomAdjacentCell8Way();
 | 
			
		||||
			//	pawn.pather.StartPath(spot, PathEndMode.OnCell);
 | 
			
		||||
			//	Partner.jobs.StopAll();         //sometimes errors with stuff like vomiting
 | 
			
		||||
			//	Job job = JobMaker.MakeJob(JobDefOf.GotoMindControlled, spot);
 | 
			
		||||
			//	Partner.jobs.StartJob(job, JobCondition.InterruptForced);
 | 
			
		||||
			//};
 | 
			
		||||
			//yield return findQuickieSpot;
 | 
			
		||||
 | 
			
		||||
			Toil WaitForPartner = new Toil();
 | 
			
		||||
			WaitForPartner.defaultCompleteMode = ToilCompleteMode.Delay;
 | 
			
		||||
			WaitForPartner.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				ticksLeftThisToil = 5000;
 | 
			
		||||
			};
 | 
			
		||||
			WaitForPartner.tickAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				pawn.GainComfortFromCellIfPossible();
 | 
			
		||||
				if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
 | 
			
		||||
				{
 | 
			
		||||
					ReadyForNextToil();
 | 
			
		||||
				}
 | 
			
		||||
			};
 | 
			
		||||
			yield return WaitForPartner;
 | 
			
		||||
 | 
			
		||||
			Toil StartPartnerJob = new Toil();
 | 
			
		||||
			StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
 | 
			
		||||
			StartPartnerJob.socialMode = RandomSocialMode.Off;
 | 
			
		||||
			StartPartnerJob.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				var dri = Partner.jobs.curDriver as JobDriver_DrugSexReceiver;
 | 
			
		||||
				if (dri == null)
 | 
			
		||||
                {
 | 
			
		||||
					Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner);
 | 
			
		||||
					Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced);
 | 
			
		||||
				}
 | 
			
		||||
			};
 | 
			
		||||
			yield return StartPartnerJob;
 | 
			
		||||
 | 
			
		||||
			Toil SexToil = new Toil();
 | 
			
		||||
			SexToil.defaultCompleteMode = ToilCompleteMode.Never;
 | 
			
		||||
			SexToil.socialMode = RandomSocialMode.Off;
 | 
			
		||||
			SexToil.defaultDuration = duration;
 | 
			
		||||
			SexToil.handlingFacing = true;
 | 
			
		||||
			SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
 | 
			
		||||
			SexToil.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				Partner.pather.StopDead();
 | 
			
		||||
				Partner.jobs.curDriver.asleep = false;
 | 
			
		||||
				usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner);
 | 
			
		||||
				Start();
 | 
			
		||||
			};
 | 
			
		||||
			SexToil.AddPreTickAction(delegate
 | 
			
		||||
			{
 | 
			
		||||
				SexTick(pawn, Partner);
 | 
			
		||||
				SexUtility.reduce_rest(Partner, 1);
 | 
			
		||||
				SexUtility.reduce_rest(pawn, 1);
 | 
			
		||||
				if (ticks_left <= 0)
 | 
			
		||||
					ReadyForNextToil();
 | 
			
		||||
			});
 | 
			
		||||
			SexToil.AddFinishAction(delegate
 | 
			
		||||
			{
 | 
			
		||||
				End();
 | 
			
		||||
			});
 | 
			
		||||
			yield return SexToil;
 | 
			
		||||
 | 
			
		||||
			yield return new Toil
 | 
			
		||||
			{
 | 
			
		||||
				initAction = delegate
 | 
			
		||||
				{
 | 
			
		||||
					//// Trying to add some interactions and social logs
 | 
			
		||||
					SexUtility.ProcessSex(pawn, Partner, usedCondom: usedCondom, rape: isRape, sextype: sexType);
 | 
			
		||||
				},
 | 
			
		||||
				defaultCompleteMode = ToilCompleteMode.Instant
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// copied from rjw
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
			
		||||
		{
 | 
			
		||||
			setup_ticks();
 | 
			
		||||
			parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
 | 
			
		||||
								   //--ModLog.Message("JobDriver_GettinLoved::MakeNewToils is called");
 | 
			
		||||
								   //ModLog.Message("" + Partner.CurJob.def);
 | 
			
		||||
 | 
			
		||||
			// More/less hearts based on opinion.
 | 
			
		||||
			if (pawn.relations.OpinionOf(Partner) < 0)
 | 
			
		||||
				ticks_between_hearts += 50;
 | 
			
		||||
			else if (pawn.relations.OpinionOf(Partner) > 60)
 | 
			
		||||
				ticks_between_hearts -= 25;
 | 
			
		||||
 | 
			
		||||
			this.FailOnDespawnedOrNull(iTarget);
 | 
			
		||||
			this.FailOn(() => !Partner.health.capacities.CanBeAwake);
 | 
			
		||||
			this.FailOn(() => pawn.Drafted);
 | 
			
		||||
			this.FailOn(() => Partner.Drafted);
 | 
			
		||||
			this.FailOn(() => Partner == null);
 | 
			
		||||
 | 
			
		||||
			yield return Toils_Reserve.Reserve(iTarget, 1, 0);
 | 
			
		||||
 | 
			
		||||
				var get_loved = MakeSexToil();
 | 
			
		||||
				get_loved.handlingFacing = false;
 | 
			
		||||
				yield return get_loved;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		protected Toil MakeSexToil()
 | 
			
		||||
		{
 | 
			
		||||
			Toil get_loved = new Toil();
 | 
			
		||||
			get_loved.defaultCompleteMode = ToilCompleteMode.Never;
 | 
			
		||||
			get_loved.socialMode = RandomSocialMode.Off;
 | 
			
		||||
			get_loved.handlingFacing = true;
 | 
			
		||||
			//get_loved.initAction = delegate
 | 
			
		||||
			//{
 | 
			
		||||
			//};
 | 
			
		||||
			get_loved.tickAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
			};
 | 
			
		||||
			get_loved.AddEndCondition(new Func<JobCondition>(() =>
 | 
			
		||||
			{
 | 
			
		||||
				if (parteners.Count <= 0)
 | 
			
		||||
				{
 | 
			
		||||
					return JobCondition.Succeeded;
 | 
			
		||||
				}
 | 
			
		||||
				return JobCondition.Ongoing;
 | 
			
		||||
			}));
 | 
			
		||||
			get_loved.AddFinishAction(delegate
 | 
			
		||||
			{
 | 
			
		||||
				if (xxx.is_human(pawn))
 | 
			
		||||
					pawn.Drawer.renderer.graphics.ResolveApparelGraphics();
 | 
			
		||||
			});
 | 
			
		||||
			get_loved.socialMode = RandomSocialMode.Off;
 | 
			
		||||
			return get_loved;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// copied from rjw
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	public class JobDriver_DrugMasturabate : JobDriver_Masturbate
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
		protected override IEnumerable<Toil> MakeNewToils()
 | 
			
		||||
		{
 | 
			
		||||
			setup_ticks();
 | 
			
		||||
 | 
			
		||||
			//this.FailOn(() => PawnUtility.PlayerForcedJobNowOrSoon(pawn));
 | 
			
		||||
			this.FailOn(() => pawn.health.Downed);
 | 
			
		||||
			this.FailOn(() => pawn.IsBurning());
 | 
			
		||||
			this.FailOn(() => pawn.IsFighting());
 | 
			
		||||
			this.FailOn(() => pawn.Drafted);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			//ModLog.Message(" Making new toil for QuickFap.");
 | 
			
		||||
 | 
			
		||||
			Toil SexToil = Toils_General.Wait(duration);
 | 
			
		||||
			SexToil.handlingFacing = true;
 | 
			
		||||
			SexToil.initAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				Start();
 | 
			
		||||
			};
 | 
			
		||||
			SexToil.tickAction = delegate
 | 
			
		||||
			{
 | 
			
		||||
				SexTick(pawn, null, true);
 | 
			
		||||
				SexUtility.reduce_rest(pawn, 1);
 | 
			
		||||
				if (ticks_left <= 0)
 | 
			
		||||
					ReadyForNextToil();
 | 
			
		||||
			};
 | 
			
		||||
			SexToil.AddFinishAction(delegate
 | 
			
		||||
			{
 | 
			
		||||
				End();
 | 
			
		||||
			});
 | 
			
		||||
			yield return SexToil;
 | 
			
		||||
 | 
			
		||||
			yield return new Toil
 | 
			
		||||
			{
 | 
			
		||||
				initAction = delegate
 | 
			
		||||
				{
 | 
			
		||||
					SexUtility.Aftersex(pawn, xxx.rjwSextype.Masturbation);
 | 
			
		||||
					if (!SexUtility.ConsiderCleaning(pawn)) return;
 | 
			
		||||
 | 
			
		||||
					LocalTargetInfo own_cum = pawn.PositionHeld.GetFirstThing<Filth>(pawn.Map);
 | 
			
		||||
 | 
			
		||||
					Job clean = JobMaker.MakeJob(JobDefOf.Clean);
 | 
			
		||||
					clean.AddQueuedTarget(TargetIndex.A, own_cum);
 | 
			
		||||
 | 
			
		||||
					pawn.jobs.jobQueue.EnqueueFirst(clean);
 | 
			
		||||
				},
 | 
			
		||||
				defaultCompleteMode = ToilCompleteMode.Instant
 | 
			
		||||
			};
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ namespace RJWSexperience
 | 
			
		|||
            if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
 | 
			
		||||
            if (pawn.Ideo?.HasMeme(MemeDefOf.FemaleSupremacy) ?? false && pawn.gender != Gender.Female) return true;
 | 
			
		||||
            else if (pawn.Ideo?.HasMeme(MemeDefOf.MaleSupremacy) ?? false && pawn.gender != Gender.Male) return true;
 | 
			
		||||
            else if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
 | 
			
		||||
            if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -97,10 +97,10 @@ namespace RJWSexperience
 | 
			
		|||
 | 
			
		||||
        public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
 | 
			
		||||
        {
 | 
			
		||||
            //if (precept != null)
 | 
			
		||||
            //{
 | 
			
		||||
            //    if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false;
 | 
			
		||||
            //}
 | 
			
		||||
            if (precept != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (!xxx.can_rape(animal)) return false;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,15 @@ namespace RJWSexperience
 | 
			
		|||
 | 
			
		||||
        protected int recordIncrement = 1;
 | 
			
		||||
 | 
			
		||||
        public override int CurStageIndex
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (pawn.health.hediffSet.HasHediff(VariousDefOf.CumAddiction)) return minimumValueforStage.Count;
 | 
			
		||||
                return base.CurStageIndex;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void ExposeData()
 | 
			
		||||
        {
 | 
			
		||||
            base.ExposeData();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,5 +84,83 @@ namespace RJWSexperience
 | 
			
		|||
            return 1 + lust / 100f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static bool IsSubmissive(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            Ideo ideo = pawn.Ideo;
 | 
			
		||||
            if (ideo != null)
 | 
			
		||||
            {
 | 
			
		||||
                if (ideo.HasPrecept(VariousDefOf.Submissive_Female) && pawn.gender == Gender.Female) return true;
 | 
			
		||||
                else if (ideo.HasPrecept(VariousDefOf.Submissive_Male) && pawn.gender == Gender.Male) return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static Building GetAdjacentBuilding<T>(this Pawn pawn) where T : Building 
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            if (pawn.Spawned)
 | 
			
		||||
            {
 | 
			
		||||
                EdificeGrid edifice = pawn.Map.edificeGrid;
 | 
			
		||||
                if (edifice[pawn.Position] is T) return edifice[pawn.Position];
 | 
			
		||||
                IEnumerable<IntVec3> adjcells = GenAdjFast.AdjacentCells8Way(pawn.Position);
 | 
			
		||||
                foreach(IntVec3 pos in adjcells)
 | 
			
		||||
                {
 | 
			
		||||
                    if (edifice[pos] is T) return edifice[pos];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static float GetCumVolume(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            List<Hediff> hediffs = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn));
 | 
			
		||||
            if (hediffs.NullOrEmpty()) return 0;
 | 
			
		||||
            else return pawn.GetCumVolume(hediffs);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static float GetCumVolume(this Pawn pawn, List<Hediff> hediffs)
 | 
			
		||||
        {
 | 
			
		||||
            CompHediffBodyPart part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("penis")).InRandomOrder().FirstOrDefault()?.TryGetComp<CompHediffBodyPart>();
 | 
			
		||||
            if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorf")).InRandomOrder().FirstOrDefault()?.TryGetComp<CompHediffBodyPart>();
 | 
			
		||||
            if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("ovipositorm")).InRandomOrder().FirstOrDefault()?.TryGetComp<CompHediffBodyPart>();
 | 
			
		||||
            if (part == null) part = hediffs?.FindAll((Hediff hed) => hed.def.defName.ToLower().Contains("tentacle")).InRandomOrder().FirstOrDefault()?.TryGetComp<CompHediffBodyPart>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            return pawn.GetCumVolume(part);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public static float GetCumVolume(this Pawn pawn, CompHediffBodyPart part)
 | 
			
		||||
        {
 | 
			
		||||
            float res;
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                res = part.FluidAmmount * part.FluidModifier * pawn.BodySize / pawn.RaceProps.baseBodySize * Rand.Range(0.8f, 1.2f) * RJWSettings.cum_on_body_amount_adjust * 0.3f;
 | 
			
		||||
            }
 | 
			
		||||
            catch (NullReferenceException)
 | 
			
		||||
            {
 | 
			
		||||
                res = 0.0f;
 | 
			
		||||
            }
 | 
			
		||||
            if (pawn.Has(Quirk.Messy)) res *= Rand.Range(4.0f, 8.0f);
 | 
			
		||||
 | 
			
		||||
            return res;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void CumDrugEffect(this Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            Need need = pawn.needs?.TryGetNeed(VariousDefOf.Chemical_Cum);
 | 
			
		||||
            if (need != null) need.CurLevel += VariousDefOf.CumneedLevelOffset;
 | 
			
		||||
            Hediff addictive = HediffMaker.MakeHediff(VariousDefOf.CumTolerance, pawn);
 | 
			
		||||
            addictive.Severity = 0.032f;
 | 
			
		||||
            pawn.health.AddHediff(addictive);
 | 
			
		||||
            Hediff addiction = pawn.health.hediffSet.GetFirstHediffOfDef(VariousDefOf.CumAddiction);
 | 
			
		||||
            if (addiction != null) addiction.Severity += VariousDefOf.CumexistingAddictionSeverityOffset;
 | 
			
		||||
 | 
			
		||||
            pawn.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,9 +15,54 @@ namespace RJWSexperience
 | 
			
		|||
        public static readonly SkillDef SexSkill = DefDatabase<SkillDef>.GetNamed("Sex");
 | 
			
		||||
        public static readonly ThoughtDef_Recordbased AteCum = DefDatabase<ThoughtDef_Recordbased>.GetNamed("AteCum");
 | 
			
		||||
        public static readonly JobDef RapeVictim = DefDatabase<JobDef>.GetNamed("RapeVictim");
 | 
			
		||||
        public static readonly JobDef DrugSex = DefDatabase<JobDef>.GetNamed("DrugSex");
 | 
			
		||||
        public static readonly JobDef GettinDrugSex = DefDatabase<JobDef>.GetNamed("GettinDrugSex");
 | 
			
		||||
        public static readonly JobDef DrugMasturbate = DefDatabase<JobDef>.GetNamed("DrugMasturbate");
 | 
			
		||||
        public static readonly PawnRelationDef Bastard = DefDatabase<PawnRelationDef>.GetNamed("Bastard");
 | 
			
		||||
        public static readonly ThingDef GatheredCum = DefDatabase<ThingDef>.GetNamed("GatheredCum");
 | 
			
		||||
        public static readonly HediffDef CumAddiction = DefDatabase<HediffDef>.GetNamed("CumAddiction");
 | 
			
		||||
        public static readonly HediffDef CumTolerance = DefDatabase<HediffDef>.GetNamed("CumTolerance");
 | 
			
		||||
        public static readonly ChemicalDef Cum = DefDatabase<ChemicalDef>.GetNamed("Cum");
 | 
			
		||||
        public static readonly NeedDef Chemical_Cum = DefDatabase<NeedDef>.GetNamed("Chemical_Cum");
 | 
			
		||||
        
 | 
			
		||||
        public static float CumneedLevelOffset
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (cumneedLevelOffsetcache == null)
 | 
			
		||||
                {
 | 
			
		||||
                    CreateCumCompCache();
 | 
			
		||||
                }
 | 
			
		||||
                return cumneedLevelOffsetcache ?? 1.0f;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        public static float CumexistingAddictionSeverityOffset
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (cumexistingAddictionSeverityOffsetcache == null)
 | 
			
		||||
                {
 | 
			
		||||
                    CreateCumCompCache();
 | 
			
		||||
                }
 | 
			
		||||
                return cumexistingAddictionSeverityOffsetcache ?? 1.0f;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void CreateCumCompCache()
 | 
			
		||||
        {
 | 
			
		||||
            CompProperties_Drug comp = (CompProperties_Drug)GatheredCum.comps.FirstOrDefault(x => x is CompProperties_Drug);
 | 
			
		||||
            cumneedLevelOffsetcache = comp.needLevelOffset;
 | 
			
		||||
            cumexistingAddictionSeverityOffsetcache = comp.existingAddictionSeverityOffset;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        protected static float? cumneedLevelOffsetcache = null;
 | 
			
		||||
        protected static float? cumexistingAddictionSeverityOffsetcache = null;
 | 
			
		||||
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase<MemeDef>.GetNamed("Zoophile");
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase<MemeDef>.GetNamed("Rapist");
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Lewd = DefDatabase<MemeDef>.GetNamed("Lewd");
 | 
			
		||||
        [MayRequireIdeology] public static readonly MemeDef Necrophile = DefDatabase<MemeDef>.GetNamed("Necrophile");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithAnimal");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithVeneratedAnimal");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase<HistoryEventDef>.GetNamed("Raped");
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +77,7 @@ namespace RJWSexperience
 | 
			
		|||
        [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase<HistoryEventDef>.GetNamed("MiscSex");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase<HistoryEventDef>.GetNamed("PromiscuousSex");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef Incestuos_Marriage = DefDatabase<HistoryEventDef>.GetNamed("Incestuos_Marriage");
 | 
			
		||||
        [MayRequireIdeology] public static readonly HistoryEventDef SexWithCorpse = DefDatabase<HistoryEventDef>.GetNamed("SexWithCorpse");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Bestiality_Abhorrent = DefDatabase<PreceptDef>.GetNamed("Bestiality_Abhorrent");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase<PreceptDef>.GetNamed("Bestiality_Horrible");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Bestiality_Disapproved = DefDatabase<PreceptDef>.GetNamed("Bestiality_Disapproved");
 | 
			
		||||
| 
						 | 
				
			
			@ -56,5 +102,13 @@ namespace RJWSexperience
 | 
			
		|||
        [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysMother");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysFather");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysColony");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Submissive_None = DefDatabase<PreceptDef>.GetNamed("Submissive_None");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Submissive_Male = DefDatabase<PreceptDef>.GetNamed("Submissive_Male");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Submissive_Female = DefDatabase<PreceptDef>.GetNamed("Submissive_Female");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Abhorrent = DefDatabase<PreceptDef>.GetNamed("Necrophilia_Abhorrent");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Horrible = DefDatabase<PreceptDef>.GetNamed("Necrophilia_Horrible");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Disapproved = DefDatabase<PreceptDef>.GetNamed("Necrophilia_Disapproved");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Acceptable = DefDatabase<PreceptDef>.GetNamed("Necrophilia_Acceptable");
 | 
			
		||||
        [MayRequireIdeology] public static readonly PreceptDef Necrophilia_Approved = DefDatabase<PreceptDef>.GetNamed("Necrophilia_Approved");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,29 @@
 | 
			
		|||
      </subNodes>
 | 
			
		||||
    </thinkNode>
 | 
			
		||||
  </DutyDef>
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  <DutyDef>
 | 
			
		||||
    <defName>DrugOrgy</defName>
 | 
			
		||||
    <hook>HighPriority</hook>
 | 
			
		||||
    <socialModeMax>Off</socialModeMax>
 | 
			
		||||
    <thinkNode Class="ThinkNode_Priority">
 | 
			
		||||
      <subNodes>
 | 
			
		||||
        <li Class="ThinkNode_ConditionalInGatheringArea">
 | 
			
		||||
          <subNodes>
 | 
			
		||||
            <li Class="ThinkNode_ConditionalRandom">
 | 
			
		||||
              <chance>0.15</chance>
 | 
			
		||||
              <subNodes>
 | 
			
		||||
                 <li Class="RJWSexperience.JobGiver_DrugOrgy"/>
 | 
			
		||||
              </subNodes>
 | 
			
		||||
            </li>
 | 
			
		||||
          </subNodes>
 | 
			
		||||
        </li>
 | 
			
		||||
 | 
			
		||||
        <li Class="JobGiver_WanderInGatheringArea">
 | 
			
		||||
			  	<locomotionUrgency>Jog</locomotionUrgency>
 | 
			
		||||
			  	<ticksBetweenWandersRange>50~250</ticksBetweenWandersRange>
 | 
			
		||||
			  </li>
 | 
			
		||||
      </subNodes>
 | 
			
		||||
    </thinkNode>
 | 
			
		||||
  </DutyDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,14 @@
 | 
			
		|||
    <naturalGoodwillOffset>30</naturalGoodwillOffset>
 | 
			
		||||
  </GoodwillSituationDef>
 | 
			
		||||
 | 
			
		||||
  <GoodwillSituationDef>
 | 
			
		||||
    <defName>Necrophile_Necrophile</defName>
 | 
			
		||||
    <label>necrophile agreement</label>
 | 
			
		||||
    <workerClass>GoodwillSituationWorker_MemeCompatibility</workerClass>
 | 
			
		||||
    <meme>Necrophile</meme>
 | 
			
		||||
    <otherMeme>Necrophile</otherMeme>
 | 
			
		||||
    <naturalGoodwillOffset>30</naturalGoodwillOffset>
 | 
			
		||||
  </GoodwillSituationDef>
 | 
			
		||||
  <!-- Disagreement -->
 | 
			
		||||
 | 
			
		||||
  <GoodwillSituationDef>
 | 
			
		||||
| 
						 | 
				
			
			@ -30,4 +38,13 @@
 | 
			
		|||
    <versusAll>true</versusAll>
 | 
			
		||||
    <naturalGoodwillOffset>-20</naturalGoodwillOffset>
 | 
			
		||||
  </GoodwillSituationDef>
 | 
			
		||||
 | 
			
		||||
  <GoodwillSituationDef>
 | 
			
		||||
    <defName>Necrophile_All</defName>
 | 
			
		||||
    <label>necrophile</label>
 | 
			
		||||
    <workerClass>RJWSexperience.GoodwillSituationWorker_OneWayReceive</workerClass>
 | 
			
		||||
    <meme>Necrophile</meme>
 | 
			
		||||
    <versusAll>true</versusAll>
 | 
			
		||||
    <naturalGoodwillOffset>-50</naturalGoodwillOffset>
 | 
			
		||||
  </GoodwillSituationDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										31
									
								
								RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								RJWSexperience_Ideology/Defs/JobDefs/Jobs_Ritual_Sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
 | 
			
		||||
<Defs>
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>RapeVictim</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_RapeVictim</driverClass>
 | 
			
		||||
		<reportString>rapin' victim</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>DrugSex</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_SexDrugOrgy</driverClass>
 | 
			
		||||
		<reportString>lovin'.</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>GettinDrugSex</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_DrugSexReceiver</driverClass>
 | 
			
		||||
		<reportString>lovin'.</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
	
 | 
			
		||||
	<JobDef>
 | 
			
		||||
		<defName>DrugMasturbate</defName>
 | 
			
		||||
		<driverClass>RJWSexperience.JobDriver_DrugMasturabate</driverClass>
 | 
			
		||||
		<reportString>masturbatin'.</reportString>
 | 
			
		||||
		<casualInterruptible>false</casualInterruptible>
 | 
			
		||||
	</JobDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -151,4 +151,93 @@
 | 
			
		|||
    </agreeableTraits>
 | 
			
		||||
  </MemeDef>
 | 
			
		||||
 | 
			
		||||
  <MemeDef ParentName="SexualDissoulutelyBase">
 | 
			
		||||
    <defName>Lewd</defName>
 | 
			
		||||
    <label>lewd</label>
 | 
			
		||||
    <description>Perverts.</description>
 | 
			
		||||
    <iconPath>UI/Memes/SexualDissolutely</iconPath>
 | 
			
		||||
    <impact>3</impact>
 | 
			
		||||
    <consumableBuildings>
 | 
			
		||||
      <li>Burnbong_Aphrodisiac</li>
 | 
			
		||||
    </consumableBuildings>
 | 
			
		||||
    <requireOne>
 | 
			
		||||
      <li>
 | 
			
		||||
        <li>Lovin_FreeApproved</li>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <li>Incestuos_Free</li>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <li>Sex_Free</li>
 | 
			
		||||
        <li>Sex_Promiscuous</li>
 | 
			
		||||
      </li>
 | 
			
		||||
    </requireOne>
 | 
			
		||||
    <requiredRituals>
 | 
			
		||||
      <li>
 | 
			
		||||
        <precept>DateRitualConsumable</precept>
 | 
			
		||||
        <pattern>DrugOrgy</pattern>
 | 
			
		||||
        <building>Burnbong_Aphrodisiac</building>
 | 
			
		||||
      </li>
 | 
			
		||||
    </requiredRituals>
 | 
			
		||||
    <generalRules>
 | 
			
		||||
      <rulesStrings>
 | 
			
		||||
        <li>memeAdjective->horny</li>
 | 
			
		||||
        <li>memeAdjective->lewd</li>
 | 
			
		||||
        <li>memeAdjective->arousing</li>
 | 
			
		||||
        <li>memeAdjective->sexy</li>
 | 
			
		||||
        <li>memeAdjective->estrous</li>
 | 
			
		||||
        <li>memeAdjective->decadent</li>
 | 
			
		||||
        <li>memeHyphenPrefix->estro</li>
 | 
			
		||||
        <li>memeHyphenPrefix->lust</li>
 | 
			
		||||
        <li>memeConcept->lust</li>
 | 
			
		||||
        <li>memeConcept->libido</li>
 | 
			
		||||
        <li>memeConcept->estrus</li>
 | 
			
		||||
        <li>memeConcept->arousal</li>
 | 
			
		||||
        <li>memeConcept->desire</li>
 | 
			
		||||
        <li>memeConcept->sex</li>
 | 
			
		||||
        <li>memeConcept->perversion</li>
 | 
			
		||||
        <li>memeGod->slaanesh</li>
 | 
			
		||||
      </rulesStrings>
 | 
			
		||||
    </generalRules>
 | 
			
		||||
    <symbolPacks>
 | 
			
		||||
      <li>
 | 
			
		||||
        <ideoName>Cult of Slaanesh</ideoName>
 | 
			
		||||
        <theme>pleasure</theme>
 | 
			
		||||
        <adjective>decadent</adjective>
 | 
			
		||||
        <member>heretic</member>
 | 
			
		||||
      </li>
 | 
			
		||||
    </symbolPacks>
 | 
			
		||||
    <addDesignators>
 | 
			
		||||
      <li>Autobong_Aphrodisiac</li>
 | 
			
		||||
    </addDesignators>
 | 
			
		||||
    <agreeableTraits>
 | 
			
		||||
      <li>Nymphomaniac</li>
 | 
			
		||||
    </agreeableTraits>
 | 
			
		||||
  </MemeDef>
 | 
			
		||||
 | 
			
		||||
  <MemeDef ParentName="SexualDissoulutelyBase">
 | 
			
		||||
    <defName>Necrophile</defName>
 | 
			
		||||
    <label>necrophile</label>
 | 
			
		||||
    <description>Corpse fuckers.</description>
 | 
			
		||||
    <iconPath>UI/Memes/Necrophile</iconPath>
 | 
			
		||||
    <impact>2</impact>
 | 
			
		||||
    <requireOne>
 | 
			
		||||
      <li>
 | 
			
		||||
        <li>Necrophilia_Acceptable</li>
 | 
			
		||||
        <li>Necrophilia_Approved</li>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <li>Corpses_DontCare</li>
 | 
			
		||||
      </li>
 | 
			
		||||
    </requireOne>
 | 
			
		||||
    <generalRules>
 | 
			
		||||
      <rulesStrings>
 | 
			
		||||
        <li>memeGod->sonic</li>
 | 
			
		||||
        <li>memeGod->mega man</li>
 | 
			
		||||
      </rulesStrings>
 | 
			
		||||
    </generalRules>
 | 
			
		||||
    <agreeableTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </agreeableTraits>
 | 
			
		||||
  </MemeDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,85 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
 | 
			
		||||
  <!-- Issue -->
 | 
			
		||||
 | 
			
		||||
  <IssueDef>
 | 
			
		||||
    <defName>IdeoBuilding</defName>
 | 
			
		||||
    <label>building</label>
 | 
			
		||||
    <allowMultiplePrecepts>true</allowMultiplePrecepts>
 | 
			
		||||
  </IssueDef>
 | 
			
		||||
 | 
			
		||||
  <!-- Precepts -->
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>IdeoBuilding</defName>
 | 
			
		||||
    <label>building</label>
 | 
			
		||||
    <description>A building of ideoligious significance. Only those who follow this ideoligion can build it. It may be used as a focus for rituals.</description>
 | 
			
		||||
    <issue>IdeoBuilding</issue>
 | 
			
		||||
    <preceptClass>Precept_Building</preceptClass>
 | 
			
		||||
    <workerClass>PreceptWorker_Building</workerClass>
 | 
			
		||||
    <nameMaker>NamerIdeoBuilding</nameMaker>
 | 
			
		||||
    <impact>Medium</impact>
 | 
			
		||||
    <buildingDefChances>
 | 
			
		||||
      <Altar_Small>1</Altar_Small>
 | 
			
		||||
      <Altar_Medium>1</Altar_Medium>
 | 
			
		||||
      <Altar_Large>1</Altar_Large>
 | 
			
		||||
      <Altar_Grand>1</Altar_Grand>
 | 
			
		||||
      <Ideogram>4</Ideogram>
 | 
			
		||||
      <SculptureSmall>1</SculptureSmall>
 | 
			
		||||
      <SculptureLarge>1</SculptureLarge>
 | 
			
		||||
      <SculptureGrand>1</SculptureGrand>
 | 
			
		||||
      <ChristmasTree>0</ChristmasTree>
 | 
			
		||||
    </buildingDefChances>
 | 
			
		||||
    <useChoicesFromBuildingDefs>true</useChoicesFromBuildingDefs>
 | 
			
		||||
    <allowDuplicates>true</allowDuplicates>
 | 
			
		||||
    <countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
 | 
			
		||||
    <maxCount>5</maxCount>
 | 
			
		||||
    <buildingMinExpectations>
 | 
			
		||||
      <li>Moderate</li>
 | 
			
		||||
      <li>High</li>
 | 
			
		||||
    </buildingMinExpectations>
 | 
			
		||||
    <preceptInstanceCountCurve>
 | 
			
		||||
      <points>
 | 
			
		||||
        <li>(0.5, 1)</li>
 | 
			
		||||
        <li>(1.0, 2)</li>
 | 
			
		||||
      </points>
 | 
			
		||||
    </preceptInstanceCountCurve>
 | 
			
		||||
    <roomRequirementCountCurve>
 | 
			
		||||
      <points>
 | 
			
		||||
        <li>(0.5, 1)</li>
 | 
			
		||||
        <li>(1.0, 2)</li>
 | 
			
		||||
      </points>
 | 
			
		||||
    </roomRequirementCountCurve>
 | 
			
		||||
    <buildingRoomRequirements>
 | 
			
		||||
      <li Class="RoomRequirement_Area">
 | 
			
		||||
        <area>25</area>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RoomRequirement_TerrainWithTags">
 | 
			
		||||
        <labelKey>RoomRequirementAllFloored</labelKey>
 | 
			
		||||
        <tags>
 | 
			
		||||
          <li>Floor</li>
 | 
			
		||||
          <li>FineFloor</li>
 | 
			
		||||
        </tags>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RoomRequirement_Impressiveness">
 | 
			
		||||
        <impressiveness>60</impressiveness>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RoomRequirement_ThingCount">
 | 
			
		||||
        <thingDef>Column</thingDef>
 | 
			
		||||
        <count>4</count>
 | 
			
		||||
      </li>
 | 
			
		||||
    </buildingRoomRequirements>
 | 
			
		||||
    <buildingRoomRequirementsFixed>
 | 
			
		||||
      <li Class="RoomRequirement_ForbiddenBuildings">
 | 
			
		||||
        <labelKey>RoomRequirementNoBeds</labelKey>
 | 
			
		||||
        <buildingTags><li>Bed</li></buildingTags>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RoomRequirement_ForbiddenBuildings">
 | 
			
		||||
        <labelKey>RoomRequirementNoProductionFacilities</labelKey>
 | 
			
		||||
        <buildingTags><li>Production</li></buildingTags>
 | 
			
		||||
      </li>
 | 
			
		||||
    </buildingRoomRequirementsFixed>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,291 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
 | 
			
		||||
  <!-- Issues -->
 | 
			
		||||
  <IssueDef>
 | 
			
		||||
    <defName>Necrophilia</defName>
 | 
			
		||||
    <label>necrophilia</label>
 | 
			
		||||
    <iconPath>UI/Issues/Necrophilia</iconPath>
 | 
			
		||||
  </IssueDef>
 | 
			
		||||
 | 
			
		||||
  <HistoryEventDef>
 | 
			
		||||
    <defName>SexWithCorpse</defName>
 | 
			
		||||
    <label>fucked corpse</label>
 | 
			
		||||
  </HistoryEventDef>
 | 
			
		||||
 | 
			
		||||
  <!-- Precepts -->
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>Necrophilia_Abhorrent</defName>
 | 
			
		||||
    <issue>Necrophilia</issue>
 | 
			
		||||
    <label>abhorrent</label>
 | 
			
		||||
    <description>Necrophilia beings is deeply evil.</description>
 | 
			
		||||
    <impact>Low</impact>
 | 
			
		||||
    <displayOrderInIssue>40</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>100</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>30</defaultSelectionWeight>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Necrophile</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Abhorrent</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Know_Abhorrent</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>Necrophilia_Horrible</defName>
 | 
			
		||||
    <issue>Necrophilia</issue>
 | 
			
		||||
    <label>horrible</label>
 | 
			
		||||
    <description>Necrophilia is a horrible thing.</description>
 | 
			
		||||
    <impact>Low</impact>
 | 
			
		||||
    <displayOrderInIssue>30</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>200</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>30</defaultSelectionWeight>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Necrophile</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Horrible</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Know_Horrible</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>Necrophilia_Disapproved</defName>
 | 
			
		||||
    <issue>Necrophilia</issue>
 | 
			
		||||
    <label>disapproved</label>
 | 
			
		||||
    <description>Necrophilia is extremely distasteful.</description>
 | 
			
		||||
    <impact>Low</impact>
 | 
			
		||||
    <displayOrderInIssue>20</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>300</displayOrderInImpact>
 | 
			
		||||
    <defaultSelectionWeight>20</defaultSelectionWeight>
 | 
			
		||||
    <conflictingMemes>
 | 
			
		||||
      <li>Necrophile</li>
 | 
			
		||||
    </conflictingMemes>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Disapproved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Know_Disapproved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>Necrophilia_Acceptable</defName>
 | 
			
		||||
    <issue>Necrophilia</issue>
 | 
			
		||||
    <label>acceptable</label>
 | 
			
		||||
    <description>Necrophilia is a normal, unremarkable part of life.</description>
 | 
			
		||||
    <impact>Medium</impact>
 | 
			
		||||
    <displayOrderInIssue>10</displayOrderInIssue>
 | 
			
		||||
    <defaultSelectionWeight>10</defaultSelectionWeight>
 | 
			
		||||
    <approvesOfSlavery>true</approvesOfSlavery>
 | 
			
		||||
    <requiredMemes>
 | 
			
		||||
      <li>Necrophile</li>
 | 
			
		||||
    </requiredMemes>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>Necrophilia_Approved</defName>
 | 
			
		||||
    <issue>Necrophilia</issue>
 | 
			
		||||
    <label>approved</label>
 | 
			
		||||
    <description>Fucking corpse is approval.</description>
 | 
			
		||||
    <impact>High</impact>
 | 
			
		||||
    <displayOrderInIssue>0</displayOrderInIssue>
 | 
			
		||||
    <displayOrderInImpact>1000</displayOrderInImpact>
 | 
			
		||||
    <requiredMemes>
 | 
			
		||||
      <li>Necrophile</li>
 | 
			
		||||
      <li>Lewd</li>
 | 
			
		||||
    </requiredMemes>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="PreceptComp_SelfTookMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Approved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="PreceptComp_KnowsMemoryThought">
 | 
			
		||||
        <eventDef>SexWithCorpse</eventDef>
 | 
			
		||||
        <thought>Necrophilia_Know_Approved</thought>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
  
 | 
			
		||||
  <!-- Thoughts -->
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Abhorrent</defName>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>1</stackLimit>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <description>I had fucked corpse.</description>
 | 
			
		||||
        <baseMoodEffect>-15</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Know_Abhorrent</defName>
 | 
			
		||||
    <thoughtClass>Thought_MemorySocial</thoughtClass>
 | 
			
		||||
    <durationDays>15</durationDays>
 | 
			
		||||
    <stackLimit>100</stackLimit>
 | 
			
		||||
    <stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <baseOpinionOffset>-30</baseOpinionOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Horrible</defName>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>1</stackLimit>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <description>I had fucked corpse.</description>
 | 
			
		||||
        <baseMoodEffect>-10</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Know_Horrible</defName>
 | 
			
		||||
    <thoughtClass>Thought_MemorySocial</thoughtClass>
 | 
			
		||||
    <durationDays>15</durationDays>
 | 
			
		||||
    <stackLimit>100</stackLimit>
 | 
			
		||||
    <stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <baseOpinionOffset>-20</baseOpinionOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Disapproved</defName>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>1</stackLimit>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <description>I had fucked corpse.</description>
 | 
			
		||||
        <baseMoodEffect>-5</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Know_Disapproved</defName>
 | 
			
		||||
    <thoughtClass>Thought_MemorySocial</thoughtClass>
 | 
			
		||||
    <durationDays>15</durationDays>
 | 
			
		||||
    <stackLimit>100</stackLimit>
 | 
			
		||||
    <stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
 | 
			
		||||
    <nullifyingTraits>
 | 
			
		||||
      <li>Necrophiliac</li>
 | 
			
		||||
    </nullifyingTraits>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Approved</li>
 | 
			
		||||
      <li>Necrophilia_Acceptable</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <baseOpinionOffset>-10</baseOpinionOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Approved</defName>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>1</stackLimit>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Abhorrent</li>
 | 
			
		||||
      <li>Necrophilia_Horrible</li>
 | 
			
		||||
      <li>Necrophilia_Disapproved</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <description>I had fucked corpse.</description>
 | 
			
		||||
        <baseMoodEffect>4</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>Necrophilia_Know_Approved</defName>
 | 
			
		||||
    <thoughtClass>Thought_MemorySocial</thoughtClass>
 | 
			
		||||
    <durationDays>25</durationDays>
 | 
			
		||||
    <stackLimit>100</stackLimit>
 | 
			
		||||
    <stackLimitForSameOtherPawn>3</stackLimitForSameOtherPawn>
 | 
			
		||||
    <nullifyingPrecepts>
 | 
			
		||||
      <li>Necrophilia_Abhorrent</li>
 | 
			
		||||
      <li>Necrophilia_Horrible</li>
 | 
			
		||||
      <li>Necrophilia_Disapproved</li>
 | 
			
		||||
    </nullifyingPrecepts>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fucked corpse</label>
 | 
			
		||||
        <baseOpinionOffset>5</baseOpinionOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -48,4 +48,26 @@
 | 
			
		|||
    </requiredMemes>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  <PreceptDef>
 | 
			
		||||
    <defName>DrugOrgyCeremony</defName>
 | 
			
		||||
    <label>drug orgy</label>
 | 
			
		||||
    <description>An orgy using massive aphrodisiac.</description>
 | 
			
		||||
    <issue>Ritual</issue>
 | 
			
		||||
    <impact>Medium</impact>
 | 
			
		||||
    <iconPath>UI/Issues/Gangbang</iconPath>
 | 
			
		||||
    <preceptClass>Precept_Ritual</preceptClass>
 | 
			
		||||
    <ritualPatternBase>DrugOrgy</ritualPatternBase>
 | 
			
		||||
    <allowDuplicates>true</allowDuplicates>
 | 
			
		||||
    <countsTowardsPreceptLimit>false</countsTowardsPreceptLimit>
 | 
			
		||||
    <selectionWeight>1.0</selectionWeight>
 | 
			
		||||
    <displayOrderInImpact>100</displayOrderInImpact>
 | 
			
		||||
    <ignoreLimitsInEditMode>false</ignoreLimitsInEditMode>
 | 
			
		||||
    <receivesExpectationsQualityOffset>true</receivesExpectationsQualityOffset>
 | 
			
		||||
    <canGenerateAsSpecialPrecept>false</canGenerateAsSpecialPrecept>
 | 
			
		||||
    <allowStackingRitualObligationAlerts>true</allowStackingRitualObligationAlerts>
 | 
			
		||||
    <requiredMemes>
 | 
			
		||||
      <li>Lewd</li>
 | 
			
		||||
    </requiredMemes>
 | 
			
		||||
  </PreceptDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -17,8 +17,8 @@
 | 
			
		|||
    <descOverride>A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fuck the victim. If the organizer cannot fuck victim, the ritual will be canceled.</descOverride>
 | 
			
		||||
    <iconPathOverride>UI/Issues/Gangbang</iconPathOverride>
 | 
			
		||||
    <ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
    <ritualOutcomeEffect>Gangbang</ritualOutcomeEffect>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
  </RitualPatternDef>
 | 
			
		||||
 | 
			
		||||
  <RitualPatternDef ParentName="GangbangBase">
 | 
			
		||||
| 
						 | 
				
			
			@ -28,8 +28,19 @@
 | 
			
		|||
    <descOverride>A ritualistic animal gangbang. The organizer will give a speech to excite the crowd, then animals begin fuck victim.</descOverride>
 | 
			
		||||
    <iconPathOverride>UI/Commands/Breeding_Pawn_off</iconPathOverride>
 | 
			
		||||
    <ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
    <ritualOutcomeEffect>BestialGangbang</ritualOutcomeEffect>
 | 
			
		||||
    <patternGroupTag/>
 | 
			
		||||
  </RitualPatternDef>
 | 
			
		||||
  
 | 
			
		||||
  <RitualPatternDef ParentName="CelebrationConsumable">
 | 
			
		||||
    <defName>DrugOrgy</defName>
 | 
			
		||||
    <shortDescOverride>drug orgy</shortDescOverride>
 | 
			
		||||
    <descOverride>An orgy with large amounts of aphrodisiac. Participants will gather around a burnbong or incense shrine, light it on fire, and fuck each other while inhaling the fumes.</descOverride>
 | 
			
		||||
    <iconPathOverride>UI/Icons/Rituals/SmokeCircle</iconPathOverride>
 | 
			
		||||
    <ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
 | 
			
		||||
    <ritualObligationTargetFilter>DrugOrgy</ritualObligationTargetFilter>
 | 
			
		||||
    <ritualBehavior>DrugOrgy</ritualBehavior>
 | 
			
		||||
    <ritualOutcomeEffect>DrugOrgy</ritualOutcomeEffect>
 | 
			
		||||
  </RitualPatternDef>
 | 
			
		||||
  
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +33,7 @@
 | 
			
		|||
      </li>
 | 
			
		||||
    </roles>
 | 
			
		||||
    <stages Inherit="False">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim">
 | 
			
		||||
        <defaultDuty>Spectate</defaultDuty>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
          <li Class="StageEndTrigger_PawnDeliveredOrNotValid"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@
 | 
			
		|||
          </li>
 | 
			
		||||
        </roleBehaviors>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim">
 | 
			
		||||
        <defaultDuty>Gangbang</defaultDuty>
 | 
			
		||||
        <essential>True</essential>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +103,7 @@
 | 
			
		|||
          </li>
 | 
			
		||||
        </roleBehaviors>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim">
 | 
			
		||||
        <defaultDuty>Gangbang</defaultDuty>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
          <li Class="StageEndTrigger_DurationPercentage">
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@
 | 
			
		|||
          </li>
 | 
			
		||||
        </roleBehaviors>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim">
 | 
			
		||||
      <li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
 | 
			
		||||
        <defaultDuty>Spectate</defaultDuty>
 | 
			
		||||
        <essential>True</essential>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
| 
						 | 
				
			
			@ -269,4 +269,23 @@
 | 
			
		|||
    </stages>
 | 
			
		||||
  </RitualBehaviorDef>
 | 
			
		||||
  
 | 
			
		||||
  <RitualBehaviorDef ParentName="DateRitualBehavior">
 | 
			
		||||
    <defName>DrugOrgy</defName>
 | 
			
		||||
    <durationTicks>7500</durationTicks>
 | 
			
		||||
    <roles Inherit="False"/>
 | 
			
		||||
    <spectatorsLabel>Participants</spectatorsLabel>
 | 
			
		||||
    <spectatorGerund>participate</spectatorGerund>
 | 
			
		||||
    <stages Inherit="False">
 | 
			
		||||
      <li>
 | 
			
		||||
        <defaultDuty>DrugOrgy</defaultDuty>
 | 
			
		||||
        <endTriggers>
 | 
			
		||||
          <li Class="StageEndTrigger_DurationPercentage">
 | 
			
		||||
            <percentage>1.0</percentage>
 | 
			
		||||
          </li>
 | 
			
		||||
        </endTriggers>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </RitualBehaviorDef>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
    </extraPredictedOutcomeDescriptions>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="RitualOutcomeComp_RolePresentNotSubstituted">
 | 
			
		||||
        <roleId>moralist</roleId>
 | 
			
		||||
        <roleId>initiator</roleId>
 | 
			
		||||
        <label>moral guide present</label>
 | 
			
		||||
        <qualityOffset>0.10</qualityOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
| 
						 | 
				
			
			@ -102,7 +102,7 @@
 | 
			
		|||
    </extraPredictedOutcomeDescriptions>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="RitualOutcomeComp_RolePresentNotSubstituted">
 | 
			
		||||
        <roleId>moralist</roleId>
 | 
			
		||||
        <roleId>initiator</roleId>
 | 
			
		||||
        <label>moral guide present</label>
 | 
			
		||||
        <qualityOffset>0.10</qualityOffset>
 | 
			
		||||
      </li>
 | 
			
		||||
| 
						 | 
				
			
			@ -180,4 +180,75 @@
 | 
			
		|||
  </RitualOutcomeEffectDef>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  <RitualOutcomeEffectDef>
 | 
			
		||||
    <defName>DrugOrgy</defName>
 | 
			
		||||
    <description>Depending on ritual quality, participants will get between {MINMOOD} and {MAXMOOD} mood for {MOODDAYS} days.</description>
 | 
			
		||||
    <workerClass>RitualOutcomeEffectWorker_RemoveConsumableBuilding</workerClass>
 | 
			
		||||
    <extraPredictedOutcomeDescriptions>
 | 
			
		||||
      <li>If the {0} is satisfying, one of the participants might gain an inspiration.</li>
 | 
			
		||||
    </extraPredictedOutcomeDescriptions>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="RitualOutcomeComp_DestroyConsumableBuilding" />
 | 
			
		||||
      <li Class="RitualOutcomeComp_ParticipantCount">
 | 
			
		||||
        <label>participant count</label>
 | 
			
		||||
        <curve>
 | 
			
		||||
          <points>
 | 
			
		||||
            <li>(1,  -0.50)</li>
 | 
			
		||||
            <li>(3,  0.0)</li>
 | 
			
		||||
            <li>(5, 0.10)</li>
 | 
			
		||||
            <li>(10, 0.30)</li>
 | 
			
		||||
          </points>
 | 
			
		||||
        </curve>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RitualOutcomeComp_RoomStat">
 | 
			
		||||
        <label>room impressiveness</label>
 | 
			
		||||
        <statDef>Impressiveness</statDef>
 | 
			
		||||
        <curve>
 | 
			
		||||
          <points>
 | 
			
		||||
            <li>0,  0</li>
 | 
			
		||||
            <li>50,  0.1</li>
 | 
			
		||||
            <li>120, 0.2</li>
 | 
			
		||||
          </points>
 | 
			
		||||
        </curve>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="RJWSexperience.RitualOutcomeComp_NeedBased">
 | 
			
		||||
        <label>statisfied participants</label>
 | 
			
		||||
        <qualityOffset>0.7</qualityOffset>
 | 
			
		||||
        <needDef>Sex</needDef>
 | 
			
		||||
        <minAvgNeed>0.7</minAvgNeed>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
    <outcomeChances>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>Terrible</label>
 | 
			
		||||
        <chance>0.05</chance>
 | 
			
		||||
        <memory>TerribleOrgy</memory>
 | 
			
		||||
        <description>The {0} was terrible!</description>
 | 
			
		||||
        <positivityIndex>-2</positivityIndex>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>Boring</label>
 | 
			
		||||
        <chance>0.10</chance>
 | 
			
		||||
        <memory>BoringOrgy</memory>
 | 
			
		||||
        <description>The {0} was boring.</description>
 | 
			
		||||
        <positivityIndex>-1</positivityIndex>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>Satisfying</label>
 | 
			
		||||
        <chance>0.6</chance>
 | 
			
		||||
        <memory>FunOrgy</memory>
 | 
			
		||||
        <description>The {0} was satisfying.</description>
 | 
			
		||||
        <potentialExtraOutcomeDesc>There's a 5% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
 | 
			
		||||
        <positivityIndex>1</positivityIndex>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>Spectacular</label>
 | 
			
		||||
        <chance>0.25</chance>
 | 
			
		||||
        <memory>UnforgettableOrgy</memory>
 | 
			
		||||
        <description>The {0} was spectacular!</description>
 | 
			
		||||
        <potentialExtraOutcomeDesc>There's a 10% chance that a random participant gets an inspiration.</potentialExtraOutcomeDesc>
 | 
			
		||||
        <positivityIndex>2</positivityIndex>
 | 
			
		||||
      </li>
 | 
			
		||||
    </outcomeChances>
 | 
			
		||||
  </RitualOutcomeEffectDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -4,4 +4,12 @@
 | 
			
		|||
    <defName>RitualSpotOrAltar_Gangbang</defName>
 | 
			
		||||
    <workerClass>RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification</workerClass>
 | 
			
		||||
  </RitualObligationTargetFilterDef>
 | 
			
		||||
  
 | 
			
		||||
  <RitualObligationTargetFilterDef>
 | 
			
		||||
    <defName>DrugOrgy</defName>
 | 
			
		||||
    <workerClass>RitualObligationTargetWorker_ConsumableBuilding</workerClass>
 | 
			
		||||
    <thingDefs>
 | 
			
		||||
      <li>Burnbong_Aphrodisiac</li>
 | 
			
		||||
    </thingDefs>
 | 
			
		||||
  </RitualObligationTargetFilterDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										134
									
								
								RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								RJWSexperience_Ideology/Defs/ThingDefs/Buildings_Ideo_sex.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,134 @@
 | 
			
		|||
<?xml version="1.0" encoding="utf-8" ?>
 | 
			
		||||
<Defs>
 | 
			
		||||
  <ThingDef ParentName="IdeoSmokerBase">
 | 
			
		||||
    <defName>Burnbong_Aphrodisiac</defName>
 | 
			
		||||
    <label>lustbong</label>
 | 
			
		||||
    <description>A wood structure packed with humpshroom. It can be ignited during a ritual and produce a huge amount of humpshroom smoke for a few hours, after which it is destroyed.</description>
 | 
			
		||||
    <drawerType>RealtimeOnly</drawerType>
 | 
			
		||||
    <graphicData>
 | 
			
		||||
      <graphicClass>Graphic_Single</graphicClass>
 | 
			
		||||
      <texPath>Things/Building/Misc/Burnbong/Burnbong</texPath>
 | 
			
		||||
      <drawSize>(1.2,1.2)</drawSize>
 | 
			
		||||
      <shadowData>
 | 
			
		||||
        <volume>(0.92, 1 ,0.92)</volume>
 | 
			
		||||
      </shadowData>
 | 
			
		||||
    </graphicData>
 | 
			
		||||
    <size>(1,1)</size>
 | 
			
		||||
    <costList>
 | 
			
		||||
      <WoodLog>30</WoodLog>
 | 
			
		||||
      <HumpShroom>30</HumpShroom>
 | 
			
		||||
    </costList>
 | 
			
		||||
    <killedLeavings>
 | 
			
		||||
      <HumpShroom>30</HumpShroom>
 | 
			
		||||
    </killedLeavings>
 | 
			
		||||
    <leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
 | 
			
		||||
    <statBases>
 | 
			
		||||
      <MaxHitPoints>50</MaxHitPoints>
 | 
			
		||||
      <WorkToBuild>10000</WorkToBuild>
 | 
			
		||||
      <Mass>25</Mass>
 | 
			
		||||
    </statBases>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="CompProperties_RitualTargetEffecterSpawner">
 | 
			
		||||
        <effecter>BurnbongSmoke</effecter>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_FireOverlayRitual">
 | 
			
		||||
        <fireSize>0.5</fireSize>
 | 
			
		||||
        <offset>(0, 0, 0.42)</offset>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_RitualHediffGiverInRoom">
 | 
			
		||||
        <hediff>HumpShroomEffect</hediff>
 | 
			
		||||
        <resetLastRecreationalDrugTick>true</resetLastRecreationalDrugTick>
 | 
			
		||||
        <minRadius>10</minRadius>
 | 
			
		||||
        <severity>0.01</severity>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
  </ThingDef>
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  <ThingDef ParentName="BuildingBase">
 | 
			
		||||
    <defName>Autobong_Aphrodisiac</defName>
 | 
			
		||||
    <label>estro-bong</label>
 | 
			
		||||
    <description>An automatic humpshroom-burning device which generates an estro-smoke cloud around itself. Anyone in the cloud will become horny over time.</description>
 | 
			
		||||
    <category>Building</category>
 | 
			
		||||
    <graphicData>
 | 
			
		||||
      <texPath>Things/Building/Misc/Autobong/Autobong</texPath>
 | 
			
		||||
      <graphicClass>Graphic_Single</graphicClass>
 | 
			
		||||
      <drawSize>(2,2)</drawSize>
 | 
			
		||||
      <shaderType>CutoutComplex</shaderType>
 | 
			
		||||
    </graphicData>
 | 
			
		||||
    <uiIconPath>Things/Building/Misc/Autobong/Autobong</uiIconPath>
 | 
			
		||||
    <altitudeLayer>Building</altitudeLayer>
 | 
			
		||||
    <passability>PassThroughOnly</passability>
 | 
			
		||||
    <pathCost>42</pathCost>
 | 
			
		||||
    <tickerType>Normal</tickerType>
 | 
			
		||||
    <drawerType>RealtimeOnly</drawerType>
 | 
			
		||||
    <fillPercent>0.20</fillPercent>
 | 
			
		||||
    <canGenerateDefaultDesignator>false</canGenerateDefaultDesignator>
 | 
			
		||||
    <size>(2,2)</size>
 | 
			
		||||
    <statBases>
 | 
			
		||||
      <MaxHitPoints>80</MaxHitPoints>
 | 
			
		||||
      <WorkToBuild>800</WorkToBuild>
 | 
			
		||||
    </statBases>
 | 
			
		||||
    <selectable>true</selectable>
 | 
			
		||||
    <costList>
 | 
			
		||||
      <HumpShroom>10</HumpShroom>
 | 
			
		||||
      <ComponentIndustrial>3</ComponentIndustrial>
 | 
			
		||||
    </costList>
 | 
			
		||||
    <stuffCategories>
 | 
			
		||||
      <li>Metallic</li>
 | 
			
		||||
      <li>Woody</li>
 | 
			
		||||
    </stuffCategories>
 | 
			
		||||
    <costStuffCount>100</costStuffCount>
 | 
			
		||||
    <leaveResourcesWhenKilled>true</leaveResourcesWhenKilled>
 | 
			
		||||
    <researchPrerequisites>
 | 
			
		||||
      <li>MicroelectronicsBasics</li>
 | 
			
		||||
    </researchPrerequisites>
 | 
			
		||||
    <comps>
 | 
			
		||||
      <li Class="CompProperties_Refuelable">
 | 
			
		||||
        <fuelConsumptionRate>0.35</fuelConsumptionRate>
 | 
			
		||||
        <fuelCapacity>10.0</fuelCapacity>
 | 
			
		||||
        <fuelFilter>
 | 
			
		||||
          <thingDefs>
 | 
			
		||||
            <li>HumpShroom</li>
 | 
			
		||||
          </thingDefs>
 | 
			
		||||
        </fuelFilter>
 | 
			
		||||
        <initialFuelPercent>1</initialFuelPercent>
 | 
			
		||||
        <showAllowAutoRefuelToggle>true</showAllowAutoRefuelToggle>
 | 
			
		||||
        <consumeFuelOnlyWhenPowered>true</consumeFuelOnlyWhenPowered>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_Glower">
 | 
			
		||||
        <glowRadius>10</glowRadius>
 | 
			
		||||
        <glowColor>(252,187,113,0)</glowColor>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li>
 | 
			
		||||
        <compClass>CompGatherSpot</compClass>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_Power">
 | 
			
		||||
        <compClass>CompPowerTrader</compClass>
 | 
			
		||||
        <basePowerConsumption>150</basePowerConsumption>
 | 
			
		||||
        <shortCircuitInRain>true</shortCircuitInRain>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_Flickable"/>
 | 
			
		||||
      <li Class="CompProperties_GiveHediffSeverity">
 | 
			
		||||
        <hediff>HumpShroomEffect</hediff>
 | 
			
		||||
        <range>4.9</range>
 | 
			
		||||
        <severityPerSecond>0.005</severityPerSecond>
 | 
			
		||||
        <drugExposure>true</drugExposure>
 | 
			
		||||
      </li>
 | 
			
		||||
      <li Class="CompProperties_SmokeCloudMaker">
 | 
			
		||||
        <sourceStreamEffect>BurnbongSmoke</sourceStreamEffect>
 | 
			
		||||
        <cloudRadius>4.9</cloudRadius>
 | 
			
		||||
        <fleckScale>4</fleckScale>
 | 
			
		||||
        <cloudFleck>AutobongSmoke</cloudFleck>
 | 
			
		||||
        <fleckSpawnMTB>25</fleckSpawnMTB>
 | 
			
		||||
      </li>
 | 
			
		||||
    </comps>
 | 
			
		||||
    <designationCategory>Misc</designationCategory>
 | 
			
		||||
    <drawPlaceWorkersWhileSelected>true</drawPlaceWorkersWhileSelected>
 | 
			
		||||
    <placeWorkers>
 | 
			
		||||
      <li>PlaceWorker_SmokeCloudMaker</li>
 | 
			
		||||
    </placeWorkers>
 | 
			
		||||
  </ThingDef>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Defs>
 | 
			
		||||
| 
						 | 
				
			
			@ -57,4 +57,59 @@
 | 
			
		|||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>TerribleOrgy</defName>
 | 
			
		||||
    <thoughtClass>Thought_AttendedRitual</thoughtClass>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>3</stackLimit>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>terrible orgy</label>
 | 
			
		||||
        <description>That orgy was terrible. ugh.</description>
 | 
			
		||||
        <baseMoodEffect>-3</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>BoringOrgy</defName>
 | 
			
		||||
    <thoughtClass>Thought_AttendedRitual</thoughtClass>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>3</stackLimit>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>boring orgy</label>
 | 
			
		||||
        <description>That orgy was not good. Wish I never went.</description>
 | 
			
		||||
        <baseMoodEffect>-1</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>FunOrgy</defName>
 | 
			
		||||
    <thoughtClass>Thought_AttendedRitual</thoughtClass>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>3</stackLimit>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>fun orgy</label>
 | 
			
		||||
        <description>That was a fun orgy. It really satisfied me.</description>
 | 
			
		||||
        <baseMoodEffect>8</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
 | 
			
		||||
  <ThoughtDef>
 | 
			
		||||
    <defName>UnforgettableOrgy</defName>
 | 
			
		||||
    <thoughtClass>Thought_AttendedRitual</thoughtClass>
 | 
			
		||||
    <durationDays>6</durationDays>
 | 
			
		||||
    <stackLimit>3</stackLimit>
 | 
			
		||||
    <stages>
 | 
			
		||||
      <li>
 | 
			
		||||
        <label>unforgettable orgy</label>
 | 
			
		||||
        <description>That orgy was awesome! Everything was perfect.</description>
 | 
			
		||||
        <baseMoodEffect>16</baseMoodEffect>
 | 
			
		||||
      </li>
 | 
			
		||||
    </stages>
 | 
			
		||||
  </ThoughtDef>
 | 
			
		||||
</Defs>
 | 
			
		||||
							
								
								
									
										47
									
								
								RJWSexperience_Ideology/Patches/RJW_Drugs.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								RJWSexperience_Ideology/Patches/RJW_Drugs.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
 | 
			
		||||
<Patch>
 | 
			
		||||
	<Operation Class="PatchOperationReplace">
 | 
			
		||||
		<xpath>Defs/HediffDef[defName="HumpShroomEffect"]/stages</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<stages>
 | 
			
		||||
				<li>
 | 
			
		||||
					<label>lingering</label>
 | 
			
		||||
					<statOffsets>
 | 
			
		||||
						<SexFrequency>1.25</SexFrequency>
 | 
			
		||||
						<SexSatisfaction>0.25</SexSatisfaction>
 | 
			
		||||
					</statOffsets>
 | 
			
		||||
				</li>
 | 
			
		||||
				<li>
 | 
			
		||||
					<minSeverity>0.3</minSeverity>
 | 
			
		||||
					<label>mild</label>
 | 
			
		||||
					<restFallFactor>1.1</restFallFactor>
 | 
			
		||||
					<statOffsets>
 | 
			
		||||
						<SexFrequency>2</SexFrequency>
 | 
			
		||||
						<SexSatisfaction>0.5</SexSatisfaction>
 | 
			
		||||
					</statOffsets>
 | 
			
		||||
				</li>
 | 
			
		||||
				<li>
 | 
			
		||||
					<minSeverity>0.6</minSeverity>
 | 
			
		||||
					<label>moderate</label>
 | 
			
		||||
					<restFallFactor>1.33</restFallFactor>
 | 
			
		||||
					<statOffsets>
 | 
			
		||||
						<SexFrequency>3</SexFrequency>
 | 
			
		||||
						<SexSatisfaction>0.75</SexSatisfaction>
 | 
			
		||||
					</statOffsets>
 | 
			
		||||
				</li>
 | 
			
		||||
				<li>
 | 
			
		||||
					<minSeverity>0.9</minSeverity>
 | 
			
		||||
					<label>high</label>
 | 
			
		||||
					<restFallFactor>1.33</restFallFactor>
 | 
			
		||||
					<statOffsets>
 | 
			
		||||
						<SexFrequency>5</SexFrequency>
 | 
			
		||||
						<SexSatisfaction>1.5</SexSatisfaction>
 | 
			
		||||
					</statOffsets>
 | 
			
		||||
				</li>
 | 
			
		||||
			</stages>
 | 
			
		||||
		</value>
 | 
			
		||||
	</Operation>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Patch>
 | 
			
		||||
							
								
								
									
										29
									
								
								RJWSexperience_Ideology/Patches/RJW_Precepts.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								RJWSexperience_Ideology/Patches/RJW_Precepts.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
 | 
			
		||||
<Patch>
 | 
			
		||||
	<Operation Class="PatchOperationAdd">
 | 
			
		||||
		<xpath>Defs/PreceptDef[defName="Corpses_DontCare"]/requiredMemes</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<li>Necrophile</li>
 | 
			
		||||
		</value>
 | 
			
		||||
	</Operation>
 | 
			
		||||
 | 
			
		||||
	<Operation Class="PatchOperationAdd">
 | 
			
		||||
		<xpath>Defs/PreceptDef[defName="Corpses_DontCare"]/associatedMemes</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<li>Necrophile</li>
 | 
			
		||||
		</value>
 | 
			
		||||
	</Operation>
 | 
			
		||||
 | 
			
		||||
	<Operation Class="PatchOperationAdd">
 | 
			
		||||
		<xpath>Defs/PreceptDef[defName="Lovin_FreeApproved"]</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<statOffsets>
 | 
			
		||||
					<SexFrequency>0.5</SexFrequency>
 | 
			
		||||
					<SexAbility>0.25</SexAbility>
 | 
			
		||||
			</statOffsets>
 | 
			
		||||
		</value>
 | 
			
		||||
	</Operation>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Patch>
 | 
			
		||||
							
								
								
									
										14
									
								
								RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								RJWSexperience_Ideology/Patches/RJW_StatDefs_Ideo.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
 | 
			
		||||
<Patch>
 | 
			
		||||
	<Operation Class="PatchOperationAdd">
 | 
			
		||||
		<xpath>Defs/StatDef[defName="Vulnerability"]/parts</xpath>
 | 
			
		||||
		<value>
 | 
			
		||||
			<li Class="RJWSexperience.StatPart_GenderPrimacy">
 | 
			
		||||
				<modifier>0.5</modifier>
 | 
			
		||||
			</li>
 | 
			
		||||
		</value>
 | 
			
		||||
	</Operation>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
</Patch>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Textures/Things/Item/CumBucket.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Textures/Things/Item/CumBucket.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.1 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Textures/UI/Issues/Necrophilia.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Textures/UI/Issues/Necrophilia.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								Textures/UI/Memes/Necrophile.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Textures/UI/Memes/Necrophile.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.8 KiB  | 
| 
						 | 
				
			
			@ -1,3 +1,17 @@
 | 
			
		|||
Version Beta 1.0.1.8
 | 
			
		||||
 - fixed animal gangbang doesn't work properly
 | 
			
		||||
 - fixed bastard relation was not removed after marriage
 | 
			
		||||
 - fixed moral guide present
 | 
			
		||||
 - separated ideology defs
 | 
			
		||||
 - added cum bucket
 | 
			
		||||
   - masturbating around this will collect cum
 | 
			
		||||
 - added cum addiction
 | 
			
		||||
 - added necrophile meme
 | 
			
		||||
 - added lewd meme
 | 
			
		||||
 - added drug orgy ritual
 | 
			
		||||
 - added burnbong and autobong using humpshroom(require lewd meme)
 | 
			
		||||
 - added some stages for humpshroom effect
 | 
			
		||||
 | 
			
		||||
Version Beta 1.0.1.7
 | 
			
		||||
 - added baby faction and social affection precepts 
 | 
			
		||||
 - changed stat calculation of lust
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue