mirror of
https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
synced 2024-08-15 00:43:45 +00:00
update no har
This commit is contained in:
commit
1b13aa267c
13 changed files with 2698 additions and 37 deletions
BIN
Defs/AnimationDefs/AnimationDefs.rar
Normal file
BIN
Defs/AnimationDefs/AnimationDefs.rar
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
377
Defs/AnimationDefs/Animations_Vanilla2.xml
Normal file
377
Defs/AnimationDefs/Animations_Vanilla2.xml
Normal file
|
@ -0,0 +1,377 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<Defs>
|
||||
<!--
|
||||
<Rimworld_Animations.AnimationDef>
|
||||
<defName>Missionary</defName>
|
||||
<label>missionary</label>
|
||||
<sounds>true</sounds>
|
||||
<sexTypes>
|
||||
<li>Vaginal</li>
|
||||
<li>Anal</li>
|
||||
</sexTypes>
|
||||
<actors>
|
||||
<li>
|
||||
<defNames>
|
||||
<li>Human</li>
|
||||
</defNames>
|
||||
<isFucked>true</isFucked>
|
||||
<bodyTypeOffset>
|
||||
<Thin>(0.1, 0.1)</Thin>
|
||||
</bodyTypeOffset>
|
||||
</li>
|
||||
<li>
|
||||
<defNames>
|
||||
<li>Human</li>
|
||||
</defNames>
|
||||
<isFucking>true</isFucking>
|
||||
<initiator>true</initiator>
|
||||
<bodyTypeOffset>
|
||||
<Hulk>(0, 0.2)</Hulk>
|
||||
</bodyTypeOffset>
|
||||
</li>
|
||||
</actors>
|
||||
|
||||
<animationStages>
|
||||
<li>
|
||||
<stageName>Slow_Insert</stageName>
|
||||
<isLooping>false</isLooping>
|
||||
<playTimeTicks>181</playTimeTicks>
|
||||
<stageIndex>0</stageIndex>
|
||||
<animationClips>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>120</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.76135</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.00123929977</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.288235933</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-85.3898849</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.30147323</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.78256</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.30147323</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<layer>LayingPawn</layer>
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>120</tickDuration>
|
||||
<bodyAngle>-8.415361</bodyAngle>
|
||||
<headAngle>-24.7466831</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.275328381</bodyOffsetZ>
|
||||
<bodyOffsetX>0.5114879</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>11.5036926</bodyAngle>
|
||||
<headAngle>-10.2523956</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.226816757</bodyOffsetZ>
|
||||
<bodyOffsetX>0.3989886</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
<soundEffect>Slimy</soundEffect>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>3.36438</bodyAngle>
|
||||
<headAngle>-18.3917084</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.233432038</bodyOffsetZ>
|
||||
<bodyOffsetX>0.4034014</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
</animationClips>
|
||||
</li>
|
||||
<li>
|
||||
<stageName>Breathing</stageName>
|
||||
<isLooping>true</isLooping>
|
||||
<playTimeTicks>182</playTimeTicks>
|
||||
<stageIndex>0</stageIndex>
|
||||
<animationClips>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>45</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.78256</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.30147323</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>45</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.78256</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.33147323</bodyOffsetX>
|
||||
<headBob>-0.03</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.78256</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.30147323</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<layer>LayingPawn</layer>
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>45</tickDuration>
|
||||
<bodyAngle>3.36438</bodyAngle>
|
||||
<headAngle>-18.3917084</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.233432038</bodyOffsetZ>
|
||||
<bodyOffsetX>0.4034014</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>45</tickDuration>
|
||||
<bodyAngle>3.36438</bodyAngle>
|
||||
<headAngle>-18.3917084</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.273432038</bodyOffsetZ>
|
||||
<bodyOffsetX>0.4034014</bodyOffsetX>
|
||||
<headBob>-0.03</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>3.36438</bodyAngle>
|
||||
<headAngle>-18.3917084</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.233432038</bodyOffsetZ>
|
||||
<bodyOffsetX>0.4034014</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
</animationClips>
|
||||
</li>
|
||||
<li>
|
||||
<stageName>Slow_Fuck_Start</stageName>
|
||||
<isLooping>true</isLooping>
|
||||
<playTimeTicks></playTimeTicks>
|
||||
<stageIndex>0</stageIndex>
|
||||
<animationClips>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-77.78256</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.0254950486</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.30147323</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-72.1512451</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.025494989</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.29485938</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<layer>LayingPawn</layer>
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>3.36438</bodyAngle>
|
||||
<headAngle>-18.3917084</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.233432038</bodyOffsetZ>
|
||||
<bodyOffsetX>0.4034014</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-5.439103</bodyAngle>
|
||||
<headAngle>-18.591362</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.253895342</bodyOffsetZ>
|
||||
<bodyOffsetX>0.5181109</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
|
||||
</keyframes>
|
||||
</li>
|
||||
</animationClips>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<stageName>Slow_Fuck</stageName>
|
||||
<isLooping>true</isLooping>
|
||||
<playTimeTicks>1212</playTimeTicks>
|
||||
<stageIndex>0</stageIndex>
|
||||
<animationClips>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>30</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-72.1512451</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.025494989</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.29485938</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>5</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-67.51352</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.025494989</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.279417485</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-67.51352</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.025494989</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.339417485</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-82.7437439</bodyAngle>
|
||||
<headAngle>-72.1512451</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.025494989</bodyOffsetZ>
|
||||
<bodyOffsetX>-0.29485938</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>1</bodyFacing>
|
||||
<headFacing>1</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<layer>LayingPawn</layer>
|
||||
<keyframes>
|
||||
<li>
|
||||
<tickDuration>30</tickDuration>
|
||||
<bodyAngle>-5.439103</bodyAngle>
|
||||
<headAngle>-18.591362</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.253895342</bodyOffsetZ>
|
||||
<bodyOffsetX>0.5181109</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>5</tickDuration>
|
||||
<bodyAngle>12.3350525</bodyAngle>
|
||||
<headAngle>-14.779211</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.2605105</bodyOffsetZ>
|
||||
<bodyOffsetX>0.449729085</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
<soundEffect>Fuck</soundEffect>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>60</tickDuration>
|
||||
<bodyAngle>12.3350525</bodyAngle>
|
||||
<headAngle>-14.779211</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.2605105</bodyOffsetZ>
|
||||
<bodyOffsetX>0.389729085</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
<li>
|
||||
<tickDuration>1</tickDuration>
|
||||
<bodyAngle>-5.439103</bodyAngle>
|
||||
<headAngle>-18.591362</headAngle>
|
||||
<genitalAngle>0</genitalAngle>
|
||||
<bodyOffsetZ>0.253895342</bodyOffsetZ>
|
||||
<bodyOffsetX>0.5181109</bodyOffsetX>
|
||||
<headBob>0</headBob>
|
||||
<bodyFacing>3</bodyFacing>
|
||||
<headFacing>3</headFacing>
|
||||
</li>
|
||||
</keyframes>
|
||||
</li>
|
||||
</animationClips>
|
||||
</li>
|
||||
</animationStages>
|
||||
</Rimworld_Animations.AnimationDef>
|
||||
-->
|
||||
</Defs>
|
||||
|
||||
|
54
Defs/AnimationDefs/TemplateAnimation.xml
Normal file
54
Defs/AnimationDefs/TemplateAnimation.xml
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<Defs>
|
||||
<!--
|
||||
<Rimworld_Animations.AnimationDef>
|
||||
<defName></defName>
|
||||
<label></label>
|
||||
<sounds>true</sounds>
|
||||
<sexTypes>
|
||||
<li>Anal</li>
|
||||
<li>Vaginal</li>
|
||||
</sexTypes>
|
||||
<actors>
|
||||
<li>
|
||||
<defNames>
|
||||
<li>Human</li>
|
||||
</defNames>
|
||||
<isFucked>true</isFucked>
|
||||
</li>
|
||||
<li>
|
||||
<defNames>
|
||||
</defNames>
|
||||
<bodyDefTypes>
|
||||
<li>QuadrupedAnimalWithHooves</li>
|
||||
<li>QuadrupedAnimalWithPawsAndTail</li>
|
||||
</bodyDefTypes>
|
||||
<isFucking>true</isFucking>
|
||||
<initiator>true</initiator>
|
||||
</li>
|
||||
</actors>
|
||||
|
||||
|
||||
|
||||
<animationStages>
|
||||
<li>
|
||||
<stageName></stageName>
|
||||
<isLooping></isLooping>
|
||||
<playTimeTicks></playTimeTicks>
|
||||
<stageIndex>0</stageIndex>
|
||||
<animationClips>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<layer>LayingPawn</layer>
|
||||
<keyframes></keyframes>
|
||||
</li>
|
||||
<li Class="Rimworld_Animations.PawnAnimationClip">
|
||||
<keyframes></keyframes>
|
||||
</li>
|
||||
</animationClips>
|
||||
</li>
|
||||
|
||||
</animationStages>
|
||||
|
||||
</Rimworld_Animations.AnimationDef>
|
||||
-->
|
||||
</Defs>
|
|
@ -188,8 +188,8 @@
|
|||
</li>
|
||||
</grains>
|
||||
<volumeRange>
|
||||
<min>15</min>
|
||||
<max>25</max>
|
||||
<min>45</min>
|
||||
<max>75</max>
|
||||
</volumeRange>
|
||||
<pitchRange>
|
||||
<min>1.4</min>
|
||||
|
@ -197,7 +197,7 @@
|
|||
</pitchRange>
|
||||
<distRange>
|
||||
<min>0</min>
|
||||
<max>25</max>
|
||||
<max>100</max>
|
||||
</distRange>
|
||||
<repeatMode>NeverTwice</repeatMode>
|
||||
<sustainLoop>false</sustainLoop>
|
||||
|
|
|
@ -110,6 +110,7 @@
|
|||
<Content Include="Defs\AnimationDefs\Animations_Masturbate.xml" />
|
||||
<Content Include="Defs\AnimationDefs\Animations_Multi.xml" />
|
||||
<Content Include="Defs\AnimationDefs\Animations_vanilla.xml" />
|
||||
<Content Include="Defs\AnimationDefs\Animations_Vanilla2.xml" />
|
||||
<Content Include="Defs\JobDefs\Jobs_SexForAnim.xml" />
|
||||
<Content Include="Defs\MainTabDefs\MainButtonDef.xml" />
|
||||
<Content Include="Defs\SoundDefs\Sounds_Sex.xml" />
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace Rimworld_Animations {
|
|||
public bool isFucking = false;
|
||||
public bool isFucked = false;
|
||||
public bool controlGenitalAngle = false;
|
||||
public List<BodyDef> bodyDefTypes = new List<BodyDef>();
|
||||
public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset();
|
||||
public Vector3 offset = new Vector2(0, 0);
|
||||
|
||||
|
|
|
@ -14,28 +14,36 @@ namespace Rimworld_Animations {
|
|||
Note: always make the list in this order:
|
||||
Female pawns, animal female pawns, male pawns, animal male pawns
|
||||
*/
|
||||
public static AnimationDef tryFindAnimation(ref List<Pawn> participants, rjw.xxx.rjwSextype sexType = 0) {
|
||||
public static AnimationDef tryFindAnimation(ref List<Pawn> participants, rjw.xxx.rjwSextype sexType = 0, rjw.SexProps sexProps = null) {
|
||||
|
||||
//aggressors last
|
||||
participants = participants.OrderBy(p => p.jobs.curDriver is rjw.JobDriver_SexBaseInitiator).ToList();
|
||||
|
||||
//fucked first, fucking second
|
||||
participants = participants.OrderBy(p => p == sexProps.Giver).ToList();
|
||||
|
||||
participants = participants.OrderByDescending(p => rjw.GenderHelper.GetSex(p) == rjw.GenderHelper.Sex.futa).ToList();
|
||||
|
||||
//pawns that can fuck last
|
||||
participants = participants.OrderBy(p => rjw.xxx.can_fuck(p)).ToList();
|
||||
|
||||
if(rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
|
||||
participants = participants.OrderBy(x => rjw.xxx.is_male(x)).ToList();
|
||||
}
|
||||
|
||||
List<Pawn> localParticipants = new List<Pawn>(participants);
|
||||
|
||||
IEnumerable<AnimationDef> options = DefDatabase<AnimationDef>.AllDefs.Where((AnimationDef x) => {
|
||||
|
||||
|
||||
if (x.actors.Count != localParticipants.Count) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < x.actors.Count; i++) {
|
||||
|
||||
if((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) {
|
||||
if (rjw.RJWPreferenceSettings.Malesex == rjw.RJWPreferenceSettings.AllowedSex.Nohomo) {
|
||||
if (rjw.xxx.is_male(localParticipants[i]) && x.actors[i].isFucked) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ((x.actors[i].blacklistedRaces != null) && x.actors[i].blacklistedRaces.Contains(localParticipants[i].def.defName)) {
|
||||
if (rjw.RJWSettings.DevMode) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " is blacklisted");
|
||||
}
|
||||
|
@ -51,7 +59,8 @@ namespace Rimworld_Animations {
|
|||
return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
else if (!x.actors[i].bodyDefTypes.Contains(localParticipants[i].RaceProps.body)) {
|
||||
|
||||
if (!x.actors[i].defNames.Contains(localParticipants[i].def.defName)) {
|
||||
|
||||
|
@ -66,22 +75,103 @@ namespace Rimworld_Animations {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
//genitals checking
|
||||
if(x.actors[i].requiredGenitals != null) {
|
||||
if (x.actors[i].requiredGenitals.Contains("Vagina")) {
|
||||
|
||||
if(x.actors[i].requiredGenitals != null && x.actors[i].requiredGenitals.Contains("Vagina")) {
|
||||
if (!rjw.Genital_Helper.has_vagina(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have vagina");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!rjw.Genital_Helper.has_vagina(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have vagina");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("Penis")) {
|
||||
|
||||
if (!(rjw.Genital_Helper.has_multipenis(localParticipants[i]) || rjw.Genital_Helper.has_penis_infertile(localParticipants[i]) || rjw.Genital_Helper.has_penis_fertile(localParticipants[i]))) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have penis");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("Mouth")) {
|
||||
|
||||
if (!rjw.Genital_Helper.has_mouth(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have mouth");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("Anus")) {
|
||||
|
||||
if (!rjw.Genital_Helper.has_anus(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have anus");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(x.actors[i].requiredGenitals.Contains("Breasts")) {
|
||||
if (!rjw.Genital_Helper.can_do_breastjob(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " doesn't have breasts");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("NoVagina")) {
|
||||
|
||||
if (rjw.Genital_Helper.has_vagina(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has vagina");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("NoPenis")) {
|
||||
|
||||
if ((rjw.Genital_Helper.has_multipenis(localParticipants[i]) || rjw.Genital_Helper.has_penis_infertile(localParticipants[i]) || rjw.Genital_Helper.has_penis_fertile(localParticipants[i]))) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has penis");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("NoMouth")) {
|
||||
|
||||
if (rjw.Genital_Helper.has_mouth(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has mouth");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("NoAnus")) {
|
||||
|
||||
if (rjw.Genital_Helper.has_anus(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has anus");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (x.actors[i].requiredGenitals.Contains("NoBreasts")) {
|
||||
if (rjw.Genital_Helper.can_do_breastjob(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " has breasts");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//TESTING ANIMATIONS ONLY REMEMBER TO COMMENT OUT BEFORE PUSH
|
||||
/*
|
||||
if (x.defName != "Doggystyle")
|
||||
if (x.defName != "Cunnilingus")
|
||||
return false;
|
||||
*/
|
||||
|
||||
|
||||
|
||||
if (x.actors[i].isFucking && !rjw.xxx.can_fuck(localParticipants[i])) {
|
||||
Log.Message(x.defName.ToStringSafe() + " not selected -- " + localParticipants[i].def.defName.ToStringSafe() + " " + localParticipants[i].Name.ToStringSafe() + " can't fuck");
|
||||
|
@ -102,7 +192,15 @@ namespace Rimworld_Animations {
|
|||
|
||||
//if the animation not for initiators, but an initiator is playing it
|
||||
|
||||
if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) {
|
||||
if(sexProps != null) {
|
||||
|
||||
if(x.actors[i].initiator && localParticipants[i] == sexProps.Reciever) {
|
||||
initiatorsAlignWithSexType = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) {
|
||||
initiatorsAlignWithSexType = false;
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +212,15 @@ namespace Rimworld_Animations {
|
|||
|
||||
//if the animation not for initiators, but an initiator is playing it
|
||||
|
||||
if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) {
|
||||
if (sexProps != null) {
|
||||
|
||||
if (x.actors[i].initiator && localParticipants[i] == sexProps.Giver) {
|
||||
initiatorsAlignWithSexType = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else if (x.actors[i].initiator && !(localParticipants[i].jobs.curDriver is rjw.JobDriver_SexBaseInitiator)) {
|
||||
initiatorsAlignWithSexType = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,13 +38,15 @@ namespace Rimworld_Animations {
|
|||
private bool mirror = false, quiver = false, shiver = false;
|
||||
private int actor;
|
||||
|
||||
private int lastDrawFrame = -1;
|
||||
|
||||
private int animTicks = 0, stageTicks = 0, clipTicks = 0;
|
||||
private int curStage = 0;
|
||||
private float clipPercent = 0;
|
||||
|
||||
public Vector3 anchor, deltaPos, headBob;
|
||||
public float bodyAngle, headAngle, genitalAngle;
|
||||
public Rot4 headFacing, bodyFacing;
|
||||
public Vector3 anchor = Vector3.zero, deltaPos = Vector3.zero, headBob = Vector3.zero;
|
||||
public float bodyAngle = 0, headAngle = 0, genitalAngle = 0;
|
||||
public Rot4 headFacing = Rot4.North, bodyFacing = Rot4.North;
|
||||
|
||||
public bool controlGenitalAngle = false;
|
||||
|
||||
|
@ -102,8 +104,6 @@ namespace Rimworld_Animations {
|
|||
}
|
||||
public void StartAnimation(AnimationDef anim, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) {
|
||||
|
||||
isAnimating = true;
|
||||
|
||||
AlienRaceOffset raceOffset = anim?.actors[actor]?.raceOffsets?.Find(x => x.defName == pawn.def.defName);
|
||||
|
||||
if (raceOffset != null) {
|
||||
|
@ -151,9 +151,12 @@ namespace Rimworld_Animations {
|
|||
|
||||
controlGenitalAngle = anim.actors[actor].controlGenitalAngle;
|
||||
|
||||
isAnimating = true;
|
||||
//tick once for initialization
|
||||
tickAnim();
|
||||
|
||||
|
||||
|
||||
}
|
||||
public override void CompTick() {
|
||||
|
||||
|
@ -259,6 +262,10 @@ namespace Rimworld_Animations {
|
|||
|
||||
public void calculateDrawValues() {
|
||||
|
||||
/*if(Find.TickManager.TickRateMultiplier > 1 && (lastDrawFrame + 1 >= RealTime.frameCount || RealTime.deltaTime < 0.05f)) {
|
||||
return;
|
||||
}*/
|
||||
|
||||
deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent) * (mirror ? -1 : 1), clip.layer.AltitudeFor(), clip.BodyOffsetZ.Evaluate(clipPercent));
|
||||
|
||||
if (AnimationSettings.offsets != null && AnimationSettings.offsets.ContainsKey(CurrentAnimation.defName + pawn.def.defName + ActorIndex)) {
|
||||
|
@ -307,6 +314,8 @@ namespace Rimworld_Animations {
|
|||
}
|
||||
headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent));
|
||||
|
||||
lastDrawFrame = RealTime.frameCount;
|
||||
|
||||
}
|
||||
|
||||
public Vector3 getPawnHeadPosition() {
|
||||
|
|
|
@ -79,9 +79,9 @@ namespace Rimworld_Animations {
|
|||
|
||||
|
||||
Vector2 bodyOffset = (portrait ? offset?.portraitBodyTypes ?? offset?.bodyTypes : offset?.bodyTypes)?.FirstOrDefault(predicate: to => to.bodyType == pawn.story.bodyType)
|
||||
?.offset ?? Vector2.zero;
|
||||
Vector2 crownOffset = (portrait ? offset?.portraitCrownTypes ?? offset?.crownTypes : offset?.crownTypes)?.FirstOrDefault(predicate: to => to.crownType == alienComp.crownType)
|
||||
?.offset ?? Vector2.zero;
|
||||
?.offset ?? Vector2.zero;
|
||||
Vector2 crownOffset = (portrait ? offset?.portraitCrownTypes ?? offset?.crownTypes : offset?.crownTypes)?.FirstOrDefault(predicate: to => to.crownType == alienComp.crownType)
|
||||
?.offset ?? Vector2.zero;
|
||||
|
||||
//Defaults for tails
|
||||
//south 0.42f, -0.3f, -0.22f
|
||||
|
@ -130,7 +130,7 @@ namespace Rimworld_Animations {
|
|||
else {
|
||||
|
||||
Quaternion addonRotation = quat;
|
||||
if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba.hediffGraphics[0] != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis"))) {
|
||||
if (AnimationSettings.controlGenitalRotation && pawnAnimator.controlGenitalAngle && ba.hediffGraphics[0]?.path != null && (ba.hediffGraphics[0].path.Contains("Penis") || ba.hediffGraphics[0].path.Contains("penis"))) {
|
||||
addonRotation = Quaternion.AngleAxis(angle: pawnAnimator.genitalAngle, axis: Vector3.up);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,8 +23,7 @@ namespace Rimworld_Animations {
|
|||
}
|
||||
|
||||
if(__instance is JobDriver_JoinInBed) {
|
||||
Log.Warning("Tried to start wrong JobDriver with Rimworld-Animations installed. If you see this warning soon after installing this mod, it's fine and animated sex will start soon. If you see this a long time after installing, that's a problem.");
|
||||
return;
|
||||
Log.Warning("Playing regular RJW joininbed jobdriver, if it animates properly ignore this warning");
|
||||
}
|
||||
|
||||
Pawn pawn = __instance.pawn;
|
||||
|
@ -55,15 +54,15 @@ namespace Rimworld_Animations {
|
|||
bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie;
|
||||
|
||||
if (bed != null) {
|
||||
RerollAnimations(Target, __instance.duration, bed as Thing, __instance.sexType, quickie);
|
||||
RerollAnimations(Target, __instance.duration, bed as Thing, __instance.sexType, quickie, sexProps: __instance.Sexprops);
|
||||
}
|
||||
else {
|
||||
RerollAnimations(Target, __instance.duration, sexType: __instance.sexType, fastAnimForQuickie: quickie);
|
||||
RerollAnimations(Target, __instance.duration, sexType: __instance.sexType, fastAnimForQuickie: quickie, sexProps: __instance.Sexprops);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void RerollAnimations(Pawn pawn, int duration, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false) {
|
||||
public static void RerollAnimations(Pawn pawn, int duration, Thing bed = null, xxx.rjwSextype sexType = xxx.rjwSextype.None, bool fastAnimForQuickie = false, rjw.SexProps sexProps = null) {
|
||||
|
||||
if(pawn == null || !(pawn.jobs?.curDriver is JobDriver_SexBaseReciever)) {
|
||||
Log.Message("Error: Tried to reroll animations when pawn isn't sexing");
|
||||
|
@ -76,7 +75,7 @@ namespace Rimworld_Animations {
|
|||
pawnsToAnimate = pawnsToAnimate.Append(pawn).ToList();
|
||||
}
|
||||
|
||||
AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType);
|
||||
AnimationDef anim = AnimationUtility.tryFindAnimation(ref pawnsToAnimate, sexType, sexProps);
|
||||
|
||||
if (anim != null) {
|
||||
|
||||
|
|
|
@ -25,9 +25,11 @@ namespace Rimworld_Animations {
|
|||
|
||||
if (pawn.IsHashIntervalTick(__instance.ticks_between_thrusts)) {
|
||||
|
||||
__instance.Animate(pawn, (Thing)pawn2);
|
||||
__instance.ChangePsyfocus(pawn, pawn2);
|
||||
|
||||
if (!AnimationSettings.soundOverride || !pawn.TryGetComp<CompBodyAnimator>().isAnimating) {
|
||||
__instance.Animate(pawn, pawn2);
|
||||
|
||||
if (!AnimationSettings.soundOverride || pawn.TryGetComp<CompBodyAnimator>() == null || !pawn.TryGetComp<CompBodyAnimator>().isAnimating) {
|
||||
__instance.PlaySexSound();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue