diff --git a/Source/IdeologyAddon/DebugAction.cs b/Source/IdeologyAddon/DebugAction.cs
index 55838d7..91f5b20 100644
--- a/Source/IdeologyAddon/DebugAction.cs
+++ b/Source/IdeologyAddon/DebugAction.cs
@@ -7,16 +7,16 @@ using Verse;
namespace RJWSexperience.Ideology
{
- internal static class DebugAction
+ internal class DebugAction
{
[DebugAction("RJW Sexperience Ideology", "Test marriage event", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)]
- public static void GenerateMarriageEvent(Pawn p)
+ private static void GenerateMarriageEvent(Pawn p)
{
Pawn hero = p.Map.PlayerPawnsForStoryteller.First(x => x.IsDesignatedHero());
if (hero == null)
return;
- RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p);
- RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero);
+ RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(hero, p);
+ RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(p, hero);
}
[DebugAction("RJW Sexperience Ideology", "Manual romance check", false, true, actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.PlayingOnMap)]
diff --git a/Source/IdeologyAddon/IdeoUtility.cs b/Source/IdeologyAddon/IdeoUtility.cs
index 05ffd75..206b8eb 100644
--- a/Source/IdeologyAddon/IdeoUtility.cs
+++ b/Source/IdeologyAddon/IdeoUtility.cs
@@ -12,9 +12,9 @@ namespace RJWSexperience.Ideology
if (ideo == null)
return false;
- if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Female) && pawn.gender == Gender.Female)
+ if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Female) && pawn.gender == Gender.Female)
return true;
- else if (ideo.HasPrecept(RsiDefOf.Precept.Submissive_Male) && pawn.gender == Gender.Male)
+ else if (ideo.HasPrecept(RsiPreceptDefOf.Submissive_Male) && pawn.gender == Gender.Male)
return true;
return false;
@@ -89,7 +89,7 @@ namespace RJWSexperience.Ideology
Hediff pregnancy = PregnancyHelper.GetPregnancy(pawn);
// Currently RJW does not check Biotech pregnancy
- if (pregnancy == null && RsiDefOf.Hediff.PregnantHuman != null)
+ if (pregnancy == null && VariousDefOf.PregnantHuman != null)
{
pregnancy = pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnantHuman);
}
diff --git a/Source/IdeologyAddon/IdeologyAddon.csproj b/Source/IdeologyAddon/IdeologyAddon.csproj
index 9f06941..63f6689 100644
--- a/Source/IdeologyAddon/IdeologyAddon.csproj
+++ b/Source/IdeologyAddon/IdeologyAddon.csproj
@@ -63,6 +63,8 @@
+
+
@@ -93,7 +95,7 @@
-
+
diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs b/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs
index 18d8550..2a22c2c 100644
--- a/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs
+++ b/Source/IdeologyAddon/Patches/RJW_Patch_ChancePerHour.cs
@@ -15,7 +15,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
- if (!RsiDefOf.HistoryEvent.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo())
+ if (!RsiHistoryEventDefOf.RSI_SexWithAnimal.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
- if (!RsiDefOf.HistoryEvent.RSI_Raped.CreateEvent(pawn).DoerWillingToDo())
+ if (!RsiHistoryEventDefOf.RSI_Raped.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@@ -48,7 +48,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || pawn.Ideo == null) // ideo is null if don't have dlc
return;
- if (!RsiDefOf.HistoryEvent.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo())
+ if (!RsiHistoryEventDefOf.RSI_SexWithCorpse.CreateEvent(pawn).DoerWillingToDo())
{
__result = -2f;
return;
@@ -65,7 +65,7 @@ namespace RJWSexperience.Ideology.Patches
if (__result < 0f || p.Ideo == null) // ideo is null if don't have dlc
return;
- if (!RsiDefOf.HistoryEvent.RSI_Masturbated.CreateEvent(p).DoerWillingToDo())
+ if (!RsiHistoryEventDefOf.RSI_Masturbated.CreateEvent(p).DoerWillingToDo())
{
__result = -2f;
return;
diff --git a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
index 4a06922..e52b361 100644
--- a/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
+++ b/Source/IdeologyAddon/Patches/RJW_Patch_Ideo.cs
@@ -19,7 +19,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null && !pawn.IsSubmissive())
{
- __result = __result || ideo.HasMeme(RsiDefOf.Meme.Rapist);
+ __result = __result || ideo.HasMeme(VariousDefOf.Rapist);
}
}
}
@@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null)
{
- __result = __result || ideo.HasMeme(RsiDefOf.Meme.Zoophile);
+ __result = __result || ideo.HasMeme(VariousDefOf.Zoophile);
}
}
}
@@ -45,7 +45,7 @@ namespace RJWSexperience.Ideology.Patches
Ideo ideo = pawn.Ideo;
if (ideo != null)
{
- __result = __result || ideo.HasMeme(RsiDefOf.Meme.Necrophile);
+ __result = __result || ideo.HasMeme(VariousDefOf.Necrophile);
}
}
}
@@ -85,10 +85,10 @@ namespace RJWSexperience.Ideology.Patches
private static void AfterSexHuman(Pawn human, Pawn partner)
{
- RsiDefOf.HistoryEvent.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner);
+ RsiHistoryEventDefOf.RSI_NonIncestuosSex.RecordEventWithPartner(human, partner);
if (partner.IsAnimal())
- RsiDefOf.HistoryEvent.RSI_SexWithAnimal.RecordEventWithPartner(human, partner);
+ RsiHistoryEventDefOf.RSI_SexWithAnimal.RecordEventWithPartner(human, partner);
}
}
@@ -113,13 +113,11 @@ namespace RJWSexperience.Ideology.Patches
public static float PreceptSextype(Pawn pawn, Pawn partner, float score, List historyEventDefs)
{
- for (int i = 0; i < historyEventDefs.Count; i++)
+ foreach(HistoryEventDef eventDef in historyEventDefs)
{
- HistoryEventDef eventDef = historyEventDefs[i];
-
if (eventDef.CreateEventWithPartner(pawn, partner).DoerWillingToDo())
{
- float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat, cacheStaleAfterTicks: 60)));
+ float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, pawn.GetStatValue(xxx.sex_drive_stat)));
return score * mult;
}
}
@@ -150,7 +148,7 @@ namespace RJWSexperience.Ideology.Patches
public static void Postfix(Pawn pawn, ref bool __result)
{
Ideo ideo = pawn.Ideo;
- if (ideo?.HasMeme(RsiDefOf.Meme.Zoophile) == true)
+ if (ideo?.HasMeme(VariousDefOf.Zoophile) == true)
{
SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true;
__result = true;
@@ -215,14 +213,14 @@ namespace RJWSexperience.Ideology.Patches
Ideo mainideo = playerfaction.ideos.PrimaryIdeo;
if (mainideo != null)
{
- if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysFather))
+ if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysFather))
{
Pawn parent = baby.GetFather() ?? baby.GetMother();
ideo = parent.Ideo;
return parent.Faction;
}
- else if (mainideo.HasPrecept(RsiDefOf.Precept.BabyFaction_AlwaysColony))
+ else if (mainideo.HasPrecept(RsiPreceptDefOf.BabyFaction_AlwaysColony))
{
ideo = mainideo;
return playerfaction;
@@ -243,7 +241,7 @@ namespace RJWSexperience.Ideology.Patches
if (props.pawn?.Ideo == null || !props.hasPartner())
return;
- if (props.partner.Ideo?.HasPrecept(RsiDefOf.Precept.ProselyzingByOrgasm) == true)
+ if (props.partner.Ideo?.HasPrecept(RsiPreceptDefOf.ProselyzingByOrgasm) == true)
{
// Pawn is the one having the orgasm
// Partner is "giving" the orgasm, hence the pawn will be converted towards the partners ideology
diff --git a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
index 5bd03b3..9a54dd4 100644
--- a/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
+++ b/Source/IdeologyAddon/Patches/Rimworld_Patch.cs
@@ -16,8 +16,8 @@ namespace RJWSexperience.Ideology.Patches
{
public static void Postfix(Pawn firstPawn, Pawn secondPawn)
{
- RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
- RsiDefOf.HistoryEvent.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
+ RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(firstPawn, secondPawn);
+ RsiHistoryEventDefOf.RSI_NonIncestuosMarriage.RecordEventWithPartner(secondPawn, firstPawn);
}
}
@@ -81,7 +81,7 @@ namespace RJWSexperience.Ideology.Patches
/// Forbid romance option
public static bool RsiIncestuous(Pawn one, Pawn two)
{
- PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == RsiDefOf.Issue.Incestuos);
+ PreceptDef incestuousPrecept = one.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos);
var allowManualRomanceOnlyFor = incestuousPrecept?.GetModExtension()?.allowManualRomanceOnlyFor;
BloodRelationDegree relationDegree = RelationHelpers.GetBloodRelationDegree(one, two);
diff --git a/Source/IdeologyAddon/Patches/Sexperience_Patch.cs b/Source/IdeologyAddon/Patches/Sexperience_Patch.cs
index 4f7471e..1be61cd 100644
--- a/Source/IdeologyAddon/Patches/Sexperience_Patch.cs
+++ b/Source/IdeologyAddon/Patches/Sexperience_Patch.cs
@@ -15,11 +15,11 @@ namespace RJWSexperience.Ideology.Patches
const int femaleAfterSurgery = 1;
if (props.isRape && exVirgin == props.partner)
- RsiDefOf.HistoryEvent.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner);
+ RsiHistoryEventDefOf.RSI_VirginStolen.RecordEventWithPartner(exVirgin, partner);
else if (degree != femaleAfterSurgery)
- RsiDefOf.HistoryEvent.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner);
+ RsiHistoryEventDefOf.RSI_VirginTaken.RecordEventWithPartner(exVirgin, partner);
- RsiDefOf.HistoryEvent.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin);
+ RsiHistoryEventDefOf.RSI_TookVirgin.RecordEventWithPartner(partner, exVirgin);
}
}
}
diff --git a/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs b/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs
index 82a541e..a7eacb0 100644
--- a/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs
+++ b/Source/IdeologyAddon/Rituals/JobGiver_DrugOrgy.cs
@@ -1,47 +1,56 @@
-using RimWorld;
-using rjw;
-using System;
+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.Ideology
{
- public class JobGiver_DrugOrgy : ThinkNode_JobGiver
- {
- protected override Job TryGiveJob(Pawn pawn)
- {
- if (pawn.Drafted || pawn.mindState == null)
- {
- return null;
- }
+ 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;
- PawnDuty duty = pawn.mindState.duty;
+ if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
+ {
+ return null;
+ }
+
+ Pawn target = FindPartner(pawn, duty);
- if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
- {
- return null;
- }
+ if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None,1)) return JobMaker.MakeJob(VariousDefOf.DrugMasturbate);
- Pawn target = FindPartner(pawn, duty);
+ return JobMaker.MakeJob(VariousDefOf.DrugSex, target);
+ }
- if (target == null || !pawn.CanReserveAndReach(target, PathEndMode.ClosestTouch, Danger.None, 1))
- return JobMaker.MakeJob(RsiDefOf.Job.DrugMasturbate);
+ protected Pawn FindPartner(Pawn pawn, PawnDuty duty)
+ {
+ if (duty != null)
+ {
+ List 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 JobMaker.MakeJob(RsiDefOf.Job.DrugSex, target);
- }
+ return null;
+ }
- protected Pawn FindPartner(Pawn pawn, PawnDuty duty)
- {
- if (duty != null)
- {
- List 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;
- }
- }
+ }
///
/// copied from rjw
@@ -56,7 +65,7 @@ namespace RJWSexperience.Ideology
protected override IEnumerable MakeNewToils()
{
setup_ticks();
- var PartnerJob = RsiDefOf.Job.GettinDrugSex;
+ var PartnerJob = VariousDefOf.GettinDrugSex;
this.FailOnDespawnedNullOrForbidden(iTarget);
this.FailOn(() => !Partner.health.capacities.CanBeAwake);
@@ -64,52 +73,47 @@ namespace RJWSexperience.Ideology
this.FailOn(() => Partner == null);
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
- Toil WaitForPartner = new Toil
+ Toil WaitForPartner = new Toil();
+ WaitForPartner.defaultCompleteMode = ToilCompleteMode.Delay;
+ WaitForPartner.initAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Delay,
- initAction = delegate
+ ticksLeftThisToil = 5000;
+ };
+ WaitForPartner.tickAction = delegate
+ {
+ pawn.GainComfortFromCellIfPossible();
+ if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
{
- ticksLeftThisToil = 5000;
- },
- tickAction = delegate
- {
- pawn.GainComfortFromCellIfPossible();
- if (pawn.Position.DistanceTo(Partner.Position) <= 1f)
- {
- ReadyForNextToil();
- }
+ ReadyForNextToil();
}
};
yield return WaitForPartner;
- Toil StartPartnerJob = new Toil
+ Toil StartPartnerJob = new Toil();
+ StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
+ StartPartnerJob.socialMode = RandomSocialMode.Off;
+ StartPartnerJob.initAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Instant,
- socialMode = RandomSocialMode.Off,
- initAction = delegate
- {
- if (!(Partner.jobs.curDriver is JobDriver_DrugSexReceiver))
- {
- Job gettingQuickie = JobMaker.MakeJob(PartnerJob, pawn, Partner);
- Partner.jobs.StartJob(gettingQuickie, JobCondition.InterruptForced);
- }
+ 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
- {
- defaultCompleteMode = ToilCompleteMode.Never,
- socialMode = RandomSocialMode.Off,
- defaultDuration = duration,
- handlingFacing = true
- };
+ 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;
-
+
Start();
Sexprops.usedCondom = CondomUtility.TryUseCondom(pawn) || CondomUtility.TryUseCondom(Partner);
};
@@ -143,7 +147,8 @@ namespace RJWSexperience.Ideology
/// copied from rjw
///
public class JobDriver_DrugSexReceiver : JobDriver_SexBaseRecieverLoved
- {
+ {
+
protected override IEnumerable MakeNewToils()
{
setup_ticks();
@@ -163,25 +168,23 @@ namespace RJWSexperience.Ideology
yield return Toils_Reserve.Reserve(iTarget, 1, 0);
- var get_loved = MakeSexToil();
- get_loved.handlingFacing = false;
- yield return get_loved;
+ var get_loved = MakeSexToil();
+ get_loved.handlingFacing = false;
+ yield return get_loved;
}
protected Toil MakeSexToil()
{
- Toil get_loved = new Toil
+ Toil get_loved = new Toil();
+ get_loved.defaultCompleteMode = ToilCompleteMode.Never;
+ get_loved.socialMode = RandomSocialMode.Off;
+ get_loved.handlingFacing = true;
+ get_loved.tickAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Never,
- socialMode = RandomSocialMode.Off,
- handlingFacing = true,
- tickAction = delegate
- {
- }
};
get_loved.AddEndCondition(new Func(() =>
{
- if (parteners.Count == 0)
+ if (parteners.Count <= 0)
{
return JobCondition.Succeeded;
}
@@ -201,7 +204,8 @@ namespace RJWSexperience.Ideology
/// copied from rjw
///
public class JobDriver_DrugMasturabate : JobDriver_Masturbate
- {
+ {
+
protected override IEnumerable MakeNewToils()
{
setup_ticks();
@@ -248,4 +252,6 @@ namespace RJWSexperience.Ideology
};
}
}
+
+
}
diff --git a/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs b/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs
index eae27e5..dc6dc15 100644
--- a/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs
+++ b/Source/IdeologyAddon/Rituals/JobGiver_GangbangConsensual.cs
@@ -1,36 +1,43 @@
-using RimWorld;
-using rjw;
-using System;
+using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
using Verse;
using Verse.AI;
+using Verse.AI.Group;
+using RimWorld;
+using rjw;
namespace RJWSexperience.Ideology
{
- public class JobGiver_GangbangConsensual : ThinkNode_JobGiver
- {
- protected override Job TryGiveJob(Pawn pawn)
- {
- if (pawn.Drafted || pawn.mindState == null)
- {
- return null;
- }
+ public class JobGiver_GangbangConsensual : 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;
- PawnDuty duty = pawn.mindState.duty;
+ if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
+ {
+ return null;
+ }
- if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
- {
- return null;
- }
+ Pawn target = duty.focusSecond.Pawn;
- Pawn target = duty.focusSecond.Pawn;
+ if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
- if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None))
- return null;
+ return JobMaker.MakeJob(VariousDefOf.Gangbang, target);
+ }
+ }
- return JobMaker.MakeJob(RsiDefOf.Job.Gangbang, target);
- }
- }
public class JobDriver_Gangbang : JobDriver_SexBaseInitiator
{
@@ -49,28 +56,26 @@ namespace RJWSexperience.Ideology
this.FailOn(() => Partner.Drafted);
yield return Toils_Goto.GotoThing(iTarget, PathEndMode.OnCell);
- Toil StartPartnerJob = new Toil
+ Toil StartPartnerJob = new Toil();
+ StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
+ StartPartnerJob.socialMode = RandomSocialMode.Off;
+ StartPartnerJob.initAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Instant,
- socialMode = RandomSocialMode.Off,
- initAction = delegate
- {
- if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
- {
- Job gettin_loved = JobMaker.MakeJob(RsiDefOf.Job.GettinGangbang, pawn, Bed);
- Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced);
- }
+
+ var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped;
+ if (dri == null)
+ {
+ Job gettin_loved = JobMaker.MakeJob(VariousDefOf.GettinGangbang, pawn, Bed);
+ Partner.jobs.StartJob(gettin_loved, JobCondition.InterruptForced);
}
};
yield return StartPartnerJob;
- Toil SexToil = new Toil
- {
- defaultCompleteMode = ToilCompleteMode.Never,
- defaultDuration = duration,
- handlingFacing = true
- };
- SexToil.FailOn(() => Partner.CurJob.def != RsiDefOf.Job.GettinGangbang);
+ Toil SexToil = new Toil();
+ SexToil.defaultCompleteMode = ToilCompleteMode.Never;
+ SexToil.defaultDuration = duration;
+ SexToil.handlingFacing = true;
+ SexToil.FailOn(() => Partner.CurJob.def != VariousDefOf.GettinGangbang);
SexToil.initAction = delegate
{
Start();
@@ -103,30 +108,28 @@ namespace RJWSexperience.Ideology
}
public class JobDriver_GangbangReceiver : JobDriver_SexBaseRecieverLoved
- {
+ {
protected override IEnumerable MakeNewToils()
{
setup_ticks();
parteners.Add(Partner);// add job starter, so this wont fail, before Initiator starts his job
- Toil get_banged = new Toil
+ Toil get_banged = new Toil();
+ get_banged.defaultCompleteMode = ToilCompleteMode.Never;
+ get_banged.handlingFacing = true;
+ get_banged.initAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Never,
- handlingFacing = true,
- initAction = delegate
- {
- pawn.pather.StopDead();
- pawn.jobs.curDriver.asleep = false;
- },
- tickAction = delegate
- {
- if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts))
- ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart);
- }
+ pawn.pather.StopDead();
+ pawn.jobs.curDriver.asleep = false;
+ };
+ get_banged.tickAction = delegate
+ {
+ if ((parteners.Count > 0) && pawn.IsHashIntervalTick(ticks_between_hearts / parteners.Count) && pawn.IsHashIntervalTick(ticks_between_hearts))
+ ThrowMetaIconF(pawn.Position, pawn.Map, FleckDefOf.Heart);
};
get_banged.AddEndCondition(new Func(() =>
{
- if (parteners.Count == 0)
+ if (parteners.Count <= 0)
{
return JobCondition.Succeeded;
}
@@ -145,12 +148,12 @@ namespace RJWSexperience.Ideology
Partner.jobs.jobQueue.EnqueueFirst(tobed);
}
else if (pawn.HostileTo(Partner))
- {
pawn.health.AddHediff(xxx.submitting);
- }
});
get_banged.socialMode = RandomSocialMode.Off;
yield return get_banged;
+
}
}
+
}
diff --git a/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs b/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs
index 092b00b..ce2ec72 100644
--- a/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs
+++ b/Source/IdeologyAddon/Rituals/JobGiver_GangbangVictim.cs
@@ -1,46 +1,56 @@
-using RimWorld;
-using rjw;
+using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
using Verse;
using Verse.AI;
+using Verse.AI.Group;
+using RimWorld;
+using rjw;
+
namespace RJWSexperience.Ideology
{
- public class JobGiver_GangbangVictim : ThinkNode_JobGiver
- {
- protected override Job TryGiveJob(Pawn pawn)
- {
- if (pawn.Drafted || pawn.mindState == null)
- {
- return null;
- }
+ public class JobGiver_GangbangVictim : 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;
- PawnDuty duty = pawn.mindState.duty;
-
- if (duty.def == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
- {
- return null;
+ if (dutyDef == DutyDefOf.TravelOrLeave || !xxx.can_do_loving(pawn))
+ {
+ return null;
}
Pawn target = duty.focusSecond.Pawn;
- if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
+ if (!pawn.CanReach(target, PathEndMode.ClosestTouch, Danger.None)) return null;
+
+ return JobMaker.MakeJob(VariousDefOf.RapeVictim, target);
+ }
+ }
- return JobMaker.MakeJob(RsiDefOf.Job.RapeVictim, target);
- }
- }
///
/// copied from rjw
///
public class JobDriver_RapeVictim : JobDriver_Rape
{
- public override bool TryMakePreToilReservations(bool errorOnFailed)
- {
+ public override bool TryMakePreToilReservations(bool errorOnFailed)
+ {
return true;
- }
+ }
- protected override IEnumerable MakeNewToils()
+ protected override IEnumerable MakeNewToils()
{
if (RJWSettings.DebugRape) ModLog.Message("" + this.GetType().ToString() + "::MakeNewToils() called");
setup_ticks();
@@ -54,28 +64,25 @@ namespace RJWSexperience.Ideology
SexUtility.RapeTargetAlert(pawn, Partner);
- Toil StartPartnerJob = new Toil
+ Toil StartPartnerJob = new Toil();
+ StartPartnerJob.defaultCompleteMode = ToilCompleteMode.Instant;
+ StartPartnerJob.socialMode = RandomSocialMode.Off;
+ StartPartnerJob.initAction = delegate
{
- defaultCompleteMode = ToilCompleteMode.Instant,
- socialMode = RandomSocialMode.Off,
- initAction = delegate
+ var dri = Partner.jobs.curDriver as JobDriver_SexBaseRecieverRaped;
+ if (dri == null)
{
- if (!(Partner.jobs.curDriver is JobDriver_SexBaseRecieverRaped))
- {
- Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn);
+ Job gettin_raped = JobMaker.MakeJob(PartnerJob, pawn);
- Partner.jobs.StartJob(gettin_raped, JobCondition.InterruptForced, null, false, true, null);
- }
+ Partner.jobs.StartJob(gettin_raped, JobCondition.InterruptForced, null, false, true, null);
}
};
yield return StartPartnerJob;
- Toil SexToil = new Toil
- {
- defaultCompleteMode = ToilCompleteMode.Never,
- defaultDuration = duration,
- handlingFacing = true
- };
+ Toil SexToil = new Toil();
+ SexToil.defaultCompleteMode = ToilCompleteMode.Never;
+ SexToil.defaultDuration = duration;
+ SexToil.handlingFacing = true;
SexToil.FailOn(() => Partner.CurJob.def != PartnerJob);
SexToil.initAction = delegate
{
diff --git a/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs b/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs
index b496689..e976d61 100644
--- a/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs
+++ b/Source/IdeologyAddon/Rituals/LordJob_Rituals.cs
@@ -1,15 +1,21 @@
-using RimWorld;
+using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
using Verse;
+using Verse.AI;
+using RimWorld;
+
namespace RJWSexperience.Ideology
{
- public class LordJob_Ritual_Gangbang : LordJob_Ritual
- {
+ public class LordJob_Ritual_Gangbang : LordJob_Ritual
+ {
public LordJob_Ritual_Gangbang() { }
- public LordJob_Ritual_Gangbang(string targetID, TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer)
- {
+ public LordJob_Ritual_Gangbang(string targetID ,TargetInfo selectedTarget, Precept_Ritual ritual, RitualObligation obligation, List allStages, RitualRoleAssignments assignments, Pawn organizer = null) : base(selectedTarget, ritual, obligation, allStages, assignments, organizer)
+ {
foreach (RitualRole ritualRole in assignments.AllRolesForReading)
{
if (ritualRole != null && ritualRole.id.Contains(targetID))
@@ -19,5 +25,6 @@ namespace RJWSexperience.Ideology
}
}
}
+
}
}
diff --git a/Source/IdeologyAddon/Rituals/RitualRoles.cs b/Source/IdeologyAddon/Rituals/RitualRoles.cs
index e7fb7fc..691bb28 100644
--- a/Source/IdeologyAddon/Rituals/RitualRoles.cs
+++ b/Source/IdeologyAddon/Rituals/RitualRoles.cs
@@ -1,101 +1,106 @@
using RimWorld;
-using rjw;
using Verse;
+using rjw;
namespace RJWSexperience.Ideology
{
- public class RitualRole_RapeVictim : RitualRole
- {
- public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
- {
- reason = null;
- return false;
- }
+ public class RitualRole_RapeVictim : RitualRole
+ {
+ public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
+ {
+ reason = null;
+ return false;
+ }
+
+ public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
+ {
+ reason = null;
+ if (CanBeVictim(p)) return true;
+ if (!skipReason)
+ {
+ reason = Keyed.RSVictimCondition;
+ }
+ return false;
+ }
- public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
- {
- reason = null;
- if (CanBeVictim(p)) return true;
- if (!skipReason)
- {
- reason = Keyed.RSVictimCondition;
- }
- return false;
- }
+ public static bool CanBeVictim(Pawn pawn)
+ {
+ if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
+ if (pawn.IsSubmissive()) return true;
+ if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
+ return false;
+ }
+ }
- public static bool CanBeVictim(Pawn pawn)
- {
- if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true;
- if (pawn.IsSubmissive()) return true;
- if (pawn.IsDesignatedComfort() || (pawn.guilt != null && pawn.guilt.IsGuilty) || (pawn.apparel != null && pawn.apparel.PsychologicallyNude)) return true;
- return false;
- }
- }
+ public class RitualRole_HumanBreedee : RitualRole
+ {
+ public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
+ {
+ reason = null;
+ return false;
+ }
- public class RitualRole_HumanBreedee : RitualRole
- {
- public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
- {
- reason = null;
- return false;
- }
+ public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
+ {
+
+ reason = null;
+ if (!xxx.is_human(p))
+ {
+ reason = Keyed.RSNotHuman;
+ return false;
+ }
+ if (CanBeBreedee(p)) return true;
+ if (!skipReason)
+ {
+ reason = Keyed.RSShouldCanFuck;
+ }
+ return false;
+ }
- public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
- {
- reason = null;
- if (!xxx.is_human(p))
- {
- reason = Keyed.RSNotHuman;
- return false;
- }
- if (CanBeBreedee(p)) return true;
- if (!skipReason)
- {
- reason = Keyed.RSShouldCanFuck;
- }
- return false;
- }
+ public static bool CanBeBreedee(Pawn pawn)
+ {
+ if (xxx.can_be_fucked(pawn)) return true;
+ return false;
+ }
+ }
- public static bool CanBeBreedee(Pawn pawn) => xxx.can_be_fucked(pawn);
- }
+ public class RitualRole_AnimalBreeder : RitualRole
+ {
+ public override bool Animal => true;
- public class RitualRole_AnimalBreeder : RitualRole
- {
- public override bool Animal => true;
+ public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
+ {
+ reason = null;
+ return false;
+ }
- public override bool AppliesToRole(Precept_Role role, out string reason, Precept_Ritual ritual = null, Pawn pawn = null, bool skipReason = false)
- {
- reason = null;
- return false;
- }
+ public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
+ {
+ reason = null;
+ if (!p.IsAnimal())
+ {
+ reason = Keyed.RSNotAnimal;
+ return false;
+ }
+ if (CanBeBreeder(p, assignments?.Ritual)) return true;
+ if (!skipReason)
+ {
+ reason = Keyed.RSBreederCondition;
+ }
+ return false;
+ }
- public override bool AppliesToPawn(Pawn p, out string reason, TargetInfo selectedTarget, LordJob_Ritual ritual = null, RitualRoleAssignments assignments = null, Precept_Ritual precept = null, bool skipReason = false)
- {
- reason = null;
- if (!p.IsAnimal())
- {
- reason = Keyed.RSNotAnimal;
- return false;
- }
- if (CanBeBreeder(p, assignments?.Ritual)) return true;
- if (!skipReason)
- {
- reason = Keyed.RSBreederCondition;
- }
- return false;
- }
-
- public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
- {
- if (precept != null && precept.ideo.HasPrecept(RsiDefOf.Precept.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
+ public static bool CanBeBreeder(Pawn animal, Precept_Ritual precept)
+ {
+ if (precept != null && precept.ideo.HasPrecept(RsiPreceptDefOf.Bestiality_OnlyVenerated) && !precept.ideo.IsVeneratedAnimal(animal))
{
return false;
}
- if (!xxx.can_rape(animal))
- {
- return false;
- }
- return true;
- }
- }
+ if (!xxx.can_rape(animal)) return false;
+ return true;
+ }
+
+ }
+
+
}
diff --git a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs b/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs
index 6d970f3..bae549e 100644
--- a/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs
+++ b/Source/IdeologyAddon/RomanceChanceFactorHelpers.cs
@@ -22,7 +22,7 @@ namespace RJWSexperience.Ideology
if (!pawn.relations.FamilyByBlood.Contains(partner))
{
- if (pawn.Ideo?.HasPrecept(RsiDefOf.Precept.Incestuos_IncestOnly) == true)
+ if (pawn.Ideo?.HasPrecept(RsiPreceptDefOf.Incestuos_IncestOnly) == true)
{
return parentRomanceChanceFactor;
}
@@ -32,7 +32,7 @@ namespace RJWSexperience.Ideology
}
}
- PreceptDef incestuousPrecept = pawn.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == RsiDefOf.Issue.Incestuos);
+ PreceptDef incestuousPrecept = pawn.Ideo?.PreceptsListForReading.Select(precept => precept.def).FirstOrFallback(def => def.issue == VariousDefOf.Incestuos);
IEnumerable relations = pawn.GetRelations(partner).Where(def => def.familyByBloodRelation);
foreach (PawnRelationDef relationDef in relations)
{
@@ -74,7 +74,7 @@ namespace RJWSexperience.Ideology
{
IEnumerable incestuousPrecepts = DefDatabase
.AllDefsListForReading
- .Where(def => def.issue == RsiDefOf.Issue.Incestuos);
+ .Where(def => def.issue == VariousDefOf.Incestuos);
IEnumerable> preceptGetters = incestuousPrecepts
.Select(precept => new TableDataGetter(precept.defName,(PawnRelationDef rel) => GetRomanceChanceFactor(rel, precept)));
diff --git a/Source/IdeologyAddon/RsiDefOf.cs b/Source/IdeologyAddon/RsiDefOf.cs
deleted file mode 100644
index d5b0cfa..0000000
--- a/Source/IdeologyAddon/RsiDefOf.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using RimWorld;
-using Verse;
-
-namespace RJWSexperience.Ideology
-{
- public static class RsiDefOf
- {
- [DefOf]
- public static class Job
- {
- public static readonly JobDef RapeVictim;
- public static readonly JobDef Gangbang;
- public static readonly JobDef GettinGangbang;
- public static readonly JobDef DrugSex;
- public static readonly JobDef GettinDrugSex;
- public static readonly JobDef DrugMasturbate;
- }
-
- [DefOf]
- public static class Meme
- {
- public static readonly MemeDef Zoophile;
- public static readonly MemeDef Rapist;
- public static readonly MemeDef Necrophile;
- }
-
- [DefOf]
- public static class Issue
- {
- public static readonly IssueDef Incestuos;
- }
-
- [DefOf]
- public static class Precept
- {
- public static readonly PreceptDef Incestuos_IncestOnly;
- public static readonly PreceptDef Bestiality_OnlyVenerated;
- public static readonly PreceptDef BabyFaction_AlwaysFather;
- public static readonly PreceptDef BabyFaction_AlwaysColony;
- public static readonly PreceptDef Submissive_Male;
- public static readonly PreceptDef Submissive_Female;
- public static readonly PreceptDef ProselyzingByOrgasm;
- }
-
- [DefOf]
- public static class HistoryEvent
- {
- public static readonly HistoryEventDef RSI_SexWithAnimal;
- public static readonly HistoryEventDef RSI_Raped;
- public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
- public static readonly HistoryEventDef RSI_NonIncestuosSex;
- public static readonly HistoryEventDef RSI_SexWithCorpse;
- public static readonly HistoryEventDef RSI_VirginTaken;
- public static readonly HistoryEventDef RSI_VirginStolen;
- public static readonly HistoryEventDef RSI_TookVirgin;
- public static readonly HistoryEventDef RSI_Masturbated;
- }
-
- [DefOf]
- public static class Hediff
- {
- [MayRequireBiotech] public static readonly HediffDef PregnantHuman;
- }
- }
-}
diff --git a/Source/IdeologyAddon/RsiHistoryEventDefOf.cs b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs
new file mode 100644
index 0000000..4cb9bc7
--- /dev/null
+++ b/Source/IdeologyAddon/RsiHistoryEventDefOf.cs
@@ -0,0 +1,18 @@
+using RimWorld;
+
+namespace RJWSexperience.Ideology
+{
+ [DefOf]
+ public static class RsiHistoryEventDefOf
+ {
+ public static readonly HistoryEventDef RSI_SexWithAnimal;
+ public static readonly HistoryEventDef RSI_Raped;
+ public static readonly HistoryEventDef RSI_NonIncestuosMarriage;
+ public static readonly HistoryEventDef RSI_NonIncestuosSex;
+ public static readonly HistoryEventDef RSI_SexWithCorpse;
+ public static readonly HistoryEventDef RSI_VirginTaken;
+ public static readonly HistoryEventDef RSI_VirginStolen;
+ public static readonly HistoryEventDef RSI_TookVirgin;
+ public static readonly HistoryEventDef RSI_Masturbated;
+ }
+}
diff --git a/Source/IdeologyAddon/RsiPreceptDefOf.cs b/Source/IdeologyAddon/RsiPreceptDefOf.cs
new file mode 100644
index 0000000..1638e76
--- /dev/null
+++ b/Source/IdeologyAddon/RsiPreceptDefOf.cs
@@ -0,0 +1,16 @@
+using RimWorld;
+
+namespace RJWSexperience.Ideology
+{
+ [DefOf]
+ public static class RsiPreceptDefOf
+ {
+ public static readonly PreceptDef Incestuos_IncestOnly;
+ public static readonly PreceptDef Bestiality_OnlyVenerated;
+ public static readonly PreceptDef BabyFaction_AlwaysFather;
+ public static readonly PreceptDef BabyFaction_AlwaysColony;
+ public static readonly PreceptDef Submissive_Male;
+ public static readonly PreceptDef Submissive_Female;
+ public static readonly PreceptDef ProselyzingByOrgasm;
+ }
+}
\ No newline at end of file
diff --git a/Source/IdeologyAddon/VariousDefOf.cs b/Source/IdeologyAddon/VariousDefOf.cs
new file mode 100644
index 0000000..19a104d
--- /dev/null
+++ b/Source/IdeologyAddon/VariousDefOf.cs
@@ -0,0 +1,22 @@
+using RimWorld;
+using Verse;
+
+namespace RJWSexperience.Ideology
+{
+ [DefOf]
+ public static class VariousDefOf
+ {
+ public static readonly JobDef RapeVictim;
+ public static readonly JobDef Gangbang;
+ public static readonly JobDef GettinGangbang;
+ public static readonly JobDef DrugSex;
+ public static readonly JobDef GettinDrugSex;
+ public static readonly JobDef DrugMasturbate;
+
+ public static readonly MemeDef Zoophile;
+ public static readonly MemeDef Rapist;
+ public static readonly MemeDef Necrophile;
+ public static readonly IssueDef Incestuos;
+ [MayRequireBiotech] public static readonly HediffDef PregnantHuman;
+ }
+}