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