1.0.1.8
This commit is contained in:
parent
183fb87f02
commit
b709cab584
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Manifest>
|
<Manifest>
|
||||||
<identifier>RJW Sexperience</identifier>
|
<identifier>RJW Sexperience</identifier>
|
||||||
<version>1.0.1.7</version>
|
<version>1.0.1.8</version>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<incompatibleWith />
|
<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>
|
|
|
@ -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" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<Defs>
|
<Defs>
|
||||||
<ThingDef ParentName="OrganicProductBase">
|
<ThingDef Name ="GatheredCum" ParentName="OrganicProductBase">
|
||||||
<defName>GatheredCum</defName>
|
<defName>GatheredCum</defName>
|
||||||
<label>cum</label>
|
<label>cum</label>
|
||||||
<description>Gathered cum.</description>
|
<description>Gathered cum.</description>
|
||||||
|
@ -24,13 +24,33 @@
|
||||||
<Flammability>0.1</Flammability>
|
<Flammability>0.1</Flammability>
|
||||||
</statBases>
|
</statBases>
|
||||||
<ingestible>
|
<ingestible>
|
||||||
<foodType>Fluid, AnimalProduct</foodType>
|
<foodType>Fluid, AnimalProduct</foodType>
|
||||||
<preferability>DesperateOnlyForHumanlikes</preferability>
|
<preferability>DesperateOnlyForHumanlikes</preferability>
|
||||||
<tasteThought>AteCum</tasteThought>
|
<tasteThought>AteCum</tasteThought>
|
||||||
<specialThoughtAsIngredient>AteCum</specialThoughtAsIngredient>
|
<specialThoughtAsIngredient>AteCum</specialThoughtAsIngredient>
|
||||||
<optimalityOffsetHumanlikes>-10</optimalityOffsetHumanlikes>
|
<optimalityOffsetHumanlikes>-10</optimalityOffsetHumanlikes>
|
||||||
<optimalityOffsetFeedingAnimals>-10</optimalityOffsetFeedingAnimals>
|
<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>
|
</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>
|
||||||
|
|
||||||
<ThingDef ParentName="PlantFoodRawBase">
|
<ThingDef ParentName="PlantFoodRawBase">
|
||||||
|
@ -57,6 +77,16 @@
|
||||||
<preferability>DesperateOnlyForHumanlikes</preferability>
|
<preferability>DesperateOnlyForHumanlikes</preferability>
|
||||||
<tasteThought>AteCum</tasteThought>
|
<tasteThought>AteCum</tasteThought>
|
||||||
<specialThoughtAsIngredient>AteCum</specialThoughtAsIngredient>
|
<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>
|
</ingestible>
|
||||||
<altitudeLayer>Item</altitudeLayer>
|
<altitudeLayer>Item</altitudeLayer>
|
||||||
<tickerType>Never</tickerType>
|
<tickerType>Never</tickerType>
|
||||||
|
@ -67,7 +97,89 @@
|
||||||
<thingCategories>
|
<thingCategories>
|
||||||
<li>AnimalProductRaw</li>
|
<li>AnimalProductRaw</li>
|
||||||
</thingCategories>
|
</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>
|
</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>
|
</Defs>
|
|
@ -11,6 +11,7 @@
|
||||||
<RSNotHuman>not human</RSNotHuman>
|
<RSNotHuman>not human</RSNotHuman>
|
||||||
<RSNotAnimal>not animal</RSNotAnimal>
|
<RSNotAnimal>not animal</RSNotAnimal>
|
||||||
<RSShouldCanFuck>capable of sex is required</RSShouldCanFuck>
|
<RSShouldCanFuck>capable of sex is required</RSShouldCanFuck>
|
||||||
|
<RSTotalGatheredCum>Total gathered cum: </RSTotalGatheredCum>
|
||||||
|
|
||||||
<RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
|
<RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
|
||||||
<RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>
|
<RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>
|
||||||
|
|
|
@ -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">
|
<Operation Class="PatchOperationAdd">
|
||||||
<xpath>Defs/StatDef[defName="Vulnerability"]/parts</xpath>
|
<xpath>Defs/StatDef[defName="Vulnerability"]/parts</xpath>
|
||||||
<value>
|
<value>
|
||||||
<li Class="RJWSexperience.StatPart_GenderPrimacy">
|
|
||||||
<modifier>0.5</modifier>
|
|
||||||
</li>
|
|
||||||
<li Class="RJWSexperience.StatPart_Slave">
|
<li Class="RJWSexperience.StatPart_Slave">
|
||||||
<factor>3.0</factor>
|
<factor>3.0</factor>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 RSNotHuman = "RSNotHuman".Translate();
|
||||||
public static readonly string RSNotAnimal = "RSNotAnimal".Translate();
|
public static readonly string RSNotAnimal = "RSNotAnimal".Translate();
|
||||||
public static readonly string RSShouldCanFuck = "RSShouldCanFuck".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();
|
public static readonly string Option_1_Label = "RSOption_1_Label".Translate();
|
||||||
|
|
|
@ -16,17 +16,16 @@ namespace RJWSexperience
|
||||||
{
|
{
|
||||||
Pawn mother = other.GetMother();
|
Pawn mother = other.GetMother();
|
||||||
Pawn father = other.GetFather();
|
Pawn father = other.GetFather();
|
||||||
|
|
||||||
if (me != other && (mother == me || father == me))
|
if (me != other && (mother == me || father == me))
|
||||||
{
|
{
|
||||||
//if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) return true;
|
if (mother == null || father == null) return true;
|
||||||
//if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true) return true;
|
else if (mother.relations != null) return !(mother.relations.DirectRelationExists(PawnRelationDefOf.Spouse, father) || mother.relations.DirectRelationExists(PawnRelationDefOf.ExSpouse, father));
|
||||||
return (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) || (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,11 +77,14 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Buildings.cs" />
|
||||||
<Compile Include="Configurations.cs" />
|
<Compile Include="Configurations.cs" />
|
||||||
<Compile Include="DebugAction.cs" />
|
<Compile Include="DebugAction.cs" />
|
||||||
<Compile Include="GoodwillSituationWorker_MemeCompatibility.cs" />
|
<Compile Include="GoodwillSituationWorker_MemeCompatibility.cs" />
|
||||||
<Compile Include="Harmony.cs" />
|
<Compile Include="Harmony.cs" />
|
||||||
|
<Compile Include="Ideology\RJW_Patch_Ideo.cs" />
|
||||||
<Compile Include="PawnRelationWorkers.cs" />
|
<Compile Include="PawnRelationWorkers.cs" />
|
||||||
|
<Compile Include="Rituals\JobGiver_DrugOrgy.cs" />
|
||||||
<Compile Include="Rituals\JobGiver_GangbangVictim.cs" />
|
<Compile Include="Rituals\JobGiver_GangbangVictim.cs" />
|
||||||
<Compile Include="Keyed.cs" />
|
<Compile Include="Keyed.cs" />
|
||||||
<Compile Include="PreceptComp_SelftTookThoughtExtended.cs" />
|
<Compile Include="PreceptComp_SelftTookThoughtExtended.cs" />
|
||||||
|
|
|
@ -49,8 +49,8 @@ namespace RJWSexperience
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Pawn mother = baby.GetMother();
|
Pawn mother = baby.GetMother();
|
||||||
ideo = mother.Ideo;
|
ideo = mother?.Ideo;
|
||||||
return mother.Faction;
|
return mother?.Faction ?? baby.Faction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,28 +96,32 @@ namespace RJWSexperience
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")]
|
[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)
|
public static void Prefix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, ref float satisfaction)
|
||||||
{
|
{
|
||||||
satisfaction *= partner.GetSexStat();
|
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)
|
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);
|
float? lust = pawn.records?.GetValue(VariousDefOf.Lust);
|
||||||
if (lust != null)
|
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.
|
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.
|
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)
|
public static float LustIncrementFactor(float lust)
|
||||||
|
@ -125,43 +129,8 @@ namespace RJWSexperience
|
||||||
return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2));
|
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")]
|
[HarmonyPatch(typeof(xxx), "TransferNutrition")]
|
||||||
|
@ -178,212 +147,7 @@ namespace RJWSexperience
|
||||||
sextype == xxx.rjwSextype.Fellatio ||
|
sextype == xxx.rjwSextype.Fellatio ||
|
||||||
sextype == xxx.rjwSextype.Sixtynine))
|
sextype == xxx.rjwSextype.Sixtynine))
|
||||||
{
|
{
|
||||||
receiver.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum);
|
receiver.CumDrugEffect();
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)));
|
Find.HistoryEventsManager.RecordEvent(new HistoryEvent(VariousDefOf.Incestuos_Marriage, secondPawn.Named(HistoryEventArgsNames.Doer)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")]
|
[HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")]
|
||||||
|
|
|
@ -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.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
|
||||||
if (pawn.Ideo?.HasMeme(MemeDefOf.FemaleSupremacy) ?? false && pawn.gender != Gender.Female) 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.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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -97,10 +97,10 @@ namespace RJWSexperience
|
||||||
|
|
||||||
public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
|
public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
|
||||||
{
|
{
|
||||||
//if (precept != null)
|
if (precept != null)
|
||||||
//{
|
{
|
||||||
// if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false;
|
if (precept.ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal)) return false;
|
||||||
//}
|
}
|
||||||
if (!xxx.can_rape(animal)) return false;
|
if (!xxx.can_rape(animal)) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,15 @@ namespace RJWSexperience
|
||||||
|
|
||||||
protected int recordIncrement = 1;
|
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()
|
public override void ExposeData()
|
||||||
{
|
{
|
||||||
base.ExposeData();
|
base.ExposeData();
|
||||||
|
|
|
@ -84,5 +84,83 @@ namespace RJWSexperience
|
||||||
return 1 + lust / 100f;
|
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 SkillDef SexSkill = DefDatabase<SkillDef>.GetNamed("Sex");
|
||||||
public static readonly ThoughtDef_Recordbased AteCum = DefDatabase<ThoughtDef_Recordbased>.GetNamed("AteCum");
|
public static readonly ThoughtDef_Recordbased AteCum = DefDatabase<ThoughtDef_Recordbased>.GetNamed("AteCum");
|
||||||
public static readonly JobDef RapeVictim = DefDatabase<JobDef>.GetNamed("RapeVictim");
|
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 Zoophile = DefDatabase<MemeDef>.GetNamed("Zoophile");
|
||||||
[MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase<MemeDef>.GetNamed("Rapist");
|
[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 SexWithAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithAnimal");
|
||||||
[MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithVeneratedAnimal");
|
[MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase<HistoryEventDef>.GetNamed("SexWithVeneratedAnimal");
|
||||||
[MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase<HistoryEventDef>.GetNamed("Raped");
|
[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 MiscSex = DefDatabase<HistoryEventDef>.GetNamed("MiscSex");
|
||||||
[MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase<HistoryEventDef>.GetNamed("PromiscuousSex");
|
[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 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_Abhorrent = DefDatabase<PreceptDef>.GetNamed("Bestiality_Abhorrent");
|
||||||
[MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase<PreceptDef>.GetNamed("Bestiality_Horrible");
|
[MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase<PreceptDef>.GetNamed("Bestiality_Horrible");
|
||||||
[MayRequireIdeology] public static readonly PreceptDef Bestiality_Disapproved = DefDatabase<PreceptDef>.GetNamed("Bestiality_Disapproved");
|
[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_AlwaysMother = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysMother");
|
||||||
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysFather");
|
[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 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>
|
</subNodes>
|
||||||
</thinkNode>
|
</thinkNode>
|
||||||
</DutyDef>
|
</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>
|
</Defs>
|
|
@ -11,6 +11,14 @@
|
||||||
<naturalGoodwillOffset>30</naturalGoodwillOffset>
|
<naturalGoodwillOffset>30</naturalGoodwillOffset>
|
||||||
</GoodwillSituationDef>
|
</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 -->
|
<!-- Disagreement -->
|
||||||
|
|
||||||
<GoodwillSituationDef>
|
<GoodwillSituationDef>
|
||||||
|
@ -30,4 +38,13 @@
|
||||||
<versusAll>true</versusAll>
|
<versusAll>true</versusAll>
|
||||||
<naturalGoodwillOffset>-20</naturalGoodwillOffset>
|
<naturalGoodwillOffset>-20</naturalGoodwillOffset>
|
||||||
</GoodwillSituationDef>
|
</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>
|
</Defs>
|
|
@ -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>
|
</agreeableTraits>
|
||||||
</MemeDef>
|
</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>
|
</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>
|
</requiredMemes>
|
||||||
</PreceptDef>
|
</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>
|
</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>
|
<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>
|
<iconPathOverride>UI/Issues/Gangbang</iconPathOverride>
|
||||||
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
|
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
|
||||||
<patternGroupTag/>
|
|
||||||
<ritualOutcomeEffect>Gangbang</ritualOutcomeEffect>
|
<ritualOutcomeEffect>Gangbang</ritualOutcomeEffect>
|
||||||
|
<patternGroupTag/>
|
||||||
</RitualPatternDef>
|
</RitualPatternDef>
|
||||||
|
|
||||||
<RitualPatternDef ParentName="GangbangBase">
|
<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>
|
<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>
|
<iconPathOverride>UI/Commands/Breeding_Pawn_off</iconPathOverride>
|
||||||
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
|
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
|
||||||
<patternGroupTag/>
|
|
||||||
<ritualOutcomeEffect>BestialGangbang</ritualOutcomeEffect>
|
<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>
|
</RitualPatternDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
|
@ -33,7 +33,7 @@
|
||||||
</li>
|
</li>
|
||||||
</roles>
|
</roles>
|
||||||
<stages Inherit="False">
|
<stages Inherit="False">
|
||||||
<li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
|
<li Class="RJWSexperience.RitualStage_InteractWithVictim">
|
||||||
<defaultDuty>Spectate</defaultDuty>
|
<defaultDuty>Spectate</defaultDuty>
|
||||||
<endTriggers>
|
<endTriggers>
|
||||||
<li Class="StageEndTrigger_PawnDeliveredOrNotValid"/>
|
<li Class="StageEndTrigger_PawnDeliveredOrNotValid"/>
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
</li>
|
</li>
|
||||||
</roleBehaviors>
|
</roleBehaviors>
|
||||||
</li>
|
</li>
|
||||||
<li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
|
<li Class="RJWSexperience.RitualStage_InteractWithVictim">
|
||||||
<defaultDuty>Gangbang</defaultDuty>
|
<defaultDuty>Gangbang</defaultDuty>
|
||||||
<essential>True</essential>
|
<essential>True</essential>
|
||||||
<endTriggers>
|
<endTriggers>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
</li>
|
</li>
|
||||||
</roleBehaviors>
|
</roleBehaviors>
|
||||||
</li>
|
</li>
|
||||||
<li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
|
<li Class="RJWSexperience.RitualStage_InteractWithVictim">
|
||||||
<defaultDuty>Gangbang</defaultDuty>
|
<defaultDuty>Gangbang</defaultDuty>
|
||||||
<endTriggers>
|
<endTriggers>
|
||||||
<li Class="StageEndTrigger_DurationPercentage">
|
<li Class="StageEndTrigger_DurationPercentage">
|
||||||
|
@ -222,7 +222,7 @@
|
||||||
</li>
|
</li>
|
||||||
</roleBehaviors>
|
</roleBehaviors>
|
||||||
</li>
|
</li>
|
||||||
<li Class="RJWSexperience.RitualStage_InteractWithVictim">
|
<li Class="RJWSexperience.RitualStage_InteractWithVictim_All">
|
||||||
<defaultDuty>Spectate</defaultDuty>
|
<defaultDuty>Spectate</defaultDuty>
|
||||||
<essential>True</essential>
|
<essential>True</essential>
|
||||||
<endTriggers>
|
<endTriggers>
|
||||||
|
@ -269,4 +269,23 @@
|
||||||
</stages>
|
</stages>
|
||||||
</RitualBehaviorDef>
|
</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>
|
</Defs>
|
|
@ -9,7 +9,7 @@
|
||||||
</extraPredictedOutcomeDescriptions>
|
</extraPredictedOutcomeDescriptions>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
|
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
|
||||||
<roleId>moralist</roleId>
|
<roleId>initiator</roleId>
|
||||||
<label>moral guide present</label>
|
<label>moral guide present</label>
|
||||||
<qualityOffset>0.10</qualityOffset>
|
<qualityOffset>0.10</qualityOffset>
|
||||||
</li>
|
</li>
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
</extraPredictedOutcomeDescriptions>
|
</extraPredictedOutcomeDescriptions>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
|
<li Class="RitualOutcomeComp_RolePresentNotSubstituted">
|
||||||
<roleId>moralist</roleId>
|
<roleId>initiator</roleId>
|
||||||
<label>moral guide present</label>
|
<label>moral guide present</label>
|
||||||
<qualityOffset>0.10</qualityOffset>
|
<qualityOffset>0.10</qualityOffset>
|
||||||
</li>
|
</li>
|
||||||
|
@ -180,4 +180,75 @@
|
||||||
</RitualOutcomeEffectDef>
|
</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>
|
</Defs>
|
|
@ -4,4 +4,12 @@
|
||||||
<defName>RitualSpotOrAltar_Gangbang</defName>
|
<defName>RitualSpotOrAltar_Gangbang</defName>
|
||||||
<workerClass>RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification</workerClass>
|
<workerClass>RitualObligationTargetWorker_AnyRitualSpotOrAltar_Scarification</workerClass>
|
||||||
</RitualObligationTargetFilterDef>
|
</RitualObligationTargetFilterDef>
|
||||||
|
|
||||||
|
<RitualObligationTargetFilterDef>
|
||||||
|
<defName>DrugOrgy</defName>
|
||||||
|
<workerClass>RitualObligationTargetWorker_ConsumableBuilding</workerClass>
|
||||||
|
<thingDefs>
|
||||||
|
<li>Burnbong_Aphrodisiac</li>
|
||||||
|
</thingDefs>
|
||||||
|
</RitualObligationTargetFilterDef>
|
||||||
</Defs>
|
</Defs>
|
|
@ -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>
|
</stages>
|
||||||
</ThoughtDef>
|
</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>
|
</Defs>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
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
|
Version Beta 1.0.1.7
|
||||||
- added baby faction and social affection precepts
|
- added baby faction and social affection precepts
|
||||||
- changed stat calculation of lust
|
- changed stat calculation of lust
|
||||||
|
|
Loading…
Reference in New Issue