code:
using RimWorld;
using Verse;
using Verse.AI;

namespace rjw
{
	/// <summary>
	/// Assigns a pawn to rape a corpse
	/// </summary>
	public class WorkGiver_ViolateCorpse : WorkGiver_Sexchecks
	{
		public override ThingRequest PotentialWorkThingRequest => ThingRequest.ForGroup(ThingRequestGroup.Corpse);

		public override bool MoreChecks(Pawn pawn, Thing t, bool forced = false)
		{
			//ModLog.Message("" + this.GetType().ToString() + " base checks: pass");
			if (!RJWSettings.necrophilia_enabled) return false;

			//Pawn target = (t as Corpse).InnerPawn;
			if (!pawn.CanReserve(t, xxx.max_rapists_per_prisoner, 0))
				return false;

			if (!(pawn.IsDesignatedHero() || RJWSettings.override_control))
				if (!RJWSettings.WildMode)
				{
					if (xxx.is_necrophiliac(pawn) && !xxx.is_hornyorfrustrated(pawn))
						{
						if (RJWSettings.DevMode) JobFailReason.Is("not horny enough");
							return false;
						}
					if (!xxx.is_necrophiliac(pawn))
						if ((t as Corpse).CurRotDrawMode != RotDrawMode.Fresh)
						{
							if (RJWSettings.DevMode) JobFailReason.Is("refuse to rape rotten");
							return false;
						}
						else if (!xxx.is_frustrated(pawn))
							{
							if (RJWSettings.DevMode) JobFailReason.Is("not horny enough");
								return false;
							}
					//ModLog.Message("WorkGiver_ViolateCorpse::" + SexAppraiser.would_fuck(pawn, t as Corpse));
					if (SexAppraiser.would_fuck(pawn, t as Corpse) > 0.1f)
					{
						return false;
					}
				}
			//ModLog.Message("" + this.GetType().ToString() + " extended checks: can start sex");
			return true;
		}

		public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
		{
			return JobMaker.MakeJob(xxx.RapeCorpse, t as Corpse);
		}
	}
}


code:
<?xml version="1.0" encoding="utf-8"?>

<ModMetaData>
	<name>RimJobWorld</name>
	<author>Ed86</author>
	<url>https://gitgud.io/Ed86/rjw</url>
	<supportedVersions>

1.1

1.2

1.3

1.4

1.5

	</supportedVersions>
	<packageId>rim.job.world</packageId>
	<modDependencies>

			<packageId>brrainz.harmony</packageId>
			<displayName>Harmony</displayName>
			<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
			<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

			<packageId>UnlimitedHugs.HugsLib</packageId>
			<displayName>HugsLib</displayName>
			<downloadUrl>https://github.com/UnlimitedHugs/RimworldHugsLib/releases/latest</downloadUrl>
			<steamWorkshopUrl>steam://url/CommunityFilePage/818773962</steamWorkshopUrl>

	</modDependencies>
	<loadAfter>

UnlimitedHugs.HugsLib

brrainz.harmony

	</loadAfter>
	<incompatibleWith>

gregorycurrie.AnimalGenetics

EdB.PrepareCarefully

EdB.PrepareCarefully.UnofficialPatch

EdB.PrepareCarefully.alonske.fork

Dalrae.GaramRaceAddon

IGNI.LostForest

Sierra.RT.MedievalTalents

com.yayo.raceQuestPawn

Xenofell.HermaphroditeGene

	</incompatibleWith>
	<description>
M for Mature

Load mod at bottom of mod list:
	Harmony
	Core
	HugsLib
	++Mods
	RimJobWorld
	RJW mods and patches

Support dev:
https://subscribestar.adult/Ed86
https://ko-fi.com/caffeinated_ed
for crypto bros:
USDT(TRC20):TAS9QbvuF6AquJ98TqG653bPDugC2a6mnk
USDT(ERC20):0x6c61085700f4ad941df80234fbfb8a861b14b0de
Forum:
https://www.loverslab.com/files/file/7257-rimjobworld/
Discord:
https://discord.gg/CXwHhv8
	</description>
</ModMetaData>

license: mit


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
	<identifier>RimJobWorld</identifier>
	<version>5.4.0</version>
	<dependencies>

HugsLib

	</dependencies>
	<incompatibleWith />
	<loadAfter>

HugsLib

	</loadAfter>
	<suggests>
	</suggests>
	<manifestUri>https://gitgud.io/Ed86/rjw/raw/master/About/Manifest.xml</manifestUri>
	<downloadUri>https://gitgud.io/Ed86/rjw</downloadUri>
</Manifest>


code:
# Environment setup

## RimWorld dependencies
The `.csproj` file has been configured to automatically detect standard Windows, Linux, and macOS Steam install
locations, and should link dependencies regardless of the project's location on your hard drive. If that works for you,
you don't need to read any farther.

These are the paths RimJobWorld will look for the RimWorld dlls:
- `../_RimWorldData/Managed/` (Custom)
- `C:\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\` (Windows)
- `$(HOME)/.steam/steam/SteamApps/common/RimWorld/RimWorldLinux_Data/Managed/` (Linux)
- `$(HOME)/Library/Application Support/Steam/steamapps/common/RimWorld/RimWorldMac.app/Contents/Resources/Data/Managed/`
  (macOS)

### Custom project location
If you choose to place the RimJobWorld project somewhere other than your RimWorld mods directory, you'll need to create
a symlink in the RimWorld mods directory that points to the RimJobWorld project. Here are some examples of creating
symlinks on different platforms:
- Linux and macOS: Open the terminal and run this command (filling in the actual paths): `ln -s "~/where/you/put/rjw" "/your/RimWorld/Mods/rjw"`
- Windows: Run the Command Prompt as administrator, then run this command: `mklink /D "C:\Your\Rimworld\Mods\rjw" "C:\Where\you\put\rjw"`

### Custom RimWorld install
If you're using a custom RimWorld install, you'll want to create a symlink called `_RimWorldData` next to the `rjw`
folder that points `RimWorldWin64_Data`, `RimWorldLinux_Data`, or `RimWorldMac.app/Contents/Resources/Data`, as
appropriate. Refer to the previous section for how to create a symlink on your platform. In the end your file structure
should look like this:

- `where/you/put/`
  - `rjw/`
    - `RimJobWorld.Main.csproj`
    - ...
  - `_RimWorldData/` *(symlink)*
    - `Managed/`
      - `Assembly-CSharp.dll`
      - ...

## Deployment Notice
Deployment scripts now make use of PowerShell 7+, instead of Windows PowerShell 5.1, allowing for cross platform execution.
Please see [this document](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.2) if you don't have the new PowerShell on your device.


code:
@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PSSctiptName=Deploy OLD.ps1
SET PowerShellScriptPath=%ThisScriptsDirectory%%PSSctiptName%
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'";

path: Deploy/Deploy OLD.bat


code:
# Configurable variables
$repo           = '..'
$packing        = 'rjw_packing'
$outputFormat   = '..\..\RJW-{0}.7z'
$internalPath   = 'RJW'
$pathsToRemove = '.git', '.gitattributes', '.gitignore', '1.1\Source', '1.2\Source', '1.3\Source', 'Deploy'

[Console]::ResetColor()

# Progress Bar Variables
$Activity             = "Deploying"
$Id                   = 1

# Complex Progress Bar
$Step                 = 0
$TotalSteps           = 6
$StatusText           = '"Step $($Step.ToString().PadLeft($TotalSteps.ToString().Length)) of $TotalSteps | $Task"' # Single quotes need to be on the outside
$StatusBlock          = [ScriptBlock]::Create($StatusText) # This script block allows the string above to use the current values of embedded values each time it's run

# Read environvemt
$Task = "Collecting info..."
$Step++
##Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

$startupPath = Get-Location
$7z = (GET-ItemProperty 'HKLM:\SOFTWARE\7-Zip').Path + '7z.exe'
$packingRjw = $packing + "\" + $internalPath

Push-Location -Path $repo

try {
	[string]$version = git describe --tags
} catch {
	[string]$version = ""
}

if ($version -eq "") {
	$manifest = "./About/Manifest.xml"
	[string]$version = (Select-Xml -Path $manifest -XPath '/Manifest/version' | Select-Object -ExpandProperty Node).innerText
}

$output = $outputFormat -f $version

Pop-Location

# Cleanup
$Task = "Cleanup..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

if (Test-Path $packing) { Remove-Item -Recurse -Force $packing }
if (Test-Path $output) { Remove-Item $output }

# Prepating data
$Task = "Copying..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

$items = Get-ChildItem -Force -Path $repo
$items | Foreach-Object -Begin {
	$i = 0
} -Process {
    $i++

	if (-Not ($pathsToRemove -contains $_.Name)) {
		Copy-Item -Recurse $_.FullName -Destination ($packingRjw + "\" + $_.Name)
	}

	$p = $i * 100 / $items.Count
	Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Copying' -Status ('{0:0}% complete' -f $p) -PercentComplete $p
}
Write-Progress -Id ($Id+1) -ParentId $Id -Activity "Copying" -Status "Ready" -Completed

# removing files from subfolders
$Task = "Excluding..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

foreach ($path in $pathsToRemove) {
	$p = $packingRjw + '\' + $path
	if (Test-Path $p) { Remove-Item -Recurse -Force $p }
}

# archiving
$Task = "Archiving..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

Push-Location -Path  $packing
& $7z a -r -bsp1 ($startupPath.Path+'\'+$output) + $internalPath | Foreach-Object -Begin {
	Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Archiving' -Status "Starting..." -PercentComplete 0
} -Process {
	$line = $_.Trim()
	if ($line -ne "") {
		[int]$p = 0
		[bool]$result = [int]::TryParse($line.Split('%')[0], [ref]$p)
		if ($result) {
			Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Archiving' -Status $line -PercentComplete $p
		}
	}
}

Write-Progress -Id ($Id+1)  -Activity "Archiving" -Status "Ready" -Completed
Pop-Location

# cleanup
$Task = "Cleanup..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

if (Test-Path $packing) { Remove-Item -Recurse -Force $packing }

Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -Completed

# If running in the console, wait for input before closing.
if ($Host.Name -eq "ConsoleHost")
{
	Write-Host "Done"
    Write-Host "Press any key to continue..."
    $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}

path: Deploy/Deploy OLD.ps1


code:
@ECHO OFF
SET scriptDir=%~dp0
SET psScript=Deploy.ps1
SET pwshScriptPath=%scriptDir%%psScript%

pwsh -NoProfile -ExecutionPolicy Bypass -Command "& '%pwshScriptPath%'";


code:
# Configurable variables
$repo           = '..'
$packing        = 'rjw_packing'
$outputFormat   = Join-Path -Path '..\..' -ChildPath 'RJW-{0}.7z'
$internalPath   = 'RJW'
$pathsToRemove = '.git', '.gitattributes', '.gitignore', (Join-Path -Path '1.1' -ChildPath 'Source'), (Join-Path -Path '1.2' -ChildPath 'Source'), (Join-Path -Path '1.3' -ChildPath 'Source'), 'Deploy'

[Console]::ResetColor()

# Progress Bar Variables
$Activity             = "Deploying"
$Id                   = 1

# Complex Progress Bar
$Step                 = 0
$TotalSteps           = 6
$StatusText           = '"Step $($Step.ToString().PadLeft($TotalSteps.ToString().Length)) of $TotalSteps | $Task"' # Single quotes need to be on the outside
$StatusBlock          = [ScriptBlock]::Create($StatusText) # This script block allows the string above to use the current values of embedded values each time it's run

# Read environvemt
$Task = "Collecting info..."
$Step++
##Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

$startupPath = Get-Location
if ($IsWindows) {
	$7z = (GET-ItemProperty 'HKLM:\SOFTWARE\7-Zip').Path + '7z.exe'
}
else {
	$7z = &which 7z
}

$packingRjw = Join-Path -Path $packing -ChildPath $internalPath

Push-Location -Path $repo

try {
	[string]$version = git describe --tags
} catch {
	[string]$version = ""
}

if ($version -eq "") {
	$manifest = Join-Path -Path '.\About' -ChildPath 'Manifest.xml'
	[string]$version = (Select-Xml -Path $manifest -XPath '/Manifest/version' | Select-Object -ExpandProperty Node).innerText
}

$output = $outputFormat -f $version

Pop-Location

# Cleanup
$Task = "Cleanup..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

if (Test-Path $packing) { Remove-Item -Recurse -Force $packing }
if (Test-Path $output) { Remove-Item $output }

# Prepating data
$Task = "Copying..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

$items = Get-ChildItem -Force -Path $repo
$items | Foreach-Object -Begin {
	$i = 0
} -Process {
    $i++

	if (-Not ($pathsToRemove -contains $_.Name)) {
		Copy-Item -Recurse $_.FullName -Destination (Join-Path -Path $packingRjw -ChildPath $_.Name)
	}

	$p = $i * 100 / $items.Count
	Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Copying' -Status ('{0:0}% complete' -f $p) -PercentComplete $p
}
Write-Progress -Id ($Id+1) -ParentId $Id -Activity "Copying" -Status "Ready" -Completed

# removing files from subfolders
$Task = "Excluding..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

foreach ($path in $pathsToRemove) {
	$p = Join-Path -Path $packingRjw -ChildPath $path
	if (Test-Path $p) { Remove-Item -Recurse -Force $p }
}

# archiving
$Task = "Archiving..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

Push-Location -Path  $packing
& $7z a -r -bsp1 (Join-Path -Path $startupPath.Path -ChildPath $output) + $internalPath | Foreach-Object -Begin {
	Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Archiving' -Status "Starting..." -PercentComplete 0
} -Process {
	$line = $_.Trim()
	if ($line -ne "") {
		[int]$p = 0
		[bool]$result = [int]::TryParse($line.Split('%')[0], [ref]$p)
		if ($result) {
			Write-Progress -Id ($Id+1) -ParentId $Id -Activity 'Archiving' -Status $line -PercentComplete $p
		}
	}
}

Write-Progress -Id ($Id+1)  -Activity "Archiving" -Status "Ready" -Completed
Pop-Location

# cleanup
$Task = "Cleanup..."
$Step++
Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -CurrentOperation " " -PercentComplete ($Step / $TotalSteps * 100)

if (Test-Path $packing) { Remove-Item -Recurse -Force $packing }

Write-Progress -Id $Id -Activity $Activity -Status (& $StatusBlock) -Completed

# If running in the console, wait for input before closing.
if ($Host.Name -eq "ConsoleHost")
{
	Write-Host "Done"
    Write-Host "Press any key to continue..."
    $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyUp") > $null
}


code:
#!/usr/bin/env bash
set -e

scriptDir=$(pwd)
scriptName="Deploy.ps1"
scriptPath=$scriptDir/$scriptName
echo "Reminder: p7zip and PowerShell Core are required."
pwsh -NoProfile -ExecutionPolicy Bypass -Command "& '$scriptPath'"


code:
OwO what's this?
RimjobWorld is a sex mod that overhauls Rimworld loving, mating and pregnancy mechanics.
Mod supports various sex/hentai fetishes.
Mod is highly configurable and most feature turned off by default, so you can go from vanilla experience to your wild fantasies.
Many additional features(submods) can be found on LL forum and discord.

You can support current Dev(Me) here:
[SubscribeStar](https://subscribestar.adult/Ed86)
[Ko-fi](https://ko-fi.com/caffeinated_ed)
for crypto bros:
USDT(TRC20):TAS9QbvuF6AquJ98TqG653bPDugC2a6mnk
USDT(ERC20):0x6c61085700f4ad941df80234fbfb8a861b14b0de

[Mod git]{https://gitgud.io/Ed86/rjw}

Feedback:
[Discord]{https://discord.gg/CXwHhv8}
[LoversLab Forum]{https://www.loverslab.com/files/file/7257-rimjobworld/}

Requirements:
Hugslib ([Steam](https://steamcommunity.com/sharedfiles/filedetails/?id=818773962)) ([GitHub](https://github.com/UnlimitedHugs/RimworldHugsLib))

Installation:
(if updating - Delete all files from previous RJW versions)
Unpack the the content from the downloaded archive into "...steam/steamapps/common/Rimworld/Mods/RJW"
You will see this folder structure - Rimworld/Mods/RJW/About
Start Game
Activate mod & the other required mods
Restart game

Load Order:
-Rimworld Core (that's the game)
--Hugslib
---your mods
--RimJobWorld
---addons for RimJobWorld

Contributing:
use TABS not SPACES for xml/cs, please?
do comments in code for other people(me?)

P.S.
im not a pro C# programmer or git user, so i might do weird stuff ;)