mirror of
				https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
				synced 2024-08-15 00:43:45 +00:00 
			
		
		
		
	Added animation selecting based on defined contexts
This commit is contained in:
		
							parent
							
								
									16af5bb63a
								
							
						
					
					
						commit
						db4c2d3833
					
				
					 29 changed files with 506 additions and 259 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -4,13 +4,8 @@
 | 
				
			||||||
		<defName>TestAnimation1</defName>
 | 
							<defName>TestAnimation1</defName>
 | 
				
			||||||
		<durationTicks>400</durationTicks>
 | 
							<durationTicks>400</durationTicks>
 | 
				
			||||||
		<playWhenDowned>False</playWhenDowned>
 | 
							<playWhenDowned>False</playWhenDowned>
 | 
				
			||||||
		<modExtensions>
 | 
					 | 
				
			||||||
			<li Class="Rimworld_Animations.AltitudeLayer">
 | 
					 | 
				
			||||||
				<PawnAltitudeLayer>Pawn</PawnAltitudeLayer>
 | 
					 | 
				
			||||||
			</li>
 | 
					 | 
				
			||||||
		</modExtensions>
 | 
					 | 
				
			||||||
		<animationParts>
 | 
							<animationParts>
 | 
				
			||||||
	
 | 
								<!--Note: Rotate animal body by setting body rotation, not head rotation; different for animals-->
 | 
				
			||||||
			<li>
 | 
								<li>
 | 
				
			||||||
				<key>Root</key>
 | 
									<key>Root</key>
 | 
				
			||||||
				<value>
 | 
									<value>
 | 
				
			||||||
| 
						 | 
					@ -19,58 +14,52 @@
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>30</tick>
 | 
												<tick>30</tick>
 | 
				
			||||||
							<angle>0</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>North</rotation>
 | 
					 | 
				
			||||||
							<visible>true</visible>
 | 
												<visible>true</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>100</tick>
 | 
												<tick>100</tick>
 | 
				
			||||||
							<angle>0</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>East</rotation>
 | 
					 | 
				
			||||||
							<visible>true</visible>
 | 
												<visible>true</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>200</tick>
 | 
												<tick>200</tick>
 | 
				
			||||||
							<angle>0</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>South</rotation>
 | 
					 | 
				
			||||||
							<visible>true</visible>
 | 
												<visible>true</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>300</tick>
 | 
												<tick>300</tick>
 | 
				
			||||||
							<angle>0</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>West</rotation>
 | 
					 | 
				
			||||||
							<visible>true</visible>
 | 
												<visible>true</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
					</keyframes>
 | 
										</keyframes>
 | 
				
			||||||
				</value>
 | 
									</value>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
					<!--
 | 
					 | 
				
			||||||
			<li>
 | 
								<li>
 | 
				
			||||||
				<key>Body</key>
 | 
									<key>Body</key>
 | 
				
			||||||
				<value>
 | 
									<value>
 | 
				
			||||||
					<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
 | 
										<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
 | 
				
			||||||
					<keyframes>
 | 
										<keyframes>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>30</tick>
 | 
												<tick>0</tick>
 | 
				
			||||||
							<angle>30</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>North</rotation>
 | 
												<rotation>North</rotation>
 | 
				
			||||||
							<visible>false</visible>
 | 
												<visible>false</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>300</tick>
 | 
												<tick>50</tick>
 | 
				
			||||||
							<angle>150</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
							<rotation>South</rotation>
 | 
												<rotation>South</rotation>
 | 
				
			||||||
							<visible>true</visible>
 | 
												<visible>true</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>600</tick>
 | 
												<tick>100</tick>
 | 
				
			||||||
							<angle>30</angle>
 | 
												<angle>30</angle>
 | 
				
			||||||
							<rotation>North</rotation>
 | 
												<rotation>East</rotation>
 | 
				
			||||||
							<visible>false</visible>
 | 
												<visible>false</visible>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
					</keyframes>
 | 
										</keyframes>
 | 
				
			||||||
				</value>
 | 
									</value>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
			-->
 | 
					 | 
				
			||||||
			<li>
 | 
								<li>
 | 
				
			||||||
				<key>Head</key>
 | 
									<key>Head</key>
 | 
				
			||||||
				<value>
 | 
									<value>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,23 +10,31 @@
 | 
				
			||||||
			<li>
 | 
								<li>
 | 
				
			||||||
				<key>Root</key>
 | 
									<key>Root</key>
 | 
				
			||||||
				<value>
 | 
									<value>
 | 
				
			||||||
					<workerClass>AnimationWorker_Keyframes</workerClass>
 | 
										<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
 | 
				
			||||||
					<keyframes>
 | 
										<keyframes>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
 | 
												<offset>(0, -1, 0)</offset>
 | 
				
			||||||
							<tick>0</tick>
 | 
												<tick>0</tick>
 | 
				
			||||||
							<angle>23</angle>
 | 
												<angle>23</angle>
 | 
				
			||||||
 | 
												<rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
 | 
											  <offset>(0, -1, 0)</offset>
 | 
				
			||||||
						  <tick>6</tick>
 | 
											  <tick>6</tick>
 | 
				
			||||||
						  <angle>-5</angle>
 | 
											  <angle>-5</angle>
 | 
				
			||||||
 | 
											  <rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
 | 
											  <offset>(0, -1, 0)</offset>
 | 
				
			||||||
						  <tick>12</tick>
 | 
											  <tick>12</tick>
 | 
				
			||||||
						  <angle>4</angle>
 | 
											  <angle>4</angle>
 | 
				
			||||||
 | 
											  <rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
 | 
											  <offset>(0, -1, 0)</offset>
 | 
				
			||||||
						  <tick>188</tick>
 | 
											  <tick>188</tick>
 | 
				
			||||||
						  <angle>-1</angle>
 | 
											  <angle>-1</angle>
 | 
				
			||||||
 | 
											  <rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
					</keyframes>
 | 
										</keyframes>
 | 
				
			||||||
				</value>
 | 
									</value>
 | 
				
			||||||
| 
						 | 
					@ -34,23 +42,27 @@
 | 
				
			||||||
			<li>
 | 
								<li>
 | 
				
			||||||
				<key>Head</key>
 | 
									<key>Head</key>
 | 
				
			||||||
				<value>
 | 
									<value>
 | 
				
			||||||
					<workerClass>AnimationWorker_Keyframes</workerClass>
 | 
										<workerClass>Rimworld_Animations.AnimationWorker_KeyframesExtended</workerClass>
 | 
				
			||||||
					<keyframes>
 | 
										<keyframes>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>0</tick>
 | 
												<tick>0</tick>
 | 
				
			||||||
							<angle>5</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
 | 
												<rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>6</tick>
 | 
												<tick>6</tick>
 | 
				
			||||||
							<angle>-5</angle>
 | 
												<angle>-5</angle>
 | 
				
			||||||
 | 
												<rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>12</tick>
 | 
												<tick>12</tick>
 | 
				
			||||||
							<angle>4</angle>
 | 
												<angle>4</angle>
 | 
				
			||||||
 | 
												<rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
						<li>
 | 
											<li Class="Rimworld_Animations.ExtendedKeyframe">
 | 
				
			||||||
							<tick>128</tick>
 | 
												<tick>128</tick>
 | 
				
			||||||
							<angle>-1</angle>
 | 
												<angle>0</angle>
 | 
				
			||||||
 | 
												<rotation>North</rotation>
 | 
				
			||||||
						</li>
 | 
											</li>
 | 
				
			||||||
					</keyframes>
 | 
										</keyframes>
 | 
				
			||||||
				</value>
 | 
									</value>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,41 +1,41 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8" ?>
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
<Defs>
 | 
					<Defs>
 | 
				
			||||||
	<GroupAnimationDef>
 | 
						<Rimworld_Animations.GroupAnimationDef>
 | 
				
			||||||
		<defName>TestGroupAnimation1</defName>
 | 
							<defName>TestGroupAnimation1</defName>
 | 
				
			||||||
		<numActors>2</numActors>
 | 
							<numActors>2</numActors>
 | 
				
			||||||
		<AnimationStages>
 | 
							<animationStages>
 | 
				
			||||||
			<li Class="Rimworld_Animations.AnimationStage_TicksDuration">
 | 
								<li Class="Rimworld_Animations.AnimationStage_TicksDuration">
 | 
				
			||||||
				<ticks>200</ticks>
 | 
									<ticks>200</ticks>
 | 
				
			||||||
				<animationDefs>
 | 
									<animationDefs>
 | 
				
			||||||
					<li>Pawn1_Stage1_TestAnimation1</li>
 | 
										<li>TestAnimation1</li>
 | 
				
			||||||
					<li>Pawn2_Stage1_TestAnimation2</li>
 | 
										<li>TestAnimation2</li>
 | 
				
			||||||
				</animationDefs>
 | 
									</animationDefs>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
			<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
								<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
				
			||||||
				<loops>10</loops>
 | 
									<loops>10</loops>
 | 
				
			||||||
				<animationOptions>
 | 
									<loopOptions>
 | 
				
			||||||
					<li>
 | 
										<li>
 | 
				
			||||||
						<probability>3</probability>
 | 
											<probability>3</probability>
 | 
				
			||||||
						<animationDefs>
 | 
											<animationDefs>
 | 
				
			||||||
							<li>Pawn1_Stage2_Variant1</li>
 | 
												<li>TestAnimation1</li>
 | 
				
			||||||
							<li>Pawn2_Stage2_Variant1</li>
 | 
												<li>TestAnimation2</li>
 | 
				
			||||||
						</animationDefs>
 | 
											</animationDefs>
 | 
				
			||||||
						
 | 
											
 | 
				
			||||||
					</li>
 | 
										</li>
 | 
				
			||||||
					<li>
 | 
										<li>
 | 
				
			||||||
						<probability>1</probability>
 | 
											<probability>1</probability>
 | 
				
			||||||
						<animationDefs>
 | 
											<animationDefs>
 | 
				
			||||||
							<li>Pawn1_Stage2_Variant2</li>
 | 
												<li>TestAnimation1</li>
 | 
				
			||||||
							<li>Pawn2_Stage2_Variant2</li>
 | 
												<li>TestAnimation2</li>
 | 
				
			||||||
						</animationDefs>
 | 
											</animationDefs>
 | 
				
			||||||
					</li>
 | 
										</li>
 | 
				
			||||||
				</animationOptions>
 | 
									</loopOptions>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
 | 
								<!--
 | 
				
			||||||
			<li Class="Rimworld_Animations.AnimationStage_Branch">
 | 
								<li Class="Rimworld_Animations.AnimationStage_Branch">
 | 
				
			||||||
				<paths>
 | 
									<paths>
 | 
				
			||||||
					<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
										<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
				
			||||||
						<numberOfLoops>10</numberOfLoops>
 | 
											<loops>10</loops>
 | 
				
			||||||
						<animationOptions>
 | 
											<animationOptions>
 | 
				
			||||||
							<li>
 | 
												<li>
 | 
				
			||||||
								<probability>3</probability>
 | 
													<probability>3</probability>
 | 
				
			||||||
| 
						 | 
					@ -52,7 +52,7 @@
 | 
				
			||||||
						
 | 
											
 | 
				
			||||||
					</li>
 | 
										</li>
 | 
				
			||||||
					<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
										<li Class="Rimworld_Animations.AnimationStage_LoopRandomSelectChance">
 | 
				
			||||||
						<numberOfLoops>10</numberOfLoops>
 | 
											<loops>10</loops>
 | 
				
			||||||
						<animationOptions>
 | 
											<animationOptions>
 | 
				
			||||||
							<li>
 | 
												<li>
 | 
				
			||||||
								<probability>3</probability>
 | 
													<probability>3</probability>
 | 
				
			||||||
| 
						 | 
					@ -70,42 +70,25 @@
 | 
				
			||||||
					</li>
 | 
										</li>
 | 
				
			||||||
				</paths>
 | 
									</paths>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
		</AnimationStages>
 | 
								-->
 | 
				
			||||||
 | 
							</animationStages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<contexts>
 | 
							<contexts>
 | 
				
			||||||
			<li Class="Rimworld_Animations.Actor_Sextype">
 | 
								<li Class="Rimworld_Animations.GroupAnimationContext_RJWSex">
 | 
				
			||||||
				<sexTypes>
 | 
									<interactionDefs>
 | 
				
			||||||
					<li>Sex</li>
 | 
										<li>Sex_Anal</li>
 | 
				
			||||||
				</sexTypes>
 | 
										<li>Sex_Vaginal</li>
 | 
				
			||||||
				<actorShift>0</actorShift>
 | 
									</interactionDefs>
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
			<li Class="Rimworld_Animations.Actor_Sextype">
 | 
								<li Class="Rimworld_Animations.GroupAnimationContext_RJWSex">
 | 
				
			||||||
				<sexTypes>
 | 
					 | 
				
			||||||
					<li>Sex_Reverse</li>
 | 
					 | 
				
			||||||
				</sexTypes>
 | 
					 | 
				
			||||||
				<actorShift>1</actorShift>
 | 
					 | 
				
			||||||
			</li>
 | 
					 | 
				
			||||||
			<li Class="Rimworld_Animations.Actor_Custom_Races">
 | 
					 | 
				
			||||||
				<sexTypes>
 | 
					 | 
				
			||||||
					<li>Sex</li>
 | 
					 | 
				
			||||||
				</sexTypes>
 | 
					 | 
				
			||||||
				<races>
 | 
					 | 
				
			||||||
					<li>Human</li>
 | 
					 | 
				
			||||||
					<li>Dog</li>
 | 
					 | 
				
			||||||
				</races>
 | 
					 | 
				
			||||||
				<actorShift>0</actorShift>
 | 
					 | 
				
			||||||
			</li>
 | 
					 | 
				
			||||||
			<li Class="Rimworld_Animations.Actor_Custom_Races">
 | 
					 | 
				
			||||||
				<sexTypes>
 | 
					 | 
				
			||||||
					<li>Sex_Reverse</li>
 | 
					 | 
				
			||||||
				</sexTypes>
 | 
					 | 
				
			||||||
				<races>
 | 
					 | 
				
			||||||
					<li>Dog</li>
 | 
					 | 
				
			||||||
					<li>Human</li>
 | 
					 | 
				
			||||||
				</races>
 | 
					 | 
				
			||||||
				<actorShift>1</actorShift>
 | 
									<actorShift>1</actorShift>
 | 
				
			||||||
 | 
									<interactionDefs>
 | 
				
			||||||
 | 
										<li>Sex_Reverse_Anal</li>
 | 
				
			||||||
 | 
										<li>Sex_Reverse_Vaginal</li>
 | 
				
			||||||
 | 
									</interactionDefs>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			</li>
 | 
								</li>
 | 
				
			||||||
		</contexts>
 | 
							</contexts>
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	</GroupAnimationDef>
 | 
						</Rimworld_Animations.GroupAnimationDef>
 | 
				
			||||||
</Defs>
 | 
					</Defs>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								1.5/Patches/AnimationPatchHSK.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								1.5/Patches/AnimationPatchHSK.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
						<Operation Class="PatchOperationFindMod">
 | 
				
			||||||
 | 
					    <mods>
 | 
				
			||||||
 | 
							<li>Core SK</li>
 | 
				
			||||||
 | 
					    </mods>
 | 
				
			||||||
 | 
							<match Class="PatchOperationSequence">
 | 
				
			||||||
 | 
								<operations>
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									<li Class="PatchOperationConditional">
 | 
				
			||||||
 | 
										<xpath>Defs/ThingDef/comps</xpath>
 | 
				
			||||||
 | 
										<success>Always</success>
 | 
				
			||||||
 | 
										<nomatch Class="PatchOperationAdd">
 | 
				
			||||||
 | 
											<xpath>Defs/ThingDef</xpath>
 | 
				
			||||||
 | 
											<value>
 | 
				
			||||||
 | 
												<comps />
 | 
				
			||||||
 | 
											</value>
 | 
				
			||||||
 | 
										</nomatch>
 | 
				
			||||||
 | 
									</li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
										<xpath>Defs/ThingDef[@Name="BaseAnimalPawn" or @Name="SK_BasePawn" or @Name="BasePawnSkynet"]/comps</xpath>
 | 
				
			||||||
 | 
										<value>
 | 
				
			||||||
 | 
											<li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
										</value>
 | 
				
			||||||
 | 
									</li>
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
								</operations>
 | 
				
			||||||
 | 
							</match>
 | 
				
			||||||
 | 
						</Operation>
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
							
								
								
									
										35
									
								
								1.5/Patches/AnimationPatch_CompExtendedAnimator.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								1.5/Patches/AnimationPatch_CompExtendedAnimator.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
					  <Operation Class="PatchOperationSequence">
 | 
				
			||||||
 | 
					    <success>Always</success>
 | 
				
			||||||
 | 
					    <operations>
 | 
				
			||||||
 | 
						  <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
							<success>Always</success>
 | 
				
			||||||
 | 
							<xpath>Defs/ThingDef[race][not(comps)]</xpath>
 | 
				
			||||||
 | 
							<value>
 | 
				
			||||||
 | 
							  <comps />
 | 
				
			||||||
 | 
							</value>
 | 
				
			||||||
 | 
						  </li>
 | 
				
			||||||
 | 
						  <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
							<success>Always</success>
 | 
				
			||||||
 | 
							<xpath>Defs/AlienRace.ThingDef_AlienRace[not(comps)]</xpath>
 | 
				
			||||||
 | 
							<value>
 | 
				
			||||||
 | 
							  <comps />
 | 
				
			||||||
 | 
							</value>
 | 
				
			||||||
 | 
						  </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
					        <xpath>Defs/ThingDef[@Name="BasePawn"]/comps</xpath>
 | 
				
			||||||
 | 
					        <value>
 | 
				
			||||||
 | 
					          <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
					        </value>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
						  <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
					        <xpath>Defs/AlienRace.ThingDef_AlienRace/comps</xpath>
 | 
				
			||||||
 | 
					        <value>
 | 
				
			||||||
 | 
					          <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
					        </value>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </operations>
 | 
				
			||||||
 | 
					  </Operation>
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
							
								
								
									
										19
									
								
								1.5/Patches/CompPatches/AutoCleaner.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								1.5/Patches/CompPatches/AutoCleaner.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
					  <Operation Class="PatchOperationSequence">
 | 
				
			||||||
 | 
					    <success>Always</success>
 | 
				
			||||||
 | 
					    <operations>
 | 
				
			||||||
 | 
					      <li Class="PatchOperationConditional">
 | 
				
			||||||
 | 
					        <xpath>/Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps</xpath>
 | 
				
			||||||
 | 
					        <success>Always</success>
 | 
				
			||||||
 | 
						    <match Class="PatchOperationAdd">
 | 
				
			||||||
 | 
							  <xpath>/Defs/ThingDef[@Name="BaseBaseAutocleaner"]/comps</xpath>
 | 
				
			||||||
 | 
							  <value>
 | 
				
			||||||
 | 
							    <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
							  </value>
 | 
				
			||||||
 | 
						    </match>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </operations>
 | 
				
			||||||
 | 
					  </Operation>
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								1.5/Patches/CompPatches/CombatExtended.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								1.5/Patches/CompPatches/CombatExtended.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
					  <Operation Class="PatchOperationSequence">
 | 
				
			||||||
 | 
					    <success>Always</success>
 | 
				
			||||||
 | 
					    <operations>
 | 
				
			||||||
 | 
					      <li Class="PatchOperationConditional">
 | 
				
			||||||
 | 
					        <xpath>/Defs/ThingDef[@Name="BasePawnSimple"]/comps</xpath>
 | 
				
			||||||
 | 
					        <success>Always</success>
 | 
				
			||||||
 | 
						    <match Class="PatchOperationAdd">
 | 
				
			||||||
 | 
							  <xpath>/Defs/ThingDef[@Name="BasePawnSimple"]/comps</xpath>
 | 
				
			||||||
 | 
							  <value>
 | 
				
			||||||
 | 
							    <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
							  </value>
 | 
				
			||||||
 | 
						    </match>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </operations>
 | 
				
			||||||
 | 
					  </Operation>
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
							
								
								
									
										18
									
								
								1.5/Patches/CompPatches/ZombieLand.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								1.5/Patches/CompPatches/ZombieLand.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
					  <Operation Class="PatchOperationSequence">
 | 
				
			||||||
 | 
					    <success>Always</success>
 | 
				
			||||||
 | 
					    <operations>
 | 
				
			||||||
 | 
					      <li Class="PatchOperationConditional">
 | 
				
			||||||
 | 
					        <xpath>/Defs/ThingDef[@Name="BaseZombie"]/comps</xpath>
 | 
				
			||||||
 | 
					        <success>Always</success>
 | 
				
			||||||
 | 
						    <match Class="PatchOperationAdd">
 | 
				
			||||||
 | 
							  <xpath>/Defs/ThingDef[@Name="BaseZombie"]/comps</xpath>
 | 
				
			||||||
 | 
							  <value>
 | 
				
			||||||
 | 
							    <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
							  </value>
 | 
				
			||||||
 | 
						    </match>
 | 
				
			||||||
 | 
					      </li>
 | 
				
			||||||
 | 
					    </operations>
 | 
				
			||||||
 | 
					  </Operation>
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
							
								
								
									
										39
									
								
								1.5/Patches/CompatibilityPatch_HCSK.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								1.5/Patches/CompatibilityPatch_HCSK.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8" ?>
 | 
				
			||||||
 | 
					<Patch>
 | 
				
			||||||
 | 
					<!-- Patch for HCSK, to attach to differently written thingdefs -->
 | 
				
			||||||
 | 
						<Operation Class="PatchOperationFindMod">
 | 
				
			||||||
 | 
					   		<mods>
 | 
				
			||||||
 | 
					       		<li>Core SK</li>
 | 
				
			||||||
 | 
					   		</mods>
 | 
				
			||||||
 | 
							<match Class="PatchOperationSequence">
 | 
				
			||||||
 | 
								<success>Always</success>
 | 
				
			||||||
 | 
					            <operations>
 | 
				
			||||||
 | 
					                <li Class="PatchOperationConditional">
 | 
				
			||||||
 | 
					                    <xpath>/Defs/ThingDef/comps</xpath>
 | 
				
			||||||
 | 
					                    <success>Always</success>
 | 
				
			||||||
 | 
					                    <nomatch Class="PatchOperationAdd">
 | 
				
			||||||
 | 
					                        <xpath>/Defs/ThingDef</xpath>
 | 
				
			||||||
 | 
					                        <value>
 | 
				
			||||||
 | 
					                            <comps />
 | 
				
			||||||
 | 
					                        </value>
 | 
				
			||||||
 | 
					                    </nomatch>
 | 
				
			||||||
 | 
					                 </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
					                    <xpath>/Defs/ThingDef[@Name="SK_BasePawn"]/comps</xpath>
 | 
				
			||||||
 | 
					                    <value>
 | 
				
			||||||
 | 
					                        <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
					                    </value>
 | 
				
			||||||
 | 
					                </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <li Class="PatchOperationAdd">
 | 
				
			||||||
 | 
					                    <xpath>/Defs/ThingDef[@Name="BaseAnimalPawn"]/comps</xpath>
 | 
				
			||||||
 | 
					                    <value>
 | 
				
			||||||
 | 
					                        <li Class="Rimworld_Animations.CompProperties_ExtendedAnimator" />
 | 
				
			||||||
 | 
					                    </value>
 | 
				
			||||||
 | 
					                </li>
 | 
				
			||||||
 | 
					            </operations>
 | 
				
			||||||
 | 
							</match>
 | 
				
			||||||
 | 
					    </Operation>
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					</Patch>
 | 
				
			||||||
							
								
								
									
										18
									
								
								1.5/Source/Comps/CompExtendedAnimator.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								1.5/Source/Comps/CompExtendedAnimator.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					using UnityEngine;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					using Verse.AI;
 | 
				
			||||||
 | 
					using Verse.Sound;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations {
 | 
				
			||||||
 | 
					    public class CompExtendedAnimator : ThingComp
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        List<Tuple<int, AnimationDef>> animationQueue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										17
									
								
								1.5/Source/Comps/CompProperties_ExtendedAnimator.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								1.5/Source/Comps/CompProperties_ExtendedAnimator.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations {
 | 
				
			||||||
 | 
					    public class CompProperties_ExtendedAnimator : CompProperties
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public CompProperties_ExtendedAnimator()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            base.compClass = typeof(CompExtendedAnimator);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public abstract class BaseGroupAnimationContext
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int actorShift = 0;
 | 
				
			||||||
 | 
					        public abstract bool CanAnimationBeUsed(List<Pawn> actors, out int reorder);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //cool class for designating contexts for animations
 | 
				
			||||||
 | 
					        // configure CanAnimationBeUsed to test whether it can be used
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					using static rjw.xxx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class GroupAnimationContext_RJWSex : BaseGroupAnimationContext
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public List<InteractionDef> interactionDefs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override bool CanAnimationBeUsed(List<Pawn> actors, out int reorder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Log.Message("Testing this animation");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            JobDriver_SexBaseInitiator latestSexBaseInitiator = (actors.FindLast(x => x.jobs?.curDriver is JobDriver_SexBaseInitiator).jobs.curDriver as JobDriver_SexBaseInitiator);
 | 
				
			||||||
 | 
					            reorder = base.actorShift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return interactionDefs.Contains(latestSexBaseInitiator.Sexprops.dictionaryKey);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								1.5/Source/GroupAnimations/GroupAnimationDef.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								1.5/Source/GroupAnimations/GroupAnimationDef.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class GroupAnimationDef : Def
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int numActors;
 | 
				
			||||||
 | 
					        public List<AnimationStage> animationStages;
 | 
				
			||||||
 | 
					        public List<BaseGroupAnimationContext> contexts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool canAnimationBeUsed(List<Pawn> actors, out int reorder)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            foreach (BaseGroupAnimationContext context in contexts)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (context.CanAnimationBeUsed(actors, out reorder))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            reorder = 0;
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,7 @@ namespace Rimworld_Animations
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class AnimationStage_Branch : AnimationStage
 | 
					    public class AnimationStage_Branch : AnimationStage
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        List<AnimationStage> paths;
 | 
					        public List<AnimationStage> paths;
 | 
				
			||||||
        public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
 | 
					        public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return paths[(seed * 59) % paths.Count].GetAnimations(actor, seed);
 | 
					            return paths[(seed * 59) % paths.Count].GetAnimations(actor, seed);
 | 
				
			||||||
| 
						 | 
					@ -10,11 +10,11 @@ namespace Rimworld_Animations
 | 
				
			||||||
    public class AnimationStage_LoopRandomSelectChance : AnimationStage
 | 
					    public class AnimationStage_LoopRandomSelectChance : AnimationStage
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public int loops;
 | 
					        public int loops;
 | 
				
			||||||
        public List<AnimationLoopOption> animationOptions;
 | 
					        public List<AnimationLoopOption> loopOptions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
 | 
					        public override List<Tuple<int, AnimationDef>> GetAnimations(int actor, int seed)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            int numberOfActors = animationOptions[0].animationDefs.Count;
 | 
					            int numberOfActors = loopOptions[0].animationDefs.Count;
 | 
				
			||||||
            List<Tuple<int, AnimationDef>> animations = new List<Tuple<int, AnimationDef>>();
 | 
					            List<Tuple<int, AnimationDef>> animations = new List<Tuple<int, AnimationDef>>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (int i = 0; i < loops; i++)
 | 
					            for (int i = 0; i < loops; i++)
 | 
				
			||||||
| 
						 | 
					@ -37,11 +37,11 @@ namespace Rimworld_Animations
 | 
				
			||||||
        //select random element from loop options by weight; also calculate the longest anim length
 | 
					        //select random element from loop options by weight; also calculate the longest anim length
 | 
				
			||||||
        public AnimationLoopOption getAnimationLoopOptionByWeight(int seed, out int longestAnimLength)
 | 
					        public AnimationLoopOption getAnimationLoopOptionByWeight(int seed, out int longestAnimLength)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            int totalWeight = animationOptions.Sum(x => x.probability);
 | 
					            int totalWeight = loopOptions.Sum(x => x.probability);
 | 
				
			||||||
            int randomNumber = (seed * 56) % totalWeight;
 | 
					            int randomNumber = (seed * 56) % totalWeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            int cumulativeWeight = 0;
 | 
					            int cumulativeWeight = 0;
 | 
				
			||||||
            foreach(AnimationLoopOption option in animationOptions) {
 | 
					            foreach(AnimationLoopOption option in loopOptions) {
 | 
				
			||||||
                cumulativeWeight += option.probability;
 | 
					                cumulativeWeight += option.probability;
 | 
				
			||||||
                if (randomNumber <= cumulativeWeight)
 | 
					                if (randomNumber <= cumulativeWeight)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -50,8 +50,8 @@ namespace Rimworld_Animations
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            longestAnimLength = animationOptions[0].animationDefs.Max(x => x.durationTicks);
 | 
					            longestAnimLength = loopOptions[0].animationDefs.Max(x => x.durationTicks);
 | 
				
			||||||
            return animationOptions[0];
 | 
					            return loopOptions[0];
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,7 @@ namespace Rimworld_Animations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Rot4 rotation;
 | 
					        public Rot4 rotation;
 | 
				
			||||||
        public SoundDef sound = null;
 | 
					        public SoundDef sound = null;
 | 
				
			||||||
        public bool visible;
 | 
					        public bool visible = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,13 @@ namespace Rimworld_Animations {
 | 
				
			||||||
				int AnimationTimeTicks = 0;
 | 
									int AnimationTimeTicks = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				List<Pawn> participants = partnerSexBaseReceiver.parteners.Append(partner).ToList();
 | 
									List<Pawn> participants = partnerSexBaseReceiver.parteners.Append(partner).ToList();
 | 
				
			||||||
				RerollAnimations(participants);
 | 
					
 | 
				
			||||||
 | 
									GroupAnimationDef groupAnimation = AnimationUtility.FindGroupAnimation(participants, out int reorder);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (groupAnimation != null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
										AnimationUtility.StartGroupAnimation(participants, groupAnimation, reorder);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
 | 
									//Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
 | 
				
			||||||
| 
						 | 
					@ -53,14 +59,6 @@ namespace Rimworld_Animations {
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static void RerollAnimations(List<Pawn> participants) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			participants[0].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation1);
 | 
					 | 
				
			||||||
			participants[1].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation2);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		static IEnumerable<String> NonSexActRulePackDefNames = new String[]
 | 
							static IEnumerable<String> NonSexActRulePackDefNames = new String[]
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			"MutualHandholdingRP",
 | 
								"MutualHandholdingRP",
 | 
				
			||||||
| 
						 | 
					@ -77,12 +75,14 @@ namespace Rimworld_Animations {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
 | 
						[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
 | 
				
			||||||
	static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
 | 
						static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
 | 
							public static void Prefix(ref JobDriver_SexBaseInitiator __instance)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			//stop animation
 | 
					
 | 
				
			||||||
 | 
								AnimationUtility.StopGroupAnimation(__instance.pawn);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,46 +0,0 @@
 | 
				
			||||||
using System;
 | 
					 | 
				
			||||||
using System.Collections.Generic;
 | 
					 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Text;
 | 
					 | 
				
			||||||
using System.Threading.Tasks;
 | 
					 | 
				
			||||||
using HarmonyLib;
 | 
					 | 
				
			||||||
using RimWorld;
 | 
					 | 
				
			||||||
using Verse;
 | 
					 | 
				
			||||||
using rjw;
 | 
					 | 
				
			||||||
using System.Reflection.Emit;
 | 
					 | 
				
			||||||
using Verse.AI;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Rimworld_Animations
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
 | 
					 | 
				
			||||||
    public static class HarmonyPatch_JobDriver_SexBaseReceiverLoved
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> codeInstructions)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var ins = codeInstructions.ToList();
 | 
					 | 
				
			||||||
            for(int i = 0; i < ins.Count; i++)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if(i < ins.Count && ins[i].opcode == OpCodes.Call && ins[i].OperandIs(AccessTools.DeclaredMethod(typeof(Toils_LayDown), "LayDown"))) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    ins[i].operand = AccessTools.DeclaredMethod(typeof(HarmonyPatch_JobDriver_SexBaseReceiverLoved), "DoNotLayDown");
 | 
					 | 
				
			||||||
                    yield return ins[i];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    yield return ins[i];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public static Toil DoNotLayDown(TargetIndex bedOrRestSpotIndex, bool hasBed, bool lookForOtherJobs, bool canSleep = true, bool gainRestAndHealth = true, PawnPosture noBedLayingPosture = PawnPosture.LayingMask, bool deathrest = false)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            return new Toil();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					using HarmonyLib;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse.AI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [HarmonyPatch(typeof(JobDriver_SexBaseRecieverLoved), "MakeSexToil")]
 | 
				
			||||||
 | 
					    public class HarmonyPatch_JobDriver_SexBaseReceiverLoved
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static void Postfix(JobDriver_SexBaseRecieverLoved __instance, ref Toil __result)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //added for sudden end of jobdriver
 | 
				
			||||||
 | 
					            __result.AddFinishAction(delegate {
 | 
				
			||||||
 | 
					                AnimationUtility.StopGroupAnimation(__instance.pawn);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					using HarmonyLib;
 | 
				
			||||||
 | 
					using rjw;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse.AI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [HarmonyPatch(typeof(JobDriver_SexBaseRecieverRaped), "MakeNewToils")]
 | 
				
			||||||
 | 
					    public class HarmonyPatch_JobDriver_SexBaseReceiverRaped
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static void Postfix(JobDriver_SexBaseRecieverRaped __instance, ref IEnumerable<Toil> __result)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //added for sudden end of jobdriver
 | 
				
			||||||
 | 
					            __result.Last().AddFinishAction(delegate {
 | 
				
			||||||
 | 
					                AnimationUtility.StopGroupAnimation(__instance.pawn);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -27,7 +27,7 @@ namespace Rimworld_Animations
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // HEAD ROTATION ADJUST FACING
 | 
					                // HEAD ROTATION ADJUST FACING get rotated textures
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Rot4 animFacing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick);
 | 
					                Rot4 animFacing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,35 @@
 | 
				
			||||||
 | 
					using HarmonyLib;
 | 
				
			||||||
 | 
					using RimWorld;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Verse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Rimworld_Animations
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [HarmonyPatch(typeof(PawnRenderTree), "TryGetMatrix")]
 | 
				
			||||||
 | 
					    public class HarmonyPatch_PawnRenderTree
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static void Prefix(PawnRenderTree __instance, PawnRenderNode node, ref PawnDrawParms parms)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            //Note: Maybe need to change this to check all ancestors if it's the head node
 | 
				
			||||||
 | 
					            //in case of deeper nodes in the PawnRenderTree
 | 
				
			||||||
 | 
					            //This code only checks for node and parent, if either are head
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Change facing for all head and apparelhead nodes
 | 
				
			||||||
 | 
					            // So that the offset is based on body rotation, not head rotation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //fixes misaligned hairs and headaddons
 | 
				
			||||||
 | 
					            if ((node.Props.tagDef == PawnRenderNodeTagDefOf.Head || node.Props.tagDef == PawnRenderNodeTagDefOf.ApparelHead
 | 
				
			||||||
 | 
					                || node?.parent?.Props?.tagDef == PawnRenderNodeTagDefOf.Head || node?.parent?.Props?.tagDef == PawnRenderNodeTagDefOf.ApparelHead)
 | 
				
			||||||
 | 
					                && node.tree.rootNode.AnimationWorker is AnimationWorker_KeyframesExtended rootNodeAnimationWorker)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                parms.facing = rootNodeAnimationWorker.facingAtTick(node.tree.AnimationTick);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,19 +9,23 @@ namespace Rimworld_Animations {
 | 
				
			||||||
    public static class HarmonyPatch_Pawn_DrawTracker {
 | 
					    public static class HarmonyPatch_Pawn_DrawTracker {
 | 
				
			||||||
        public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
 | 
					        public static bool Prefix(ref Pawn ___pawn, ref Vector3 __result) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // If animating and is sexbaseinitiator jobdriver,
 | 
				
			||||||
            if (___pawn?.Drawer?.renderer?.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended
 | 
					            if (___pawn?.Drawer?.renderer?.renderTree?.rootNode?.AnimationWorker is AnimationWorker_KeyframesExtended
 | 
				
			||||||
                && ___pawn.jobs?.curDriver is JobDriver_SexBaseInitiator sexdriver)
 | 
					                && ___pawn.jobs?.curDriver is JobDriver_SexBaseInitiator sexdriver)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //align pos on top of partner
 | 
					                //align pos on top of partner
 | 
				
			||||||
 | 
					                if (sexdriver?.Partner?.Drawer?.DrawPos != null)
 | 
				
			||||||
                    __result = sexdriver.Partner.Drawer.DrawPos;
 | 
					                    __result = sexdriver.Partner.Drawer.DrawPos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //change height so that they're all layered properly
 | 
					
 | 
				
			||||||
                if (sexdriver.Partner.jobs.curDriver is JobDriver_SexBaseReciever)
 | 
					 | 
				
			||||||
                for (int i = 0; i < )
 | 
					 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,120 +15,57 @@ namespace Rimworld_Animations {
 | 
				
			||||||
    public static class AnimationUtility {
 | 
					    public static class AnimationUtility {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static bool GenitalCheckForPawn(List<string> requiredGenitals, Pawn pawn, out string failReason)
 | 
					        public static void StartAnimation(List<Pawn> participants)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            participants[0].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation1);
 | 
				
			||||||
 | 
					            participants[1].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation2);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            failReason = null;
 | 
					
 | 
				
			||||||
            if (requiredGenitals != null)
 | 
					        public static void StartGroupAnimation(List<Pawn> participants, GroupAnimationDef groupAnimationDef, int reorder)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                if (requiredGenitals.Contains("Vagina"))
 | 
					            for(int i = 0; i < participants.Count; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                //todo: pass all animationstages to ExtendedAnimator, and queue animations
 | 
				
			||||||
 | 
					                participants[i].Drawer.renderer.SetAnimation(
 | 
				
			||||||
 | 
					                    groupAnimationDef.animationStages[0]
 | 
				
			||||||
 | 
					                    .GetAnimations((i + reorder) % participants.Count, GenTicks.TicksGame)[0].Item2);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!rjw.Genital_Helper.has_vagina(pawn))
 | 
					
 | 
				
			||||||
 | 
					        public static void StopGroupAnimation(List<Pawn> participants)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                        failReason = "missing vagina";
 | 
					            foreach(Pawn pawn in participants)
 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("Penis"))
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                pawn.Drawer.renderer.SetAnimation(null);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
                    if (!(rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn) || rjw.Genital_Helper.has_ovipositorM(pawn) || rjw.Genital_Helper.has_ovipositorF(pawn)))
 | 
					        public static void StopGroupAnimation(Pawn participant)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
                        failReason = "missing penis";
 | 
					            participant?.Drawer?.renderer?.SetAnimation(null);
 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					        public static GroupAnimationDef FindGroupAnimation(List<Pawn> participants, out int reorder)
 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("Mouth"))
 | 
					 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            // go through each context in each GroupAnimationDef
 | 
				
			||||||
 | 
					            // if you find one where it returns canAnimationBeUsed (and reorders),
 | 
				
			||||||
 | 
					            // return that animation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!rjw.Genital_Helper.has_mouth(pawn))
 | 
					            int reorder2 = 0;
 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "missing mouth";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					            Log.Message(DefDatabase<GroupAnimationDef>.AllDefsListForReading[0].defName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (requiredGenitals.Contains("Anus"))
 | 
					            DefDatabase<GroupAnimationDef>.AllDefsListForReading.TryRandomElement((GroupAnimationDef x) =>
 | 
				
			||||||
                {
 | 
					                x.canAnimationBeUsed(participants, out reorder2), out GroupAnimationDef result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (!rjw.Genital_Helper.has_anus(pawn))
 | 
					            reorder = reorder2;
 | 
				
			||||||
                    {
 | 
					            if (result != null) return result;
 | 
				
			||||||
                        failReason = "missing anus";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                }
 | 
					            return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (requiredGenitals.Contains("Breasts"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (!rjw.Genital_Helper.can_do_breastjob(pawn))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "missing breasts";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                if (requiredGenitals.Contains("NoVagina"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (rjw.Genital_Helper.has_vagina(pawn))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "has vagina";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("NoPenis"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if ((rjw.Genital_Helper.has_multipenis(pawn) || rjw.Genital_Helper.has_penis_infertile(pawn) || rjw.Genital_Helper.has_penis_fertile(pawn)))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "has penis";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("NoMouth"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (rjw.Genital_Helper.has_mouth(pawn))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "has mouth";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("NoAnus"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (rjw.Genital_Helper.has_anus(pawn))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "has anus";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (requiredGenitals.Contains("NoBreasts"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (rjw.Genital_Helper.can_do_breastjob(pawn))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        failReason = "has breasts";
 | 
					 | 
				
			||||||
                        return false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,19 +73,25 @@
 | 
				
			||||||
    <Compile Include="1.5\Source\Actors\AlienRaceOffset.cs" />
 | 
					    <Compile Include="1.5\Source\Actors\AlienRaceOffset.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Actors\BodyTypeOffset.cs" />
 | 
					    <Compile Include="1.5\Source\Actors\BodyTypeOffset.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\AnimationWorkers\AnimationWorker_KeyframesExtended.cs" />
 | 
					    <Compile Include="1.5\Source\AnimationWorkers\AnimationWorker_KeyframesExtended.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\Comps\CompExtendedAnimator.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\Comps\CompProperties_ExtendedAnimator.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Comps\CompProperties_ThingAnimator.cs" />
 | 
					    <Compile Include="1.5\Source\Comps\CompProperties_ThingAnimator.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Comps\CompThingAnimator.cs" />
 | 
					    <Compile Include="1.5\Source\Comps\CompThingAnimator.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Defs\AnimationDefOf.cs" />
 | 
					    <Compile Include="1.5\Source\Defs\AnimationDefOf.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\GroupAnimationStages\AnimationStage.cs" />
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\BaseGroupAnimationContext.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_Branch.cs" />
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationContexts\GroupAnimationContext_RJWSex.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_LoopRandomSelectChance.cs" />
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationDef.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\GroupAnimationStages\AnimationStage_TicksDuration.cs" />
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_Branch.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_LoopRandomSelectChance.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\GroupAnimations\GroupAnimationStages\AnimationStage_TicksDuration.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Keyframes\ExtendedKeyframe.cs" />
 | 
					    <Compile Include="1.5\Source\Keyframes\ExtendedKeyframe.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
 | 
					    <Compile Include="1.5\Source\MainTabWindows\MainTabWindow_OffsetConfigure.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
 | 
					    <Compile Include="1.5\Source\MainTabWindows\OffsetMainButtonDefOf.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
 | 
					    <Compile Include="1.5\Source\MainTabWindows\WorldComponent_UpdateMainTab.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\Harmony_PatchAll.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\Harmony_PatchAll.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderNode.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderNode.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_PawnRenderTree.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Pawn_DrawTracker.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Pawn_DrawTracker.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Thing.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RimworldPatches\HarmonyPatch_Thing.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RJWPatches\HarmonyPatch_PlaySexSounds.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\HarmonyPatch_PlaySexSounds.cs" />
 | 
				
			||||||
| 
						 | 
					@ -94,7 +100,8 @@
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_JoinInBed.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_JoinInBed.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_Sex.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_Sex.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseInitiator.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs" />
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\SexBaseReceivers\HarmonyPatch_JobDriver_SexBaseReceiverRaped.cs" />
 | 
				
			||||||
 | 
					    <Compile Include="1.5\Source\Patches\RJWPatches\JobDrivers\SexBaseReceivers\HarmonyPatch_JobDriver_SexBaseReceiverLoved.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Settings\AnimationSettings.cs" />
 | 
					    <Compile Include="1.5\Source\Settings\AnimationSettings.cs" />
 | 
				
			||||||
    <Compile Include="1.5\Source\Utilities\AnimationUtility.cs" />
 | 
					    <Compile Include="1.5\Source\Utilities\AnimationUtility.cs" />
 | 
				
			||||||
    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
					    <Compile Include="Properties\AssemblyInfo.cs" />
 | 
				
			||||||
| 
						 | 
					@ -108,7 +115,13 @@
 | 
				
			||||||
    <Content Include="1.5\Defs\GroupAnimationDefs\TestGroupAnimation1.xml" />
 | 
					    <Content Include="1.5\Defs\GroupAnimationDefs\TestGroupAnimation1.xml" />
 | 
				
			||||||
    <Content Include="1.5\Defs\MainTabDefs\MainButtonDef.xml" />
 | 
					    <Content Include="1.5\Defs\MainTabDefs\MainButtonDef.xml" />
 | 
				
			||||||
    <Content Include="1.5\Defs\SoundDefs\Sounds_Sex.xml" />
 | 
					    <Content Include="1.5\Defs\SoundDefs\Sounds_Sex.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\AnimationPatchHSK.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\AnimationPatch_CompExtendedAnimator.xml" />
 | 
				
			||||||
    <Content Include="1.5\Patches\CompatibilityPatch_FacialAnimation.xml" />
 | 
					    <Content Include="1.5\Patches\CompatibilityPatch_FacialAnimation.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\CompatibilityPatch_HCSK.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\CompPatches\AutoCleaner.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\CompPatches\CombatExtended.xml" />
 | 
				
			||||||
 | 
					    <Content Include="1.5\Patches\CompPatches\ZombieLand.xml" />
 | 
				
			||||||
    <Content Include="1.5\Patches\Patch_GenitaliaRenderNode.xml" />
 | 
					    <Content Include="1.5\Patches\Patch_GenitaliaRenderNode.xml" />
 | 
				
			||||||
    <Content Include="1.5\Sounds\Sex\Clap_1.wav" />
 | 
					    <Content Include="1.5\Sounds\Sex\Clap_1.wav" />
 | 
				
			||||||
    <Content Include="1.5\Sounds\Sex\Clap_2.wav" />
 | 
					    <Content Include="1.5\Sounds\Sex\Clap_2.wav" />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue