Compare commits

...

4 commits

Author SHA1 Message Date
Usagirei
bd30363a1e Merge branch 'nre-partner' into 'master'
Fix NRE when jobdriver partner is null

See merge request c0ffeeeeeeee/rimworld-animations!5
2022-11-23 00:33:45 +00:00
c0ffee
eb7fe1a280 fixes for futa/male and futa/futa anim role selection 2022-11-22 11:24:41 -08:00
c0ffee
82d1e2f614 added 5 new anims 2022-11-21 13:56:14 -08:00
Reisen Usagi
8888f76708
Fix NRE when jobdriver partner is null 2022-03-22 20:15:38 -03:00
11 changed files with 6574 additions and 35 deletions

View file

@ -504,14 +504,29 @@ namespace Rimworld_Animations {
public bool LoopNeverending()
{
if(pawn?.jobs?.curDriver != null &&
(pawn.jobs.curDriver is JobDriver_Sex) && (pawn.jobs.curDriver as JobDriver_Sex).neverendingsex ||
(pawn.jobs.curDriver is JobDriver_SexBaseReciever) && (pawn.jobs.curDriver as JobDriver_Sex).Partner?.jobs?.curDriver != null && ((pawn.jobs.curDriver as JobDriver_Sex).Partner.jobs.curDriver as JobDriver_Sex).neverendingsex)
{
return true;
}
return IsNeverEndingSex(pawn) || IsNeverEndingSexPartner(pawn);
}
return false;
public static bool IsNeverEndingSex(Pawn pawn)
{
bool hasDriver = pawn?.jobs?.curDriver != null;
if (!hasDriver)
return false;
return (pawn.jobs.curDriver is JobDriver_Sex jds) && jds.neverendingsex;
}
public static bool IsNeverEndingSexPartner(Pawn pawn)
{
bool hasDriver = pawn?.jobs?.curDriver != null;
if (!hasDriver)
return false;
var partner = (pawn.jobs.curDriver is JobDriver_SexBaseReciever jds) ? jds.Partner : null;
if (partner == null)
return false;
return IsNeverEndingSex(partner);
}
public void ResetOnLoop()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,686 @@
<?xml version="1.0"?>
<Defs>
<Rimworld_Animations.AnimationDef>
<defName>FacingForwardFuck</defName>
<label>facing forward fuck</label>
<sounds>true</sounds>
<sexTypes>
<li>Vaginal</li>
<li>Anal</li>
<li>None</li>
</sexTypes>
<interactionDefTypes>
<li>Rape_Anal</li>
<li>Rape_Cunnilingus</li>
<li>Rape_Vaginal</li>
<li>Rape_Reverse_Anal</li>
<li>Rape_Reverse_Vaginal</li>
<li>Sex_Reverse_Anal</li>
<li>Sex_Reverse_Vaginal</li>
<li>Sex_Anal</li>
<li>Sex_Vaginal</li>
</interactionDefTypes>
<actors>
<li>
<defNames>
<li>Human</li>
</defNames>
<bodyTypeOffset>
<Male>(0, -0.05)</Male>
<Thin>(0, -0.05)</Thin>
<Hulk>(0.07, 0.15)</Hulk>
</bodyTypeOffset>
</li>
<li>
<defNames>
<li>Human</li>
</defNames>
<requiredGenitals>
<li>Penis</li>
</requiredGenitals>
<controlGenitalAngle>true</controlGenitalAngle>
<bodyTypeOffset>
<Female>(-0.03, 0.03)</Female>
<Hulk>(-0.05, 0.2)</Hulk>
<Fat>(-0.02, 0.05)</Fat>
</bodyTypeOffset>
</li>
</actors>
<animationStages>
<li>
<stageName>SlowFuck</stageName>
<playTimeTicks>500</playTimeTicks>
<playTimeTicksQuick>300</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>63</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.09562898</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>36</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>63</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>36</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>FemaleFaceForward</stageName>
<playTimeTicks>200</playTimeTicks>
<playTimeTicksQuick>100</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.393279</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>64</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>7.09635925</headAngle>
<headBob>-0.06650379</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>35</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.393279</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>64</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>35</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>HipMovement</stageName>
<playTimeTicks>300</playTimeTicks>
<playTimeTicksQuick>200</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.393279</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>55</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>7.09635925</headAngle>
<headBob>-0.06650379</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>20</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>20.0933418</bodyAngle>
<headAngle>7.5340724</headAngle>
<headBob>-0.0468387455</headBob>
<bodyOffsetX>0.299985439</bodyOffsetX>
<bodyOffsetZ>0.210036</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>24</tickDuration>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.393279</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>55</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>20</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.047</headBob>
<bodyOffsetX>-0.021</bodyOffsetX>
<bodyOffsetZ>0.047</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>5</genitalAngle>
<tickDuration>24</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>MediumFuck</stageName>
<playTimeTicks>560</playTimeTicks>
<playTimeTicksQuick>280</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>39</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.09562898</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>30</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>39</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>30</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>FastFuckFaceForward</stageName>
<playTimeTicks>360</playTimeTicks>
<playTimeTicksQuick>270</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.393279</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>14</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>7.09635925</headAngle>
<headBob>-0.06650379</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>15</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>8.489082</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>2</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>14</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>15</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>FastFuck</stageName>
<playTimeTicks>144</playTimeTicks>
<playTimeTicksQuick>72</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>8</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.09562898</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>9</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>8</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>9</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
<li>
<stageName>Orgasm</stageName>
<playTimeTicks>300</playTimeTicks>
<playTimeTicksQuick>400</playTimeTicksQuick>
<isLooping>true</isLooping>
<animationClips>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>Pawn</layer>
<keyframes>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<quiver>true</quiver>
<tickDuration>66</tickDuration>
<soundEffect>Cum</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>0.0103825331</headBob>
<bodyOffsetX>0.251721561</bodyOffsetX>
<bodyOffsetZ>0.1278264</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>16</tickDuration>
<soundEffect>None</soundEffect>
</li>
<li>
<bodyAngle>14.6821575</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.09562898</headBob>
<bodyOffsetX>0.3166983</bodyOffsetX>
<bodyOffsetZ>0.241406</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>17</tickDuration>
<soundEffect>Slimy</soundEffect>
</li>
<li>
<bodyAngle>16.6431561</bodyAngle>
<headAngle>0.9831765</headAngle>
<headBob>-0.0039331913</headBob>
<bodyOffsetX>0.263521016</bodyOffsetX>
<bodyOffsetZ>0.141592383</bodyOffsetZ>
<headFacing>3</headFacing>
<bodyFacing>2</bodyFacing>
<tickDuration>1</tickDuration>
<soundEffect>None</soundEffect>
</li>
</keyframes>
</li>
<li Class="Rimworld_Animations.PawnAnimationClip">
<layer>LayingPawn</layer>
<keyframes>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>66</tickDuration>
<soundEffect>Fuck</soundEffect>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.0120656937</headBob>
<bodyOffsetX>-0.0200668052</bodyOffsetX>
<bodyOffsetZ>0.0886991248</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>16</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.058226347</headBob>
<bodyOffsetX>-0.0200669244</bodyOffsetX>
<bodyOffsetZ>0.036534965</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>15</genitalAngle>
<tickDuration>17</tickDuration>
</li>
<li>
<bodyAngle>-19.129</bodyAngle>
<headAngle>-14.649</headAngle>
<headBob>0.022</headBob>
<bodyOffsetX>-0.024</bodyOffsetX>
<bodyOffsetZ>0.071</bodyOffsetZ>
<headFacing>1</headFacing>
<bodyFacing>2</bodyFacing>
<genitalAngle>10</genitalAngle>
<tickDuration>1</tickDuration>
</li>
</keyframes>
</li>
</animationClips>
</li>
</animationStages>
</Rimworld_Animations.AnimationDef>
</Defs>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -22,16 +22,10 @@ namespace Rimworld_Animations {
InteractionWithExtension interaction = InteractionHelper.GetWithExtension(sexProps.dictionaryKey);
if(interaction.HasInteractionTag(InteractionTag.Reverse))
{
Pawn buffer = participants[1];
participants[1] = participants[0];
participants[0] = buffer;
}
participants =
participants.OrderBy(p => p.jobs.curDriver is rjw.JobDriver_SexBaseInitiator)
participants.OrderBy(p =>
p.jobs.curDriver is rjw.JobDriver_Sex
&& !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.isReceiver)
.OrderBy(p => rjw.xxx.can_fuck(p))
.ToList();
@ -42,31 +36,36 @@ namespace Rimworld_Animations {
if (x.actors.Count != localParticipants.Count) {
Log.Message(x.defName.ToStringSafe() + " not selected -- doesn't match count");
return false;
}
for (int i = 0; i < x.actors.Count; i++) {
if (rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
if (rjw.xxx.is_male(localParticipants[i]) && x.actors[i].isFucked) {
if (AnimationSettings.debugMode)
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " is fucked, shouldn't be due to homo rules");
return false;
}
}
if (x.actors[i].requiredGender != null && !x.actors[i].requiredGender.Contains(localParticipants[i].gender.ToStringSafe<Gender>()))
{
if (AnimationSettings.debugMode)
{
Log.Message(string.Concat(new string[]
{
x.defName.ToStringSafe<string>(),
" not selected -- ",
localParticipants[i].def.defName.ToStringSafe<string>(),
" ",
localParticipants[i].Name.ToStringSafe<Name>(),
" does not match required gender"
}));
}
return false;
}
}
if (x.actors[i].requiredGender != null && !x.actors[i].requiredGender.Contains(localParticipants[i].gender.ToStringSafe<Gender>()))
{
if (AnimationSettings.debugMode)
{
Log.Message(string.Concat(new string[]
{
x.defName.ToStringSafe<string>(),
" not selected -- ",
localParticipants[i].def.defName.ToStringSafe<string>(),
" ",
localParticipants[i].Name.ToStringSafe<Name>(),
" does not match required gender"
}));
}
return false;
}
if ((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) {
if(AnimationSettings.debugMode)
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is blacklisted");
@ -101,7 +100,8 @@ namespace Rimworld_Animations {
//genitals checking
if(!GenitalCheckForPawn(x.actors[i].requiredGenitals, localParticipants[i], out string failReason)) {
Debug.Log("Didn't select " + x.defName + ", " + localParticipants[i].Name + " " + failReason);
if (AnimationSettings.debugMode)
Log.Message("Didn't select " + x.defName + ", " + localParticipants[i].Name + " " + failReason);
return false;
}
@ -124,8 +124,13 @@ namespace Rimworld_Animations {
return false;
}
}
if (AnimationSettings.debugMode)
Log.Message(x.defName.ToStringSafe() + " selected");
return true;
});
List<AnimationDef> optionsWithInteractionType = options.ToList().FindAll(x => x.interactionDefTypes != null && x.interactionDefTypes.Contains(sexProps.sexType.ToStringSafe()));
if (optionsWithInteractionType.Any()) {
if (AnimationSettings.debugMode)

View file

@ -108,7 +108,16 @@ namespace Rimworld_Animations {
else
{
Quaternion addonRotation = Quaternion.AngleAxis(pawnAnimator.bodyAngle, Vector3.up);
Quaternion addonRotation;
if (AnimationSettings.controlGenitalRotation && ba.path.ToLower().Contains("penis"))
{
addonRotation = Quaternion.AngleAxis(pawnAnimator.genitalAngle, Vector3.up);
}
else
{
addonRotation = Quaternion.AngleAxis(pawnAnimator.bodyAngle, Vector3.up);
}
if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba?.hediffGraphics != null && ba.hediffGraphics.Count != 0 && ba.hediffGraphics[0]?.path != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis")))
{
GenDraw.DrawMeshNowOrLater(mesh: addonGraphic.MeshAt(rot: rotation), loc: vector + (ba.alignWithHead ? headOffset : Vector3.zero) + vector2.RotatedBy(angle: Mathf.Acos(f: Quaternion.Dot(a: Quaternion.identity, b: addonRotation)) * 2f * 57.29578f),