First Draft naked prowess and racegenedef bugfix
This commit is contained in:
parent
43705b9676
commit
f1e14befbb
Binary file not shown.
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Defs>
|
||||||
|
<AbilityDef>
|
||||||
|
<defName>rjw_genes_naked_prowess</defName>
|
||||||
|
<label>naked prowess</label>
|
||||||
|
<description>Enhance the strenght and resilience of your naked body with fertilin.</description>
|
||||||
|
<iconPath>Things/Mote/Heart</iconPath>
|
||||||
|
<warmupMoteSocialSymbol>Things/Mote/Heart</warmupMoteSocialSymbol>
|
||||||
|
<jobDef>CastAbilityOnThing</jobDef>
|
||||||
|
<targetRequired>False</targetRequired>
|
||||||
|
<canUseAoeToGetTargets>False</canUseAoeToGetTargets>
|
||||||
|
<stunTargetWhileCasting>True</stunTargetWhileCasting>
|
||||||
|
<statBases>
|
||||||
|
<Ability_Duration>126</Ability_Duration>
|
||||||
|
<Ability_EffectRadius>0</Ability_EffectRadius>
|
||||||
|
</statBases>
|
||||||
|
<verbProperties>
|
||||||
|
<verbClass>Verb_CastAbility</verbClass>
|
||||||
|
<warmupTime>2</warmupTime>
|
||||||
|
<range>0</range>
|
||||||
|
<drawAimPie>False</drawAimPie>
|
||||||
|
<requireLineOfSight>False</requireLineOfSight>
|
||||||
|
<targetParams>
|
||||||
|
<canTargetSelf>true</canTargetSelf>
|
||||||
|
<canTargetPawns>false</canTargetPawns>
|
||||||
|
<canTargetBuildings>false</canTargetBuildings>
|
||||||
|
<canTargetAnimals>false</canTargetAnimals>
|
||||||
|
<canTargetHumans>false</canTargetHumans>
|
||||||
|
<canTargetMechs>false</canTargetMechs>
|
||||||
|
</targetParams>
|
||||||
|
</verbProperties>
|
||||||
|
<comps>
|
||||||
|
<li Class="CompProperties_AbilityGiveHediff">
|
||||||
|
<compClass>CompAbilityEffect_GiveHediff</compClass>
|
||||||
|
<hediffDef>rjw_genes_naked_prowess</hediffDef>
|
||||||
|
<onlyApplyToSelf>True</onlyApplyToSelf>
|
||||||
|
<replaceExisting>true</replaceExisting>
|
||||||
|
</li>
|
||||||
|
<li Class="RJW_Genes.CompProperties_CasterIsNaked"/>
|
||||||
|
<li Class="RJW_Genes.CompProperties_AbilityLifeForceCost">
|
||||||
|
<fertilinCost>0.1</fertilinCost>
|
||||||
|
</li>
|
||||||
|
</comps>
|
||||||
|
|
||||||
|
|
||||||
|
</AbilityDef>
|
||||||
|
</Defs>
|
|
@ -151,9 +151,27 @@
|
||||||
</symbolPack>
|
</symbolPack>
|
||||||
</GeneDef>
|
</GeneDef>
|
||||||
|
|
||||||
|
<GeneDef>
|
||||||
|
<defName>rjw_genes_naked_prowess</defName>
|
||||||
|
<label>naked prowess</label>
|
||||||
|
<description>Carriers of this gene are able to temporarily increase their strenght and resilience, while they are naked.</description>
|
||||||
|
<iconPath>Things/Mote/Heart</iconPath>
|
||||||
|
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||||
|
<displayOrderInCategory>13</displayOrderInCategory>
|
||||||
|
<displayCategory>rjw_genes_fertilin</displayCategory>
|
||||||
|
<abilities>
|
||||||
|
<li>rjw_genes_naked_prowess</li>
|
||||||
|
</abilities>
|
||||||
|
<descriptionHyperlinks>
|
||||||
|
<AbilityDef>rjw_genes_naked_prowess</AbilityDef>
|
||||||
|
</descriptionHyperlinks>
|
||||||
|
<biostatCpx>1</biostatCpx>
|
||||||
|
<biostatMet>-1</biostatMet>
|
||||||
|
</GeneDef>
|
||||||
|
|
||||||
<GeneDef>
|
<GeneDef>
|
||||||
<defName>rjw_genes_cum_eater</defName>
|
<defName>rjw_genes_cum_eater</defName>
|
||||||
<label>Cum eater</label>
|
<label>cum eater</label>
|
||||||
<description>Carriers of this gene are able to absorb fertilin through eating cum.</description>
|
<description>Carriers of this gene are able to absorb fertilin through eating cum.</description>
|
||||||
<iconPath>Things/Mote/Heart</iconPath>
|
<iconPath>Things/Mote/Heart</iconPath>
|
||||||
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
<prerequisite>rjw_genes_lifeforce</prerequisite>
|
||||||
|
|
|
@ -136,4 +136,37 @@
|
||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</HediffDef>
|
</HediffDef>
|
||||||
|
|
||||||
|
<HediffDef ParentName="RoleStatBuff">
|
||||||
|
<defName>rjw_genes_naked_prowess</defName>
|
||||||
|
<label>naked prowss</label>
|
||||||
|
<description>Driven by fertilin, this person has greatly increased strength and resilience.</description>
|
||||||
|
<hediffClass>HediffWithComps</hediffClass>
|
||||||
|
<stages>
|
||||||
|
<li>
|
||||||
|
<!--Maybe a bit to much, but they are supposed to be strong-->
|
||||||
|
<statOffsets>
|
||||||
|
<ArmorRating_Sharp>0.5</ArmorRating_Sharp>
|
||||||
|
<ArmorRating_Blunt>0.5</ArmorRating_Blunt>
|
||||||
|
<ArmorRating_Heat>0.5</ArmorRating_Heat>
|
||||||
|
<!-- <Insulation_Cold>10</Insulation_Cold>
|
||||||
|
<Insulation_Heat>10</Insulation_Heat> -->
|
||||||
|
</statOffsets>
|
||||||
|
<statFactors>
|
||||||
|
<IncomingDamageFactor>0.5</IncomingDamageFactor>
|
||||||
|
<MeleeDamageFactor>1.5</MeleeDamageFactor>
|
||||||
|
</statFactors>
|
||||||
|
</li>
|
||||||
|
</stages>
|
||||||
|
<comps>
|
||||||
|
<li Class="HediffCompProperties_Disappears">
|
||||||
|
<showRemainingTime>True</showRemainingTime>
|
||||||
|
<disappearsAfterTicks>5000</disappearsAfterTicks> <!-- 2 hours -->
|
||||||
|
</li>
|
||||||
|
<li Class="HediffCompProperties_DisappearsOnDeath"/>
|
||||||
|
<!--TODO: Make hediff disappear if pawn is nolonger naked-->
|
||||||
|
</comps>
|
||||||
|
<isBad>false</isBad>
|
||||||
|
</HediffDef>
|
||||||
|
|
||||||
</Defs>
|
</Defs>
|
|
@ -28,13 +28,16 @@ namespace RJW_BGS
|
||||||
ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes");
|
ModLog.Warning($"Error looking up PawnKindDef for {pawn.Name} - Could not lookup Animal Inheritance Genes");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
string raceName = kindDef.race.defName;
|
string raceName = kindDef.race.defName;
|
||||||
string pawnKindName = kindDef.defName;
|
string pawnKindName = kindDef.defName;
|
||||||
|
//Wild animals have no name, so we will use pawnkindname instead
|
||||||
|
string pawnName = pawn.Name != null ? pawn.Name.ToStringFull : pawnKindName;
|
||||||
PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn);
|
PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn);
|
||||||
RaceGroupDef raceGroupDef = pawnData.RaceSupportDef;
|
RaceGroupDef raceGroupDef = pawnData.RaceSupportDef;
|
||||||
|
|
||||||
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
||||||
ModLog.Message($"Looking up Animal-Inheritable Genes for {pawn.Name} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}");
|
ModLog.Message($"Looking up Animal-Inheritable Genes for {pawnName} with KindDef {kindDef.defName},RaceName {raceName}, PawnKind {pawnKindName} and RaceGroup {raceGroupDef.defName}");
|
||||||
|
|
||||||
IEnumerable<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
|
IEnumerable<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
|
||||||
List<RaceGeneDef> pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
List<RaceGeneDef> pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
||||||
|
@ -44,11 +47,11 @@ namespace RJW_BGS
|
||||||
}).ToList<RaceGeneDef>();
|
}).ToList<RaceGeneDef>();
|
||||||
if (pawnKindDefs.Count() > 0)
|
if (pawnKindDefs.Count() > 0)
|
||||||
{
|
{
|
||||||
DebugPrintRaceGeneDefs("PawnKindDefs",pawn.Name.ToStringFull,pawnKindDefs);
|
DebugPrintRaceGeneDefs("PawnKindDefs", pawnName,pawnKindDefs);
|
||||||
return pawnKindDefs;
|
return pawnKindDefs;
|
||||||
}
|
}
|
||||||
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
||||||
ModLog.Message($"Did not find PawnKindDefs for {pawn.Name.ToStringFull}");
|
ModLog.Message($"Did not find PawnKindDefs for {pawnName}");
|
||||||
|
|
||||||
List<RaceGeneDef> raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
List<RaceGeneDef> raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
|
||||||
{
|
{
|
||||||
|
@ -57,11 +60,11 @@ namespace RJW_BGS
|
||||||
}).ToList<RaceGeneDef>();
|
}).ToList<RaceGeneDef>();
|
||||||
if (raceKindDefs.Count() > 0)
|
if (raceKindDefs.Count() > 0)
|
||||||
{
|
{
|
||||||
DebugPrintRaceGeneDefs("PawnKindDefs", pawn.Name.ToStringFull, raceKindDefs);
|
DebugPrintRaceGeneDefs("PawnKindDefs", pawnName, raceKindDefs);
|
||||||
return raceKindDefs;
|
return raceKindDefs;
|
||||||
}
|
}
|
||||||
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
||||||
ModLog.Message($"Did not find RaceKindDefs for {pawn.Name.ToStringFull}");
|
ModLog.Message($"Did not find RaceKindDefs for {pawnName}");
|
||||||
|
|
||||||
List<RaceGeneDef> raceGroupDefs = new List<RaceGeneDef>();
|
List<RaceGeneDef> raceGroupDefs = new List<RaceGeneDef>();
|
||||||
if (raceGroupDef != null)
|
if (raceGroupDef != null)
|
||||||
|
@ -77,13 +80,13 @@ namespace RJW_BGS
|
||||||
|
|
||||||
if (raceGroupDefs.Count() > 0)
|
if (raceGroupDefs.Count() > 0)
|
||||||
{
|
{
|
||||||
DebugPrintRaceGeneDefs("RaceKindDefs", pawn.Name.ToStringFull, raceGroupDefs);
|
DebugPrintRaceGeneDefs("RaceKindDefs", pawnName, raceGroupDefs);
|
||||||
return raceGroupDefs;
|
return raceGroupDefs;
|
||||||
}
|
}
|
||||||
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
else if (RJW_BGSSettings.rjw_bgs_detailed_debug)
|
||||||
ModLog.Message($"Did not find RaceGroupDefs for {pawn.Name.ToStringFull}");
|
ModLog.Message($"Did not find RaceGroupDefs for {pawnName}");
|
||||||
|
|
||||||
ModLog.Message($"Did not find any Genes inheritable for {pawn.Name.ToStringFull}");
|
ModLog.Message($"Did not find any Genes inheritable for {pawnName}");
|
||||||
return new List<RaceGeneDef>();
|
return new List<RaceGeneDef>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using RimWorld;
|
||||||
|
using Verse.AI;
|
||||||
|
using rjw;
|
||||||
|
|
||||||
|
namespace RJW_Genes
|
||||||
|
{
|
||||||
|
//Summary//
|
||||||
|
//Returns invalid if a pawn is not naked
|
||||||
|
//Summary//
|
||||||
|
public class CompAbilityEffect_CasterIsNaked : CompAbilityEffect_WithDest
|
||||||
|
{
|
||||||
|
private new CompProperties_CasterIsNaked Props
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return (CompProperties_CasterIsNaked)this.props;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool GizmoDisabled(out string reason)
|
||||||
|
{
|
||||||
|
Pawn pawn = this.CasterPawn;
|
||||||
|
if (pawn != null)
|
||||||
|
{
|
||||||
|
//Copied from ThoughtWorker_NudistNude.CurrentStateInternal
|
||||||
|
List<Apparel> wornApparel = pawn.apparel.WornApparel;
|
||||||
|
for (int i = 0; i < wornApparel.Count; i++)
|
||||||
|
{
|
||||||
|
Apparel apparel = wornApparel[i];
|
||||||
|
if (apparel.def.apparel.countsAsClothingForNudity)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < apparel.def.apparel.bodyPartGroups.Count; j++)
|
||||||
|
{
|
||||||
|
if (apparel.def.apparel.bodyPartGroups[j] == BodyPartGroupDefOf.Torso)
|
||||||
|
{
|
||||||
|
reason = pawn.Name + " is not naked";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (apparel.def.apparel.bodyPartGroups[j] == BodyPartGroupDefOf.Legs)
|
||||||
|
{
|
||||||
|
reason = pawn.Name + " is not naked";
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reason = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using RimWorld;
|
||||||
|
|
||||||
|
namespace RJW_Genes
|
||||||
|
{
|
||||||
|
public class CompProperties_CasterIsNaked : CompProperties_EffectWithDest
|
||||||
|
{
|
||||||
|
public CompProperties_CasterIsNaked()
|
||||||
|
{
|
||||||
|
this.compClass = typeof(CompAbilityEffect_CasterIsNaked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -61,10 +61,8 @@ namespace RJW_Genes
|
||||||
return AlertReport.CulpritsAre(this.Targets);
|
return AlertReport.CulpritsAre(this.Targets);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Token: 0x04004B5C RID: 19292
|
|
||||||
private List<GlobalTargetInfo> targets = new List<GlobalTargetInfo>();
|
private List<GlobalTargetInfo> targets = new List<GlobalTargetInfo>();
|
||||||
|
|
||||||
// Token: 0x04004B5D RID: 19293
|
|
||||||
private List<string> targetLabels = new List<string>();
|
private List<string> targetLabels = new List<string>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ namespace RJW_Genes
|
||||||
if (this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater)
|
if (this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_cum_eater)
|
||||||
|| this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer))
|
|| this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_vaginal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_anal_absorber) || this.Pawn.genes.HasGene(GeneDefOf.rjw_genes_drainer))
|
||||||
{
|
{
|
||||||
|
//TODO: use mentalstatedef instead of mentalbreakdef
|
||||||
MentalBreakDef randomrape = GeneDefOf.rjw_genes_lifeforce_randomrape;
|
MentalBreakDef randomrape = GeneDefOf.rjw_genes_lifeforce_randomrape;
|
||||||
if (ModsConfig.BiotechActive &&
|
if (ModsConfig.BiotechActive &&
|
||||||
this.Pawn.Spawned && !this.Pawn.InMentalState && !this.Pawn.Downed &&
|
this.Pawn.Spawned && !this.Pawn.InMentalState && !this.Pawn.Downed &&
|
||||||
|
|
|
@ -27,6 +27,7 @@ namespace RJW_Genes
|
||||||
// Gene: Generous Donor [Postfix Patch]
|
// Gene: Generous Donor [Postfix Patch]
|
||||||
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)),
|
harmony.Patch(AccessTools.Method(typeof(LicentiaLabs.CumflationHelper), nameof(LicentiaLabs.CumflationHelper.TransferNutrition)),
|
||||||
postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix)));
|
postfix: new HarmonyMethod(typeof(Patch_TransferNutrition), nameof(Patch_TransferNutrition.Postfix)));
|
||||||
|
//Eat cumflation
|
||||||
harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_Sex), nameof(rjw.JobDriver_Sex.ChangePsyfocus)),
|
harmony.Patch(AccessTools.Method(typeof(rjw.JobDriver_Sex), nameof(rjw.JobDriver_Sex.ChangePsyfocus)),
|
||||||
postfix: new HarmonyMethod(typeof(Patch_SexTicks_ChangePsyfocus), nameof(Patch_SexTicks_ChangePsyfocus.Postfix)));
|
postfix: new HarmonyMethod(typeof(Patch_SexTicks_ChangePsyfocus), nameof(Patch_SexTicks_ChangePsyfocus.Postfix)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,8 @@
|
||||||
<Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
|
<Compile Include="Genes\Genitalia\Gene_EquineGenitalia.cs" />
|
||||||
<Compile Include="Genes\Genitalia\GenitaliaChanger.cs" />
|
<Compile Include="Genes\Genitalia\GenitaliaChanger.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Abilities\AbilityUtility.cs" />
|
<Compile Include="Genes\Life_Force\Abilities\AbilityUtility.cs" />
|
||||||
|
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_CasterIsNaked.cs" />
|
||||||
|
<Compile Include="Genes\Life_Force\Abilities\CompProperties_CasterIsNaked.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Alert_LowFertilin.cs" />
|
<Compile Include="Genes\Life_Force\Alert_LowFertilin.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_Seduce.cs" />
|
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_Seduce.cs" />
|
||||||
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_LifeForceCost.cs" />
|
<Compile Include="Genes\Life_Force\Abilities\CompAbilityEffect_LifeForceCost.cs" />
|
||||||
|
|
Loading…
Reference in New Issue