diff --git a/1.4/Defs/AnimationDefs/Animations_Lesbian.xml b/1.4/Defs/AnimationDefs/Animations_Lesbian.xml
index 56d805a..9edb838 100644
--- a/1.4/Defs/AnimationDefs/Animations_Lesbian.xml
+++ b/1.4/Defs/AnimationDefs/Animations_Lesbian.xml
@@ -1,4 +1,4 @@
-
+
Tribadism
@@ -8,7 +8,6 @@
Scissoring
-
Human
@@ -28,9 +27,7 @@
Vagina
-
-
Tribbing
@@ -130,7 +127,6 @@
-
@@ -226,7 +222,6 @@
1
0
-
10
@@ -311,7 +306,6 @@
1
0
-
@@ -355,7 +349,6 @@
2
0
-
@@ -399,7 +392,6 @@
2
0
-
@@ -443,7 +435,6 @@
2
0
-
@@ -487,7 +478,6 @@
2
0
-
@@ -531,7 +521,6 @@
2
0
-
@@ -575,7 +564,6 @@
2
0
-
10
@@ -667,9 +655,7 @@
-
-
Cunnilingus
@@ -681,24 +667,29 @@
Cunnilingus
-
Cunnilingus
CunnilingusF
CunnilingusRape
CunnilingusRapeF
-
Fingering
FingeringF
FingeringRape
FingeringRapeF
-
Fisting
FistingF
FistingRape
FistingRapeF
-
+
+
+ Human
+
+ true
+
+ (-0.1, 0.15)
+
+
Human
@@ -711,51 +702,13 @@
(-0.2, 0.1)
-
-
- Human
-
- true
-
- (-0.1, 0.15)
-
-
-
-
-
Initial
- False
+ false
0
-
-
-
- 60
- -81.06536
- -56.4483032
- 0
- -0.0624052179
- -0.437134951
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.0692383763
- -0.440020353
- 0
- 1
- 1
-
-
-
LayingPawn
@@ -782,18 +735,219 @@
3
Slimy
-
+
+
+
+
+
+ 60
+ -81.06536
+ -56.4483032
+ 0
+ -0.0624052179
+ -0.437134951
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.0692383763
+ -0.440020353
+ 0
+ 1
+ 1
+
-
Slow
- True
+ true
1497
0
+
+ LayingPawn
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 80
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+
+
+ 18
+ -41.1054764
+ -10.1737061
+ 0
+ 0.04582855
+ 0.462155169
+ 0
+ 3
+ 3
+
+
+ 40
+ -38.1903877
+ -31.6517334
+ 0
+ 0.0384018831
+ 0.4874894
+ 0
+ 3
+ 3
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 60
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 20
+ -45.2595444
+ -24.2278748
+ 0
+ 0.0315402448
+ 0.415024319
+ 0
+ 3
+ 3
+
+
+ 40
+ -45.2595444
+ -13.57782
+ 0
+ 0.009577712
+ 0.4726282
+ 0
+ 3
+ 3
+ Slimy
+
+
+ 1
+ -47.9400826
+ -21.93164
+ 0
+ -0.04209958
+ 0.467844343
+ -0.1
+ 3
+ 3
+ Slimy
+
+
+
@@ -829,7 +983,6 @@
1
1
-
98
-87.3645554
@@ -863,7 +1016,6 @@
1
1
-
60
-87.3645554
@@ -910,233 +1062,13 @@
-
- LayingPawn
-
-
- 80
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
-
-
- 18
- -41.1054764
- -10.1737061
- 0
- 0.04582855
- 0.462155169
- 0
- 3
- 3
-
-
- 40
- -38.1903877
- -31.6517334
- 0
- 0.0384018831
- 0.4874894
- 0
- 3
- 3
-
-
- 1
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
- Slimy
-
-
-
- 80
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
-
-
- 18
- -41.1054764
- -10.1737061
- 0
- 0.04582855
- 0.462155169
- 0
- 3
- 3
-
-
- 40
- -38.1903877
- -31.6517334
- 0
- 0.0384018831
- 0.4874894
- 0
- 3
- 3
-
-
- 1
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
- Slimy
-
-
-
- 60
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
- Slimy
-
-
- 40
- -45.2595444
- -13.57782
- 0
- 0.009577712
- 0.4726282
- 0
- 3
- 3
- Slimy
-
-
- 20
- -45.2595444
- -24.2278748
- 0
- 0.0315402448
- 0.415024319
- 0
- 3
- 3
-
-
-
- 40
- -45.2595444
- -13.57782
- 0
- 0.009577712
- 0.4726282
- 0
- 3
- 3
- Slimy
-
-
- 20
- -45.2595444
- -24.2278748
- 0
- 0.0315402448
- 0.415024319
- 0
- 3
- 3
-
-
-
- 40
- -45.2595444
- -13.57782
- 0
- 0.009577712
- 0.4726282
- 0
- 3
- 3
- Slimy
-
-
- 1
- -47.9400826
- -21.93164
- 0
- -0.04209958
- 0.467844343
- -0.1
- 3
- 3
- Slimy
-
-
-
-
-
Transition
- False
+ false
0
-
-
-
- 40
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- 30
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
-
LayingPawn
@@ -1178,15 +1110,6 @@
-
-
-
-
- Fast
- True
- 710
- 0
-
@@ -1222,178 +1145,16 @@
1
1
-
-
- 40
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- 30
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
-
- 40
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
- 30
- -97.90959
- -79.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 2
-
-
- 1
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
-
- 40
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
- 30
- -97.90959
- -79.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 2
-
-
- 1
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
-
- 40
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
- 30
- -97.90959
- -79.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 2
-
-
- 1
- -87.3645554
- -79.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 2
-
-
-
- 40
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- 30
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
+
+
+
+ Fast
+ true
+ 710
+ 0
+
LayingPawn
@@ -1435,18 +1196,10 @@
-
-
-
- Faster
- True
- 360
- 0
-
- 20
+ 40
-87.3645554
-69.70276
0
@@ -1457,7 +1210,172 @@
1
- 15
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 40
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 30
+ -97.90959
+ -79.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 2
+
+
+ 1
+ -87.3645554
+ -79.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 2
+
+
+ 40
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 30
-97.90959
-69.72717
0
@@ -1480,6 +1398,14 @@
+
+
+
+ Faster
+ true
+ 360
+ 0
+
LayingPawn
@@ -1521,136 +1447,54 @@
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
Cum
- True
+ true
639
0
-
-
-
- 20
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- 15
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
-
- 20
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- 15
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
-
- 20
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
- True
- 80
- -97.90959
- -69.72717
- 0
- -0.0259781852
- -0.445601642
- 0
- 1
- 1
- Cum
-
-
- 40
- -99.80413
- -94.4023743
- 0
- -0.01950606
- -0.447728932
- 0
- 1
- 1
-
-
- 1
- -87.3645554
- -69.70276
- 0
- -0.06923838
- -0.440020353
- 0
- 1
- 1
-
-
-
LayingPawn
-
20
-47.9400826
@@ -1687,7 +1531,6 @@
3
Slimy
-
20
-47.9400826
@@ -1724,7 +1567,6 @@
3
Slimy
-
20
-47.9400826
@@ -1773,10 +1615,124 @@
+
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 15
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ 20
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+ true
+ 80
+ -97.90959
+ -69.72717
+ 0
+ -0.0259781852
+ -0.445601642
+ 0
+ 1
+ 1
+ Cum
+
+
+ 40
+ -99.80413
+ -94.4023743
+ 0
+ -0.01950606
+ -0.447728932
+ 0
+ 1
+ 1
+
+
+ 1
+ -87.3645554
+ -69.70276
+ 0
+ -0.06923838
+ -0.440020353
+ 0
+ 1
+ 1
+
+
+
-
-
-
+
\ No newline at end of file
diff --git a/1.4/Source/Animations/AnimationStage.cs b/1.4/Source/Animations/AnimationStage.cs
index 7a1304e..6f0f709 100644
--- a/1.4/Source/Animations/AnimationStage.cs
+++ b/1.4/Source/Animations/AnimationStage.cs
@@ -15,14 +15,17 @@ namespace Rimworld_Animations {
public List animationClips;
public List tags = new List();
- public void initialize() {
- foreach (BaseAnimationClip clip in animationClips) {
- clip.buildSimpleCurves();
+ public int Initialize(List isGenitalAngleMandatory) {
+ var brokenClips = 0;
+ for (var i = 0; i < animationClips.Count; ++i) {
+ var clip = animationClips[i];
+ if (clip.BuildSimpleCurves(isGenitalAngleMandatory[i]))
+ ++brokenClips;
//select playTimeTicks as longest playtime of all the animations
- if(clip.duration > playTimeTicks) {
- playTimeTicks = clip.duration;
- }
+ if (clip.duration > playTimeTicks)
+ playTimeTicks = clip.duration;
}
+ return brokenClips;
}
}
}
diff --git a/1.4/Source/Animations/Clips/BaseAnimationClip.cs b/1.4/Source/Animations/Clips/BaseAnimationClip.cs
index aa35b31..119fbf3 100644
--- a/1.4/Source/Animations/Clips/BaseAnimationClip.cs
+++ b/1.4/Source/Animations/Clips/BaseAnimationClip.cs
@@ -12,9 +12,18 @@ namespace Rimworld_Animations {
public Dictionary SoundEffects = new Dictionary();
public List types; //types of participants
public int duration;
- public abstract void buildSimpleCurves();
+ /** failure - if 'true', this clip should not be used */
+ public abstract bool BuildSimpleCurves(bool isGenitalAngleMandatory = false);
public string soundDef = null; //for playing sounds
public int actor;
public List tags = new List();
+
+ protected bool EmitMandatoryCurveEmptyError(SimpleCurve curve, string name) {
+ if (curve.PointsCount <= 0) {
+ Log.Error($"Mandatory curve '{name}' is empty in an animation clip!");
+ return true;
+ }
+ return false;
+ }
}
}
diff --git a/1.4/Source/Animations/Clips/PawnAnimationClip.cs b/1.4/Source/Animations/Clips/PawnAnimationClip.cs
index e9d2489..e4e2f67 100644
--- a/1.4/Source/Animations/Clips/PawnAnimationClip.cs
+++ b/1.4/Source/Animations/Clips/PawnAnimationClip.cs
@@ -21,9 +21,9 @@ namespace Rimworld_Animations {
public SimpleCurve BodyOffsetZ = new SimpleCurve();
public SimpleCurve HeadFacing = new SimpleCurve();
public SimpleCurve BodyFacing = new SimpleCurve();
-
- public override void buildSimpleCurves() {
+
+ public override bool BuildSimpleCurves(bool isGenitalAngleMandatory) {
int duration = 0;
@@ -109,7 +109,18 @@ namespace Rimworld_Animations {
}
+ // check whether all mandatory curves have been filled
+ bool invalid = false;
+ invalid |= this.EmitMandatoryCurveEmptyError(this.BodyOffsetX, "BodyOffsetX");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.BodyOffsetZ, "BodyOffsetZ");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.BodyAngle, "BodyAngle");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.HeadAngle, "HeadAngle");
+ if (isGenitalAngleMandatory)
+ invalid |= this.EmitMandatoryCurveEmptyError(this.GenitalAngle, "GenitalAngle");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.BodyFacing, "BodyFacing");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.HeadFacing, "HeadFacing");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.HeadBob, "HeadBob");
+ return invalid;
}
-
}
}
diff --git a/1.4/Source/Animations/Clips/ThingAnimationClip.cs b/1.4/Source/Animations/Clips/ThingAnimationClip.cs
index 26f4d4c..c3661de 100644
--- a/1.4/Source/Animations/Clips/ThingAnimationClip.cs
+++ b/1.4/Source/Animations/Clips/ThingAnimationClip.cs
@@ -16,7 +16,7 @@ namespace Rimworld_Animations {
public SimpleCurve Rotation = new SimpleCurve();
- public override void buildSimpleCurves() {
+ public override bool BuildSimpleCurves(bool unused = false) {
int duration = 0;
//getting the length of the whole clip
foreach (ThingKeyframe frame in keyframes)
@@ -69,6 +69,13 @@ namespace Rimworld_Animations {
}
}
+
+ // check whether all mandatory curves have been filled
+ bool invalid = false;
+ invalid |= this.EmitMandatoryCurveEmptyError(this.PositionX, "PositionX");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.PositionZ, "PositionZ");
+ invalid |= this.EmitMandatoryCurveEmptyError(this.Rotation, "Rotation");
+ return invalid;
}
}
}
diff --git a/1.4/Source/Defs/AnimationDef.cs b/1.4/Source/Defs/AnimationDef.cs
index 395ff83..2b13680 100644
--- a/1.4/Source/Defs/AnimationDef.cs
+++ b/1.4/Source/Defs/AnimationDef.cs
@@ -19,8 +19,12 @@ namespace Rimworld_Animations {
public override void PostLoad() {
base.PostLoad();
+ // FIXME: I could not figure out how to map between controlGenitalAngle and PawnAnimationClip. This is brittle AF! -Zsar 2023-04-16
+ var controlGenitalAngle = this.actors.ConvertAll(actor => actor.controlGenitalAngle);
foreach(AnimationStage stage in animationStages) {
- stage.initialize();
+ var brokenClips = stage.Initialize(controlGenitalAngle);
+ if (brokenClips > 0)
+ throw new Exception($"AnimationDef '{this.defName}', stage '{stage.stageName}' contained {brokenClips} broken Clips. The animation has been dropped.");
animationTimeTicks += stage.playTimeTicks;
}
}
diff --git a/1.4/Source/Utilities/AnimationUtility.cs b/1.4/Source/Utilities/AnimationUtility.cs
index fa60198..a02a9ff 100644
--- a/1.4/Source/Utilities/AnimationUtility.cs
+++ b/1.4/Source/Utilities/AnimationUtility.cs
@@ -25,9 +25,7 @@ namespace Rimworld_Animations {
participants =
participants.OrderBy(p =>
p.jobs.curDriver is rjw.JobDriver_Sex
- && !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.isRevese /*Gargulefix!!!*/
- && !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.isReceiver)
- .OrderBy(p => rjw.xxx.can_fuck(p))
+ && !(p.jobs.curDriver as rjw.JobDriver_Sex).Sexprops.IsSubmissive()) //New Gargulefix. canFuck check is gone cuz it tends to break stuff
.ToList();