commit 1606b006ac5a5df9552624b884a27f085ceb87b7 Author: motd1233 Date: Tue Jul 27 23:28:31 2021 +0900 1.0.1.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9c58f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,343 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- Backup*.rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +*.psd +*.dds \ No newline at end of file diff --git a/About/About.xml b/About/About.xml new file mode 100644 index 0000000..70affd0 --- /dev/null +++ b/About/About.xml @@ -0,0 +1,27 @@ + + + RJW Sexperience + a + +
  • 1.3
  • +
    + +
  • + brrainz.harmony + Harmony + steam://url/CommunityFilePage/2009463077 + https://github.com/pardeike/HarmonyRimWorld/releases/latest +
  • +
  • + rim.job.world + RimJobWorld + https://gitgud.io/Ed86/rjw +
  • +
    + +
  • brrainz.harmony
  • +
  • rim.job.world
  • +
    + rjw.sexperience + EXPERIMENTAL yes yes +
    \ No newline at end of file diff --git a/About/Manifest.xml b/About/Manifest.xml new file mode 100644 index 0000000..62c6b5d --- /dev/null +++ b/About/Manifest.xml @@ -0,0 +1,12 @@ + + + RJW Sexperience + 1.0.1.5 + + + + + + + + \ No newline at end of file diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll new file mode 100644 index 0000000..5a25201 Binary files /dev/null and b/Assemblies/RJWSexperience.dll differ diff --git a/Defs/Goodwill/MemeCompatibility_Sex.xml b/Defs/Goodwill/MemeCompatibility_Sex.xml new file mode 100644 index 0000000..4024d31 --- /dev/null +++ b/Defs/Goodwill/MemeCompatibility_Sex.xml @@ -0,0 +1,33 @@ + + + + + + Zoophile_Zoophile + + GoodwillSituationWorker_MemeCompatibility + Zoophile + Zoophile + 30 + + + + + + Zoophile_All + + RJWSexperience.GoodwillSituationWorker_OneWayReceive + Zoophile + true + -50 + + + + Rapist_All + + RJWSexperience.GoodwillSituationWorker_OneWayReceive + Rapist + true + -20 + + diff --git a/Defs/MemeDefs/Memes_Sexual.xml b/Defs/MemeDefs/Memes_Sexual.xml new file mode 100644 index 0000000..90748fa --- /dev/null +++ b/Defs/MemeDefs/Memes_Sexual.xml @@ -0,0 +1,154 @@ + + + + SexualDissolutely + (0.65, 0.23) + 1 + 3000 + + + + SexualDissolutely + + 1.0 + + + + + + + Zoophile + + Animal fuckers. + UI/Commands/Breeding_Pawn_off + 3 + +
  • +
  • Bestiality_Acceptable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • + +
    + + +
  • memeAdjective->bestial
  • +
  • memeAdjective->zoophile
  • +
  • memeHyphenPrefix->bestial
  • +
  • memeConcept->breeding
  • +
  • memeConcept->bestiality
  • +
  • memeConcept->zoophile
  • +
  • memeLeaderNoun->livestock
  • +
    +
    + + + + +
  • creation(tag=meme_Zoophile) ->[deity0_name] loves breeding with beasts.
  • +
  • episode(uses=1,tag=meme_Zoophile) ->[deity0_name] said to all, "Sigmar forbids this!"
  • + +
  • setup(tag=meme_Zoophile) ->Someday, [founderName] was so horny that accidentally fucked with an animal and loved it.
  • +
  • story(uses=1,tag=meme_Zoophile) ->For spreading animals, [founderName] started to breed with animals.
  • + +
  • lessonIntro(tag=meme_Zoophile) ->Someday, i had sex with animal. It was much better than humans!
  • +
  • lesson(tag=meme_Zoophile) ->Only the animals can satisfy me.
  • +
  • lessonReinforcement(tag=meme_Zoophile) ->Breed with animals. It is the eternal hapiness.
  • + +
  • archistBasis(tag=meme_Zoophile) ->Archists are always seeking ultimate pleasure.
  • +
  • archistFact(tag=meme_Zoophile) ->That was breeding with animals.
  • +
  • archistProphecy(tag=meme_Zoophile) ->[inTheEnd], the archotechs will finally unlock the interspecies breeding, so that they may lead ultimate pleasure.
  • + +
  • animistFact(tag=meme_Zoophile) ->The most powerful spirits are those of beasts, and spirits of beasts will be restless unless beasts rule.
  • +
  • animistProphecy(tag=meme_Zoophile) ->[itIsSaid] that a powerful spirit of destruction will seek to end the universe, but that a human-born beast will wield the spirit of the [relic0_name] and destroy the destroyer.
  • +
    +
    +
    + +
  • + Breeders + breed + bestiality + breeder +
  • +
  • + Zoophilia + zoophile + zoophile + zoophiliac +
  • +
    + +
  • Zoophile
  • +
    +
    + + + + Rapist + + Rape is best. + UI/Memes/Rape + 2 + +
  • +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • + +
    + + +
  • memeAdjective->violent
  • +
  • memeAdjective->raping
  • +
  • memeHyphenPrefix->rapist
  • +
  • memeHyphenPrefix->molester
  • +
  • memeHyphenPrefix->pervert
  • +
  • memeConcept->rapist
  • +
  • memeConcept->pervert
  • +
  • memeGod->slaanesh
  • +
  • memeLeaderNoun->stallion
  • +
  • memeLeaderNoun->grand rapist
  • +
    +
    + + + + +
  • creation(tag=meme_Rapist) ->[deity0_name] loves rape.
  • +
  • episode(uses=1,tag=meme_Rapist) ->[deity0_name] raped everyone until death during rape.
  • + +
  • setup(tag=meme_Rapist) ->[founderName] is always horny.
  • +
  • story(uses=1,tag=meme_Rapist) ->[founderName] raped everyone. No one can stop [founderName]. [founderName] died trying to rape planet.
  • + +
  • lessonIntro(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best!
  • +
  • lesson(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best! Rape is best!
  • +
  • lessonReinforcement(tag=meme_Rapist) ->Rape is best! Rape is best! Rape is best! Rape is best! Rape is best!
  • + +
  • archistBasis(tag=meme_Rapist) ->Human history is history of rape.
  • +
  • archistFact(tag=meme_Rapist) ->Even archotechs cannot stop rapists.
  • +
  • archistProphecy(tag=meme_Rapist) ->[inTheEnd], the rapists never stop raping.
  • + +
  • animistFact(tag=meme_Rapist) ->The most powerful spirits are those of rapists, and spirits of rapists will rape all.
  • +
  • animistProphecy(tag=meme_Rapist) ->[itIsSaid] that a powerful spirit of destruction will seek to end the universe, but that a million-raped rapist will wield the spirit of the [relic0_name] and rape the destroyer.
  • +
    +
    +
    + +
  • + Rapists + rapist + raping + rapist +
  • +
  • + Cult of Slaanesh + pleasure + decadent + heretic +
  • +
    + +
  • Rapist
  • +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PawnRelationsDefs/PawnRelations_Family.xml b/Defs/PawnRelationsDefs/PawnRelations_Family.xml new file mode 100644 index 0000000..1b6111d --- /dev/null +++ b/Defs/PawnRelationsDefs/PawnRelations_Family.xml @@ -0,0 +1,25 @@ + + + + PawnRelationWorker_Child + Bastard + + bastard + 190 + MySonDied + MyDaughterDied + KilledMySon + KilledMyDaughter + MySonLost + MyDaughterLost + +
  • SoldMyLovedOne
  • +
    + 30 + 1.0 + 0.03 + -30 + true + true +
    +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Bestiality.xml b/Defs/PreceptDefs/Precepts_Bestiality.xml new file mode 100644 index 0000000..27de45d --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Bestiality.xml @@ -0,0 +1,413 @@ + + + + + + Bestiality + + UI/Commands/Breeding_Pawn_off + + + + SexWithAnimal + + + + + SexWithVeneratedAnimal + + + + + + + Bestiality_Abhorrent + Bestiality + + Bestiality beings is deeply evil. + Low + 40 + 100 + 30 + +
  • Zoophile
  • +
    + +
  • HumanPrimacy
  • +
    + +
  • + SexWithVeneratedAnimal + Bestiality_Abhorrent +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Know_Abhorrent +
  • +
  • + SexWithAnimal + Bestiality_Abhorrent +
  • +
  • + SexWithAnimal + Bestiality_Know_Abhorrent +
  • +
    +
    + + + Bestiality_Horrible + Bestiality + + Bestiality is a horrible thing. + Low + 30 + 200 + 30 + +
  • Zoophile
  • +
    + +
  • HumanPrimacy
  • +
    + +
  • + SexWithVeneratedAnimal + Bestiality_Horrible +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Know_Horrible +
  • +
  • + SexWithAnimal + Bestiality_Horrible +
  • +
  • + SexWithAnimal + Bestiality_Know_Horrible +
  • +
    +
    + + + Bestiality_Disapproved + Bestiality + + Bestiality is extremely distasteful. + Low + 20 + 300 + 20 + +
  • Zoophile
  • +
    + +
  • HumanPrimacy
  • +
    + +
  • + SexWithVeneratedAnimal + Bestiality_Disapproved +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Know_Disapproved +
  • +
  • + SexWithAnimal + Bestiality_Disapproved +
  • +
  • + SexWithAnimal + Bestiality_Know_Disapproved +
  • +
    +
    + + + Bestiality_Acceptable + Bestiality + + Bestiality is a normal, unremarkable part of life. + Medium + 10 + 10 + true + + + + + Bestiality_OnlyVenerated + Bestiality + + One who sex with venerated animals should be honored and respected. But having sex with other animals will be denounced + High + 0 + 1000 + +
  • HumanPrimacy
  • +
    + +
  • Zoophile
  • +
    + +
  • + SexWithAnimal + Bestiality_Nonvenerated_Disapproved + true +
  • +
  • + SexWithAnimal + Bestiality_Nonvenerated_Know_Disapproved + Someone sex with any animal + true +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Honorable + true +
  • +
  • + SexWithVeneratedAnimal + Bestiality_Know_Honorable + Someone sex with animal + true +
  • +
    +
    + + + Bestiality_Honorable + Bestiality + + One who sex with animals should be encouraged. + High + 0 + 1000 + +
  • HumanPrimacy
  • +
    + +
  • Zoophile
  • +
    + +
  • + SexWithAnimal + Bestiality_Honorable + true +
  • +
  • + SexWithAnimal + Bestiality_Know_Honorable + Someone sex with animal + true +
  • +
    +
    + + + + + + Bestiality_Abhorrent + 6 + 1 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + I had sex with animal. I want to die. + -15 +
  • +
    +
    + + + Bestiality_Know_Abhorrent + Thought_MemorySocial + 15 + 100 + 3 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + -30 +
  • +
    +
    + + + Bestiality_Horrible + 6 + 1 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + I had sex with animal. I'm not sure I can forgive myself. + -10 +
  • +
    +
    + + + Bestiality_Know_Horrible + Thought_MemorySocial + 15 + 100 + 3 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + -20 +
  • +
    +
    + + + Bestiality_Disapproved + 6 + 1 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + I had sex with animal. I hope nothing terrible happens to them. + -5 +
  • +
    +
    + + + Bestiality_Know_Disapproved + Thought_MemorySocial + 15 + 100 + 3 + +
  • Zoophile
  • +
    + +
  • Bestiality_Honorable
  • +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + -10 +
  • +
    +
    + + + Bestiality_Nonvenerated_Disapproved + 6 + 1 + +
  • Bestiality_Honorable
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + I had sex with any animal. I hope nothing terrible happens to them. + -5 +
  • +
    +
    + + + Bestiality_Nonvenerated_Know_Disapproved + Thought_MemorySocial + 15 + 100 + 3 + +
  • Bestiality_Honorable
  • +
  • Bestiality_Acceptable
  • +
    + +
  • + + -10 +
  • +
    +
    + + + Bestiality_Honorable + 6 + 1 + +
  • Bestiality_Abhorrent
  • +
  • Bestiality_Horrible
  • +
  • Bestiality_Disapproved
  • +
    + +
  • + + I had sex with animal. + 4 +
  • +
    +
    + + + Bestiality_Know_Honorable + Thought_MemorySocial + 25 + 100 + 3 + +
  • Bestiality_Abhorrent
  • +
  • Bestiality_Horrible
  • +
  • Bestiality_Disapproved
  • +
    + +
  • + + 5 +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Incest.xml b/Defs/PreceptDefs/Precepts_Incest.xml new file mode 100644 index 0000000..bfb121d --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Incest.xml @@ -0,0 +1,389 @@ + + + + + + Incestuos + + UI/Issues/Incest + + + + Incestuos_Marriage + + + + + + + Incestuos_Free + Incestuos + + Open minded. + Medium + 60 + 1000 + 100 + + + + + Incestuos_Disapproved_CloseOnly + Incestuos + + Incest is disapproved socially. Relations farther than cousin are recognized as not incest. + Low + 50 + 1000 + 100 + +
  • + Incestuos_Marriage + IncestuosMarriage_Disapproved +
  • +
  • + VaginalSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + AnalSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + OralSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + MiscSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + PromiscuousSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
    +
    + + + Incestuos_Disapproved + Incestuos + + Incest is disapproved socially. + Low + 40 + 1000 + 100 + +
  • + Incestuos_Marriage + IncestuosMarriage_Disapproved +
  • +
  • + Incestuos_Marriage + Sex_Know_IncestMarriage_Disapproved +
  • +
  • + VaginalSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + AnalSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + OralSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + MiscSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
  • + PromiscuousSex + Sex_Know_Incest_Disapproved + Incestuos +
  • +
    +
    + + + Incestuos_Forbidden + Incestuos + + Incest is forbidden. + Low + 30 + 1000 + 100 + +
  • + Incestuos_Marriage + IncestuosMarriage_Forbidden +
  • +
  • + Incestuos_Marriage + Sex_Know_IncestMarriage_Forbidden +
  • +
  • + VaginalSex + Sex_Know_Incest_Forbidden + Incestuos +
  • +
  • + AnalSex + Sex_Know_Incest_Forbidden + Incestuos +
  • +
  • + OralSex + Sex_Know_Incest_Forbidden + Incestuos +
  • +
  • + MiscSex + Sex_Know_Incest_Forbidden + Incestuos +
  • +
  • + PromiscuousSex + Sex_Know_Incest_Forbidden + Incestuos +
  • +
    +
    + + + Incestuos_IncestOnly + Incestuos + + For preserving pure blood, only incest allowed. + High + 0 + 1000 + +
  • Zoophile
  • +
    + +
  • + GotMarried_SpouseCount_OneOrFewer + Sex_Know_IncestMarriage_Violated + Incestuos + true +
  • +
  • + VaginalSex + Sex_Know_Incest_Violated + Incestuos + true +
  • +
  • + AnalSex + Sex_Know_Incest_Violated + Incestuos + true +
  • +
  • + OralSex + Sex_Know_Incest_Violated + Incestuos + true +
  • +
  • + MiscSex + Sex_Know_Incest_Violated + Incestuos + true +
  • +
  • + PromiscuousSex + Sex_Know_Incest_Violated + Incestuos + true +
  • +
    +
    + + + + + IncestuosMarriage_Forbidden + 30 + 1 + +
  • Psychopath
  • +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + No one bless our marriage. + -10 +
  • +
    +
    + + + IncestuosMarriage_Disapproved + 30 + 1 + +
  • Psychopath
  • +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + They are speaking behind our back. + -5 +
  • +
    +
    + + + Sex_Know_Incest_Disapproved + Thought_MemorySocial + 15 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + -15 +
  • +
    +
    + + + Sex_Know_Incest_Forbidden + Thought_MemorySocial + 15 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + -30 +
  • +
    +
    + + + Sex_Know_IncestMarriage_Disapproved + Thought_MemorySocial + 60 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + -15 +
  • +
    +
    + + + Sex_Know_IncestMarriage_Forbidden + Thought_MemorySocial + 60 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_IncestOnly
  • +
  • Incestuos_Free
  • +
    + +
  • + + -30 +
  • +
    +
    + + + + Sex_Know_Incest_Violated + Thought_MemorySocial + 15 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_Disapproved_CloseOnly
  • +
  • Incestuos_Disapproved
  • +
  • Incestuos_Forbidden
  • +
  • Incestuos_Free
  • +
    + +
  • + + -15 +
  • +
    +
    + + + Sex_Know_IncestMarriage_Violated + Thought_MemorySocial + 300 + 100 + 3 + +
  • Nymphomaniac
  • +
    + +
  • Incestuos_Disapproved_CloseOnly
  • +
  • Incestuos_Disapproved
  • +
  • Incestuos_Forbidden
  • +
  • Incestuos_Free
  • +
    + +
  • + + -50 +
  • +
    +
    +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Rape.xml b/Defs/PreceptDefs/Precepts_Rape.xml new file mode 100644 index 0000000..6709eea --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Rape.xml @@ -0,0 +1,366 @@ + + + + + + Rape + + UI/Issues/Rape + + + + Raped + + + + + RapedSlave + + + + + RapedPrisoner + + + + + WasRaped + + + + + WasRapedSlave + + + + + WasRapedPrisoner + + + + + + Rape_Abhorrent + Rape + + Rape beings is deeply evil. + Low + 40 + 1000 + 30 + +
  • Rapist
  • +
    + +
  • HumanPrimacy
  • +
  • Collectivist
  • +
    + +
  • + Raped + Rape_Abhorrent +
  • +
  • + Raped + Rape_Know_Abhorrent + Someone raped other +
  • +
  • + RapedPrisoner + Rape_Horrible + Raped prisoner +
  • +
  • + RapedPrisoner + Rape_Know_Horrible + Someone raped prisoner +
  • +
  • + RapedSlave + Rape_Disapproved + Raped slave +
  • +
  • + RapedSlave + Rape_Know_Disapproved + Someone raped slave +
  • +
    +
    + + + Rape_Horrible + Rape + + Raping other is a horrible thing. + Low + 30 + 1000 + 30 + +
  • Rapist
  • +
    + +
  • HumanPrimacy
  • +
    + +
  • + Raped + Rape_Horrible +
  • +
  • + Raped + Rape_Know_Horrible + Someone raped other +
  • +
  • + RapedPrisoner + Rape_Disapproved + Raped prisoner +
  • +
  • + RapedPrisoner + Rape_Know_Disapproved + Someone raped prisoner +
  • +
    +
    + + + Rape_Disapproved + Rape + + Rape is part of life, though it is extremely distasteful. + Medium + 20 + 1000 + 20 + +
  • Rapist
  • +
    + +
  • HumanPrimacy
  • +
    + +
  • + Raped + Rape_Disapproved +
  • +
  • + Raped + Rape_Know_Disapproved + Someone raped other +
  • +
    +
    + + + Rape_Acceptable + Rape + + Rape is a normal, unremarkable part of life. + High + 10 + 10 + true + + + + Rape_Honorable + Rape + + Raping is one of proud behavior. + High + 0 + 1000 + +
  • HumanPrimacy
  • +
    + +
  • Rapist
  • +
    + + 0.75 + + +
  • + Raped + BloodlustStoleSomeLovin + true +
  • +
  • + Raped + Rape_Know_Honorable + Someone raped other + true +
  • +
  • + RapedPrisoner + BloodlustStoleSomeLovin + true +
  • +
  • + RapedPrisoner + Rape_Know_Honorable + Someone raped other + true +
  • +
  • + RapedSlave + BloodlustStoleSomeLovin + true +
  • +
  • + RapedSlave + Rape_Know_Honorable + Someone raped other + true +
  • +
    +
    + + + + + + Rape_Abhorrent + 6 + 1 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + I raped someone. I shouldn't do that. + -5 +
  • +
    +
    + + + Rape_Know_Abhorrent + Thought_MemorySocial + 15 + 100 + 3 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + -30 +
  • +
    +
    + + + Rape_Horrible + 6 + 1 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + I raped someone. I shouldn't do that. + -3 +
  • +
    +
    + + + Rape_Know_Horrible + Thought_MemorySocial + 15 + 100 + 3 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + -15 +
  • +
    +
    + + + Rape_Disapproved + 6 + 1 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + I raped someone. I shouldn't do that. + -1 +
  • +
    +
    + + + Rape_Know_Disapproved + Thought_MemorySocial + 15 + 100 + 3 + +
  • Rapist
  • +
    + +
  • Rape_Honorable
  • +
  • Rape_Acceptable
  • +
    + +
  • + + -5 +
  • +
    +
    + + + Rape_Know_Honorable + Thought_MemorySocial + 25 + 100 + 3 + +
  • Rape_Abhorrent
  • +
  • Rape_Disapproved
  • +
    + +
  • + + 1 +
  • +
    +
    + +
    \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_Sex.xml b/Defs/PreceptDefs/Precepts_Sex.xml new file mode 100644 index 0000000..22555b1 --- /dev/null +++ b/Defs/PreceptDefs/Precepts_Sex.xml @@ -0,0 +1,332 @@ + + + + + + Sextype + + UI/Issues/Bestiality + + + + VaginalSex + + + + + AnalSex + + + + + OralSex + + + + + MiscSex + + + + + PromiscuousSex + + + + + + Sex_Free + Sextype + + Open minded. + Low + 50 + 1000 + 100 + + + + Sex_VaginalOnly + Sextype + + Only vaginal sex is approval and others are crude. + Low + 40 + 1000 + 100 + +
  • + AnalSex + Sex_Promiscuous +
  • +
  • + AnalSex + Sex_Know_Promiscuous +
  • +
  • + OralSex + Sex_Promiscuous +
  • +
  • + OralSex + Sex_Know_Promiscuous +
  • +
  • + MiscSex + Sex_Promiscuous +
  • +
  • + MiscSex + Sex_Know_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Know_Promiscuous +
  • +
    +
    + + + Sex_AnalOnly + Sextype + + Only anal sex is approval and others are crude. + Medium + 30 + 1000 + 10 + +
  • + VaginalSex + Sex_Promiscuous +
  • +
  • + VaginalSex + Sex_Know_Promiscuous +
  • +
  • + OralSex + Sex_Promiscuous +
  • +
  • + OralSex + Sex_Know_Promiscuous +
  • +
  • + MiscSex + Sex_Promiscuous +
  • +
  • + MiscSex + Sex_Know_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Know_Promiscuous +
  • +
    +
    + + + Sex_OralOnly + Sextype + + Only oral sex is approval and others are crude. + Medium + 20 + 1000 + 5 + +
  • + VaginalSex + Sex_Promiscuous +
  • +
  • + VaginalSex + Sex_Know_Promiscuous +
  • +
  • + AnalSex + Sex_Promiscuous +
  • +
  • + AnalSex + Sex_Know_Promiscuous +
  • +
  • + MiscSex + Sex_Promiscuous +
  • +
  • + MiscSex + Sex_Know_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Promiscuous +
  • +
  • + PromiscuousSex + Sex_Know_Promiscuous +
  • +
    +
    + + + Sex_Promiscuous + Sextype + + Messy sex life is approved. + High + 0 + 1000 + + 1.5 + 1.25 + + +
  • + VaginalSex + Sex_NonPromiscuous +
  • +
  • + VaginalSex + Sex_Know_NonPromiscuous +
  • +
  • + AnalSex + Sex_NonPromiscuous +
  • +
  • + AnalSex + Sex_Know_NonPromiscuous +
  • +
  • + OralSex + Sex_NonPromiscuous +
  • +
  • + OralSex + Sex_Know_NonPromiscuous +
  • +
  • + MiscSex + Sex_NonPromiscuous +
  • +
  • + MiscSex + Sex_Know_NonPromiscuous +
  • +
  • + PromiscuousSex + Sex_Know_Promiscuous_Approval +
  • +
    +
    + + + + + + + Sex_Promiscuous + 1 + 1 + RJWSexperience.Thought_IncreaseRecord + Lust + 3.0 + +
  • + + I was immoral. It makes me aroused. + 5 +
  • +
    +
    + + + Sex_NonPromiscuous + 1 + 1 + +
  • + + It cannot satisfy me. + -1 +
  • +
    +
    + + + Sex_Know_Promiscuous + Thought_MemorySocial + 15 + 100 + 3 + +
  • Nymphomaniac
  • +
  • Zoophile
  • +
  • Rapist
  • +
  • Necrophiliac
  • +
  • Gay
  • +
  • Bisexual
  • +
    + +
  • Sex_Free
  • +
  • Sex_Promiscuous
  • +
    + +
  • + + -10 +
  • +
    +
    + + + Sex_Know_Promiscuous_Approval + Thought_MemorySocial + 15 + 100 + 3 + +
  • Sex_VaginalOnly
  • +
  • Sex_AnalOnly
  • +
  • Sex_OralOnly
  • +
    + +
  • + + 3 +
  • +
    +
    + + + Sex_Know_NonPromiscuous + Thought_MemorySocial + 15 + 100 + 3 + +
  • Sex_VaginalOnly
  • +
  • Sex_AnalOnly
  • +
  • Sex_OralOnly
  • +
  • Sex_Free
  • +
    + +
  • + + -3 +
  • +
    +
    +
    \ No newline at end of file diff --git a/Defs/RecordDefs/Records_Sexperiences.xml b/Defs/RecordDefs/Records_Sexperiences.xml new file mode 100644 index 0000000..c7c4057 --- /dev/null +++ b/Defs/RecordDefs/Records_Sexperiences.xml @@ -0,0 +1,19 @@ + + + + + NumofEatenCum + + The number of times that i swalloed cum. + Int + + + + Lust + + How lustful i am. + Float + + + + diff --git a/Defs/SkillDefs/SexSkills.xml b/Defs/SkillDefs/SexSkills.xml new file mode 100644 index 0000000..d0669a1 --- /dev/null +++ b/Defs/SkillDefs/SexSkills.xml @@ -0,0 +1,10 @@ + + + + Sex + Sex skill. + sex + 5 + + + \ No newline at end of file diff --git a/Defs/ThingDefs/Items_Resource_Cum.xml b/Defs/ThingDefs/Items_Resource_Cum.xml new file mode 100644 index 0000000..915df14 --- /dev/null +++ b/Defs/ThingDefs/Items_Resource_Cum.xml @@ -0,0 +1,73 @@ + + + + GatheredCum + + Gathered cum. + +
  • AnimalProductRaw
  • +
    + + Things/Item/GatheredCum + 1 + Graphic_StackCount + + true + + 0.1 + 0.1 + 0.01 + -5 + -1 + 0.00 + 60 + 0.1 + + + Fluid, AnimalProduct + DesperateOnlyForHumanlikes + AteCum + AteCum + -10 + -10 + +
    + + + UsedCondom + + A condom filled with sperm. MMMM So good and tasty! + + Things/Item/UsedCondom + Graphic_StackCount + + 50 + true + true + 0.0 + Industrial + + -10 + 1 + 0.05 + 0.05 + + + Fluid, AnimalProduct + DesperateOnlyForHumanlikes + AteCum + AteCum + + Item + Never + +
  • Exotic
  • +
    + Sellable + +
  • AnimalProductRaw
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Defs/ThoughtDefs/Thoughts_ate.xml b/Defs/ThoughtDefs/Thoughts_ate.xml new file mode 100644 index 0000000..9bbec73 --- /dev/null +++ b/Defs/ThoughtDefs/Thoughts_ate.xml @@ -0,0 +1,41 @@ + + + + + AteCum + 0.5 + 1 + 0.4 + NumofEatenCum + RJWSexperience.Thought_AteCum + +
  • 10
  • +
  • 60
  • +
  • 120
  • +
    + +
  • + + Disgusting. + -5 +
  • +
  • + + Tastes bad and stinky. + -2 +
  • +
  • + + Tastes bad. But i liked it. + 1 +
  • +
  • + + Delicious. + 3 +
  • +
    +
    + + +
    diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..41197b8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 motd1233 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml new file mode 100644 index 0000000..bb1c8f7 --- /dev/null +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -0,0 +1,7 @@ + + + Lust: x{0}% + Slave: x{0}% + Not Slave: x100% + Meme: x{0}% + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/HistoryEventDefs/Translations_HistoryEventDef.xml b/Languages/Korean/DefInjected/HistoryEventDefs/Translations_HistoryEventDef.xml new file mode 100644 index 0000000..f106f9a --- /dev/null +++ b/Languages/Korean/DefInjected/HistoryEventDefs/Translations_HistoryEventDef.xml @@ -0,0 +1,14 @@ + + + 동물과 교미 + 숭배받는 동물과 교미 + 강간 + 노예 강간 + 죄수 강간 + 보지 섹스 + 항문 성교 + 구강 성교 + 섹스 + 문란한 섹스 + 근친혼 + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml b/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml new file mode 100644 index 0000000..684bdcc --- /dev/null +++ b/Languages/Korean/DefInjected/IssueDefs/Translations_IssueDefs.xml @@ -0,0 +1,7 @@ + + + 섹스 종류 + 강간 + 수간 + 근친상간 + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml new file mode 100644 index 0000000..ad28ac0 --- /dev/null +++ b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml @@ -0,0 +1,65 @@ + + + 수간 + 동물박이들 + creation(tag=meme_Zoophile) ->[deity0_name]는 동물과 교미하는것을 즐겼습니다. + episode(uses=1,tag=meme_Zoophile) ->[deity0_name]는 모두에게 말했습니다, "Sigmar forbids this!" + setup(tag=meme_Zoophile) ->어느날, [founderName]은(는) 너무 발정이나서 동물을 따먹었고 그것을 좋아하게 되었습니다. + story(uses=1,tag=meme_Zoophile) ->동물들을 퍼뜨리기 위해, [founderName]은(는) 동물과 교미하고 다니기 시작했습니다. + lessonIntro(tag=meme_Zoophile) ->어느날, 나는 동물과 섹스했습니다. 그리고 사람보다 훨씬 나았습니다! + lesson(tag=meme_Zoophile) ->오직 동물만 나를 만족시킬수 있습니다. + lessonReinforcement(tag=meme_Zoophile) ->동물과 교미하는것은 영원한 행복입니다. + archistBasis(tag=meme_Zoophile) ->초월주의자들은 항상 궁극의 쾌락을 찾고 있었습니다. + archistFact(tag=meme_Zoophile) ->그것은 동물과 교미하는 것이었습니다.. + archistProphecy(tag=meme_Zoophile) ->[inTheEnd], 초월공학은 이종간 번식을 가능하게 했습니다. 이것이 그들을 궁극의 쾌락으로 인도할지도 모릅니다. + animistFact(tag=meme_Zoophile) ->가장 강력한 영혼은 짐승의 것입니다, 그리고 짐승의 영혼은 짐승에게 지배받지 않는 한 날뛸것입니다. + animistProphecy(tag=meme_Zoophile) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것입니다. 하지만 인간에게서 태어난 짐승이 [relic0_name]의 힘을 사용하여 파괴자를 파괴할 것입니다. + memeAdjective->수간 + memeAdjective->수간 + memeHyphenPrefix->수간 + memeConcept->수태 + memeConcept->수간 + memeConcept->수간 + memeLeaderNoun->가축 + 번식모판 + 번식 + 수간 + 번식기 + 포켓몬스터 갤러리 + 수간 + 수간 + 수간충 + + 강간 + 강간은 최고야 + creation(tag=meme_Rapist) ->[deity0_name]는 강간을 사랑합니다. + episode(uses=1,tag=meme_Rapist) ->[deity0_name]는 복상사 할때까지 강간하다 죽었습니다. + setup(tag=meme_Rapist) ->[founderName]은(는) 항상 발정나있습니다. + story(uses=1,tag=meme_Rapist) ->[founderName]은(는) 모두를 강간했습니다. 아무도 [founderName]을(를) 멈출수 없었습니다. [founderName]은(는) 행성을 강간하려다 죽었습니다. + lessonIntro(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야! + lesson(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야! + lessonReinforcement(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야! + archistBasis(tag=meme_Rapist) ->인간의 역사는 강간의 역사입니다. + archistFact(tag=meme_Rapist) ->초월공학 조차도 강간범들을 막지는 못했습니다. + archistProphecy(tag=meme_Rapist) ->[inTheEnd], 강간범들은 절대 강간을 멈추지 않을겁니다. + animistFact(tag=meme_Rapist) ->가장 강력한 영혼을 가진 것은 강간범들입니다. 그리고 그들은 모두를 강간할것입니다. + animistProphecy(tag=meme_Rapist) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것입니다. 하지만 백만번을 강간한 강간범이 [relic0_name]의 힘을 사용하여 파괴자를 강간할 것입니다. + memeAdjective->강간하는 + memeAdjective->겁탈하는 + memeHyphenPrefix->강간범 + memeHyphenPrefix->치한 + memeHyphenPrefix->변태 + memeConcept->강간 + memeConcept->변태적인 + memeGod->슬라네쉬 + memeLeaderNoun->종마 + memeLeaderNoun->위대한 강간범 + 강간범들 + 강간 + 강간하는 + 강간범 + 슬라네쉬 교단 + 쾌락 + 타락한 + 이교도 + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml b/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml new file mode 100644 index 0000000..2302e33 --- /dev/null +++ b/Languages/Korean/DefInjected/PreceptDefs/Translations_PreceptDefs.xml @@ -0,0 +1,59 @@ + + + 혐오스러움 + 수간은 절대 용납할수 없는 행위입니다. + 끔찍함 + 수간은 끔찍한 짓입니다. + 싫어함 + 수간충을 좋아하는 사람은 없습니다. + 수간은 끔찍한 짓입니다. + 수용가능 + 수간은 일반적인 일입니다. + 숭배동물만 + 숭배받는 동물과 교미하는것은 존중받을 일입니다. 하지만 다른 동물들과 교미하는것은 규탄받습니다. + 수간 + 수간 + 장려됨 + 수간은 장려되어야 합니다. + 수간 + 혐오스러움 + 강간은 절대 용납할수 없는 행위입니다. + 강간 + 수감자를 강간함 + 수감자 강간 + 노예를 강간함 + 노예 강간 + 끔찍함 + 강간은 끔찍한 짓입니다. + 강간 + 수감자를 강간함 + 수감자 강간 + 싫어함 + 강간은 흔한 일이지만 나쁜짓으로 간주됩니다. + 강간 + 수용가능 + 강간이 일상입니다. + 자랑스러움 + 강간은 자랑할만한 일입니다. + 강간 + 자유 + 어떠한것도 배척받지 않습니다. + 성기만 사용 + 성기만 사용한 성행위만이 일반적인 것으로 받아들여집니다. 그 외에는 문란한것으로 간주됩니다. + 항문성교만 + 항문을 사용한 성행위만이 일반적인 것으로 받아들여집니다. 그 외에는 문란한것으로 간주됩니다. + 구강성교만 + 구강성교만이 일반적인 것으로 받아들여집니다. 그 외에는 문란한것으로 간주됩니다. + 문란함 + 문란한 성생활이 선호됩니다. + 자유 + 근친상간이 허용됩니다. + 가까운 친척만 싫어함 + 근친상간은 인정받지 못합니다. 사촌보다 먼 관계일경우 근친으로 인식하지 않습니다. + 싫어함 + 근친상간은 인정받지 못합니다. + 금지됨 + 근친상간은 용납되지 않습니다. + 근친만 가능 + 순수혈통을 보존하기위해 근친상간만을 허용합니다. + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/RecordDefs/Translations_RecordDef.xml b/Languages/Korean/DefInjected/RecordDefs/Translations_RecordDef.xml new file mode 100644 index 0000000..71b2d1c --- /dev/null +++ b/Languages/Korean/DefInjected/RecordDefs/Translations_RecordDef.xml @@ -0,0 +1,8 @@ + + + 정액을 먹은 횟수 + 내가 정액을 삼킨 횟수. + 음란함 + 내가 음란한 정도. + + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml new file mode 100644 index 0000000..7c5c980 --- /dev/null +++ b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml @@ -0,0 +1,46 @@ + + + 누군가를 강간함 + 그랬으면 안됐는데. + 누군가를 강간함 + 누군가를 강간함 + 그랬으면 안됐는데. + 누군가를 강간함 + 누군가를 강간함 + 그랬으면 안됐는데. + 누군가를 강간함 + 누군가를 강간함 + 문란한 섹스 + 배덕감에 흥분돼... + 평범한 섹스 + 이걸론 만족할수 없어. + 문란함 + 문란함 + 시시함 + 수간 + 수간을 하다니... 죽고싶다... + 수간 + 수간 + 수간을 하다니... 나 스스로를 용서할수 없을것 같아. + 수간 + 수간 + 수간을 하다니... 다시는 그러지 않을거야. + 수간 + 숭배받지 않는 동물과 교미 + 수간을 하다니... 다시는 그러지 않을거야. + 숭배받지 않는 동물과 교미 + 수간 + 동물과 교미했어. + 수간 + 사회적 규탄 + 아무도 우리를 축복해주지 않아. + 가십거리가 됨 + 남들이 우리의 뒷담을 하고있어. + 근친 + 근친 + 근친 + 근친 + 혈족이 아닌사람과 성관계 + 혈통을 더럽힘 + + \ No newline at end of file diff --git a/Languages/Korean/Keyed/RJW_Sexperience.xml b/Languages/Korean/Keyed/RJW_Sexperience.xml new file mode 100644 index 0000000..c337d3f --- /dev/null +++ b/Languages/Korean/Keyed/RJW_Sexperience.xml @@ -0,0 +1,7 @@ + + + 음란함: x{0}% + 노예: x{0}% + 노예가 아님: x100% + 문화 요소: x{0}% + \ No newline at end of file diff --git a/Patches/RJW_StatDefs.xml b/Patches/RJW_StatDefs.xml new file mode 100644 index 0000000..48764b8 --- /dev/null +++ b/Patches/RJW_StatDefs.xml @@ -0,0 +1,39 @@ + + + + + Defs/StatDef[defName="SexAbility"] + + +
  • + Sex + 0.40 + 0.15 +
  • +
    +
    +
    + + + Defs/StatDef[defName="SexFrequency"]/parts + +
  • + 1.0 +
  • +
    +
    + + + Defs/StatDef[defName="Vulnerability"]/parts + +
  • + 0.5 +
  • +
  • + 3.0 +
  • +
    +
    + + +
    \ No newline at end of file diff --git a/Patches/RJW_ThoughtDefs.xml b/Patches/RJW_ThoughtDefs.xml new file mode 100644 index 0000000..01a6142 --- /dev/null +++ b/Patches/RJW_ThoughtDefs.xml @@ -0,0 +1,82 @@ + + + + + Defs/ThoughtDef[defName="GotBredByAnimal"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="GotAnalBredByAnimal"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="AllowedAnimalToBreed"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="GotLickedByAnimal"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="GotGropedByAnimal"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="AllowedAnimalToGrope"] + + +
  • Bestiality_OnlyVenerated
  • +
  • Bestiality_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="StoleSomeLovin"] + + +
  • Rape_Honorable
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="Incestuous"] + + +
  • Incestuos_Free
  • +
  • Incestuos_IncestOnly
  • +
    +
    +
    +
    \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience.sln b/RJWSexperience/RJWSexperience.sln new file mode 100644 index 0000000..497354e --- /dev/null +++ b/RJWSexperience/RJWSexperience.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31424.327 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJWSexperience", "RJWSexperience\RJWSexperience.csproj", "{9C728E06-573B-4B04-A07F-ACBF60CB424D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C728E06-573B-4B04-A07F-ACBF60CB424D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C728E06-573B-4B04-A07F-ACBF60CB424D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C728E06-573B-4B04-A07F-ACBF60CB424D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C728E06-573B-4B04-A07F-ACBF60CB424D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {03C87A93-F76D-49B3-AE25-67E14F20EACD} + EndGlobalSection +EndGlobal diff --git a/RJWSexperience/RJWSexperience/GoodwillSituationWorker_MemeCompatibility.cs b/RJWSexperience/RJWSexperience/GoodwillSituationWorker_MemeCompatibility.cs new file mode 100644 index 0000000..2b3e532 --- /dev/null +++ b/RJWSexperience/RJWSexperience/GoodwillSituationWorker_MemeCompatibility.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; + + +namespace RJWSexperience +{ + public class GoodwillSituationWorker_OneWayReceive : GoodwillSituationWorker_MemeCompatibility + { + public override int GetNaturalGoodwillOffset(Faction other) + { + + if (!Applies(other)) return 0; + return def.naturalGoodwillOffset; + } + + protected bool Applies(Faction other) + { + Ideo primaryideo = Faction.OfPlayer.ideos?.PrimaryIdeo; + Ideo primaryideo2 = other.ideos?.PrimaryIdeo; + if (primaryideo == null || primaryideo2 == null) return false; + + return primaryideo.memes.Contains(def.meme) && !primaryideo2.memes.Contains(def.meme); + } + + + } +} diff --git a/RJWSexperience/RJWSexperience/Harmony.cs b/RJWSexperience/RJWSexperience/Harmony.cs new file mode 100644 index 0000000..d1126f2 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Harmony.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Reflection; +using Verse; +using HarmonyLib; + + +namespace RJWSexperience +{ + [StaticConstructorOnStartup] + internal static class First + { + static First() + { + var har = new Harmony("RJW_Sexperience"); + har.PatchAll(Assembly.GetExecutingAssembly()); + } + } +} diff --git a/RJWSexperience/RJWSexperience/JobGiver_Orgy.cs b/RJWSexperience/RJWSexperience/JobGiver_Orgy.cs new file mode 100644 index 0000000..f12718b --- /dev/null +++ b/RJWSexperience/RJWSexperience/JobGiver_Orgy.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using Verse.AI; +using RimWorld; +using rjw; + +namespace RJWSexperience +{ + public class JobGiver_Orgy : ThinkNode_JobGiver + { + /// Checks all of our potential partners to see if anyone's eligible, returning the most attractive and convenient one. + protected override Job TryGiveJob(Pawn pawn) + { + if (!RJWHookupSettings.HookupsEnabled || !RJWHookupSettings.QuickHookupsEnabled) + return null; + + if (pawn.Drafted) + return null; + + if (!SexUtility.ReadyForHookup(pawn)) + return null; + + // We increase the time right away to prevent the fairly expensive check from happening too frequently + SexUtility.IncreaseTicksToNextHookup(pawn); + + // If the pawn is a whore, or recently had sex, skip the job unless they're really horny + if (!xxx.is_frustrated(pawn) && (xxx.is_whore(pawn) || !SexUtility.ReadyForLovin(pawn))) + return null; + + // This check attempts to keep groups leaving the map, like guests or traders, from turning around to hook up + if (pawn.mindState?.duty?.def == DutyDefOf.TravelOrLeave) + { + // TODO: Some guest pawns keep the TravelOrLeave duty the whole time, I think the ones assigned to guard the pack animals. + // That's probably ok, though it wasn't the intention. + if (RJWSettings.DebugLogJoinInBed) ModLog.Message($" Quickie.TryGiveJob:({xxx.get_pawnname(pawn)}): has TravelOrLeave, no time for lovin!"); + return null; + } + + if (pawn.CurJob == null) + { + //--Log.Message(" checking pawn and abilities"); + if (CasualSex_Helper.CanHaveSex(pawn)) + { + //--Log.Message(" finding partner"); + Pawn partner = CasualSex_Helper.find_partner(pawn, pawn.Map, false); + + //--Log.Message(" checking partner"); + if (partner == null) + return null; + + // Interrupt current job. + if (pawn.CurJob != null && pawn.jobs.curDriver != null) + pawn.jobs.curDriver.EndJobWith(JobCondition.InterruptForced); + + //--Log.Message(" returning job"); + return JobMaker.MakeJob(xxx.quick_sex, partner); + } + } + + return null; + } + } +} diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs new file mode 100644 index 0000000..a7ad31f --- /dev/null +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + + +namespace RJWSexperience +{ + public static class Keyed + { + public static string LustStatFactor(float value) => "LustStatFactor".Translate(value); + public static string SlaveStatFactor(float value) => "SlaveStatFactor".Translate(value); + public static string MemeStatFactor(float value) => "MemeStatFactor".Translate(value); + + public static readonly string SlaveStatFactorDefault = "SlaveStatFactorDefault".Translate(); + + } +} diff --git a/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs b/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs new file mode 100644 index 0000000..90bb850 --- /dev/null +++ b/RJWSexperience/RJWSexperience/PreceptComp_SelftTookThoughtExtended.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; + +namespace RJWSexperience +{ + public static class HistoryEventArgsNamesCustom + { + public const string Tag = "TAG"; + public const string Partner = "PARTNER"; + } + + public static class HETag + { + public const string Incestous = "[Incestuos]"; + public const string Raped = "[Raped]"; + public const string Rape = "[Rape]"; + } + + public class PreceptComp_SelfTookThoughtTagged : PreceptComp_SelfTookMemoryThought + { + public string tag; + public bool exclusive = false; + + + public PreceptComp_SelfTookThoughtTagged() { } + + public override void Notify_MemberTookAction(HistoryEvent ev, Precept precept, bool canApplySelfTookThoughts) + { + if (tag != null) + { + if (ev.args.TryGetArg(HistoryEventArgsNamesCustom.Tag, out string tags)) + { + if (tags.ToLower().Contains(tag.ToLower()) ^ exclusive) base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts); + } + else if (exclusive) + { + base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts); + } + } + else + { + base.Notify_MemberTookAction(ev, precept, canApplySelfTookThoughts); + } + + } + } + + + + public class PreceptComp_KnowsMemoryThoughtTagged : PreceptComp_KnowsMemoryThought + { + public string tag; + public bool exclusive = false; + public bool applyonpartner = false; + + public PreceptComp_KnowsMemoryThoughtTagged() { } + + public override void Notify_MemberWitnessedAction(HistoryEvent ev, Precept precept, Pawn member) + { + if (!applyonpartner) + { + if (ev.args.TryGetArg(HistoryEventArgsNamesCustom.Partner, out Pawn pawn)) + { + if (pawn == member) return; + } + } + if (tag != null) + { + if (ev.args.TryGetArg(HistoryEventArgsNamesCustom.Tag, out string tags)) + { + if (tags.ToLower().Contains(tag.ToLower()) ^ exclusive) base.Notify_MemberWitnessedAction(ev, precept, member); + } + else if (exclusive) + { + base.Notify_MemberWitnessedAction(ev, precept, member); + } + } + else + { + base.Notify_MemberWitnessedAction(ev, precept, member); + } + } + } + +} diff --git a/RJWSexperience/RJWSexperience/Properties/AssemblyInfo.cs b/RJWSexperience/RJWSexperience/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9211887 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 +// 이러한 특성 값을 변경하세요. +[assembly: AssemblyTitle("RJWSexperience")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RJWSexperience")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. +[assembly: ComVisible(false)] + +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. +[assembly: Guid("9c728e06-573b-4b04-a07f-acbf60cb424d")] + +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. +// +// 주 버전 +// 부 버전 +// 빌드 번호 +// 수정 버전 +// +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 +// 기본값으로 할 수 있습니다. +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj new file mode 100644 index 0000000..970d2be --- /dev/null +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -0,0 +1,93 @@ + + + + + Debug + AnyCPU + {9C728E06-573B-4B04-A07F-ACBF60CB424D} + Library + Properties + RJWSexperience + RJWSexperience + v4.7.2 + 512 + true + + + true + full + false + ..\..\Assemblies\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\Assemblies\ + TRACE + prompt + 4 + + + + D:\잉어\Lib\Harmony.2.0.4.0\net472\0Harmony.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + False + + + ..\..\..\RJW\1.3\Assemblies\RJW.dll + False + + + + + + + + + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UI.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIElementsModule.dll + False + + + ..\..\..\..\RimWorldWin64_Data\Managed\UnityEngine.UIModule.dll + False + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/RJW_Patch.cs b/RJWSexperience/RJWSexperience/RJW_Patch.cs new file mode 100644 index 0000000..b281c19 --- /dev/null +++ b/RJWSexperience/RJWSexperience/RJW_Patch.cs @@ -0,0 +1,420 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using rjw; +using RimWorld; +using Verse; + + +namespace RJWSexperience +{ + public static class RJWUtility + { + public static float GetSexStat(this Pawn pawn) + { + if (xxx.is_human(pawn)) + { + return pawn.GetStatValue(xxx.sex_stat); + } + else return 1.0f; + } + + public static HistoryEvent TaggedEvent(this HistoryEventDef def ,Pawn pawn, string tag, Pawn partner) + { + return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(HistoryEventArgsNamesCustom.Tag), partner.Named(HistoryEventArgsNamesCustom.Partner)); + } + + } + + + + [HarmonyPatch(typeof(JobDriver_Sex), "Orgasm")] + public static class RJW_Patch_Orgasm + { + public static void Postfix(JobDriver_Sex __instance) + { + if (__instance.sexType != xxx.rjwSextype.Masturbation && !(__instance is JobDriver_Masturbate)) + { + if (__instance.isRape) + { + __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.05f, true); + } + else + { + __instance.pawn?.skills?.Learn(VariousDefOf.SexSkill, 0.35f, true); + } + } + } + } + + [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMin")] + public static class RJW_Patch_WhoreAbilityAdjustmentMin + { + public static void Postfix(Pawn whore, ref float __result) + { + __result *= whore.GetSexStat(); + } + } + + [HarmonyPatch(typeof(WhoringHelper), "WhoreAbilityAdjustmentMax")] + public static class RJW_Patch_WhoreAbilityAdjustmentMax + { + public static void Postfix(Pawn whore, ref float __result) + { + __result *= whore.GetSexStat(); + } + } + + [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] + public static class RJW_Patch_SatisfyPersonal_Pre + { + public static void Prefix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, ref float satisfaction) + { + satisfaction *= partner.GetSexStat(); + } + } + + + [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] + public static class RJW_Patch_SatisfyPersonal_Post + { + private const float base_sat_per_fuck = 0.3f; + public static void Postfix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype, bool violent, bool pawn_is_raping, float satisfaction) + { + float? lust = pawn.records?.GetValue(VariousDefOf.Lust); + if (lust != null) + { + if (sextype != xxx.rjwSextype.Masturbation) pawn.records.AddTo(VariousDefOf.Lust, satisfaction - base_sat_per_fuck); // If the sex is satisfactory, lust grows up. Declines at the opposite. + else pawn.records.AddTo(VariousDefOf.Lust, satisfaction * satisfaction); // Masturbation always increases lust. + } + + } + } + + [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")] + public static class RJW_Patch_ChancePerHour_Bestiality + { + public static void Postfix(Pawn pawn, ref float __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) __result = BestialityByPrecept(ideo); // ideo is null if don't have dlc + } + + public static float BestialityByPrecept(Ideo ideo) + { + if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) return 0.3f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated)) return 0.6f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) return 0.75f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Disapproved)) return 1.0f; + else return 5f; + } + } + + [HarmonyPatch(typeof(ThinkNode_ChancePerHour_RapeCP), "MtbHours")] + public static class RJW_Patch_ChancePerHour_RapeCP + { + public static void Postfix(Pawn pawn, ref float __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) __result *= RapeByPrecept(ideo); // ideo is null if don't have dlc + } + + public static float RapeByPrecept(Ideo ideo) + { + if (ideo.HasPrecept(VariousDefOf.Rape_Honorable)) return 0.25f; + else if (ideo.HasPrecept(VariousDefOf.Rape_Acceptable)) return 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Rape_Disapproved)) return 1.0f; + else return 3f; + } + } + + [HarmonyPatch(typeof(xxx), "TransferNutrition")] + public static class RJW_Patch_TransferNutrition + { + public static void Postfix(Pawn pawn, Pawn partner, xxx.rjwSextype sextype) + { + Pawn receiver = null; + if (Genital_Helper.has_penis_fertile(pawn)) receiver = partner; + else if (Genital_Helper.has_penis_fertile(partner)) receiver = pawn; + + if (receiver != null && ( + sextype == xxx.rjwSextype.Oral || + sextype == xxx.rjwSextype.Fellatio || + sextype == xxx.rjwSextype.Sixtynine)) + { + receiver.needs?.mood?.thoughts?.memories?.TryGainMemoryFast(VariousDefOf.AteCum); + + } + } + } + + [HarmonyPatch(typeof(xxx), "is_rapist")] + public static class RJW_Patch_is_rapist + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) + { + __result = __result || ideo.HasMeme(VariousDefOf.Rapist); + } + } + + } + + [HarmonyPatch(typeof(xxx), "is_zoophile")] + public static class RJW_Patch_is_zoophile + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) + { + __result = __result || ideo.HasMeme(VariousDefOf.Zoophile); + } + } + + } + + + [HarmonyPatch(typeof(SexUtility), "Aftersex", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool), typeof(xxx.rjwSextype) })] + public static class RJW_Patch_Aftersex + { + + + public static void Postfix(Pawn pawn, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype) + { + //Log.Message("Aftersex " + pawn.Label + ": " + sextype); + if (xxx.is_human(pawn)) AfterSexHuman(pawn, partner, usedCondom, rape, isCoreLovin, sextype); + else if (xxx.is_human(partner)) AfterSexHuman(partner, pawn, usedCondom, false, isCoreLovin, sextype, true); + + } + + + public static void AfterSexHuman(Pawn human, Pawn partner, bool usedCondom, bool rape, bool isCoreLovin, xxx.rjwSextype sextype, bool isHumanReceiving = false) + { + string tag = ""; + if (human.IsIncest(partner)) + { + tag += HETag.Incestous; + } + + if (partner.IsAnimal()) + { + if (isHumanReceiving && rape) + { + if (human.IsSlave) RapeEffectSlave(human); + } + else + { + if (human.Ideo?.IsVeneratedAnimal(partner) ?? false) Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithVeneratedAnimal.TaggedEvent(human, tag, partner)); + else Find.HistoryEventsManager.RecordEvent(VariousDefOf.SexWithAnimal.TaggedEvent(human, tag, partner)); + } + } + else if (xxx.is_human(partner)) + { + if (rape) + { + if (partner.IsSlave) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedSlave.TaggedEvent(human ,tag + HETag.Rape ,partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedSlave.TaggedEvent(partner, tag + HETag.Raped, human)); + RapeEffectSlave(partner); + } + else if (partner.IsPrisoner) + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.RapedPrisoner.TaggedEvent(human, tag + HETag.Rape, partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRapedPrisoner.TaggedEvent(partner, tag + HETag.Raped, human)); + partner.guest.will = Math.Max(0, partner.guest.will - 0.2f); + } + else + { + Find.HistoryEventsManager.RecordEvent(VariousDefOf.Raped.TaggedEvent(human, tag + HETag.Rape, partner)); + Find.HistoryEventsManager.RecordEvent(VariousDefOf.WasRaped.TaggedEvent(partner, tag + HETag.Raped, human)); + } + } + else + { + HistoryEventDef sexevent = GetSexHistoryDef(sextype); + if (sexevent != null) + { + Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(human, tag, partner)); + Find.HistoryEventsManager.RecordEvent(sexevent.TaggedEvent(partner, tag, human)); + if (sexevent == VariousDefOf.PromiscuousSex) + { + human.records.AddTo(VariousDefOf.Lust, 3.0f); + partner.records.AddTo(VariousDefOf.Lust, 3.0f); + } + + } + } + } + } + + public static void RapeEffectSlave(Pawn victim) + { + Need_Suppression suppression = victim.needs.TryGetNeed(); + if (suppression != null) + { + Hediff broken = victim.health.hediffSet.GetFirstHediffOfDef(xxx.feelingBroken); + if (broken != null) suppression.CurLevel += 0.3f * broken.Severity + 0.05f; + else suppression.CurLevel += 0.05f; + } + } + + + /// + /// only for non-violate human sex + /// + /// + /// + /// + /// + public static HistoryEventDef GetSexHistoryDef(xxx.rjwSextype sextype) + { + switch (sextype) + { + case xxx.rjwSextype.None: + case xxx.rjwSextype.MechImplant: + default: + return null; + case xxx.rjwSextype.Vaginal: + return VariousDefOf.VaginalSex; + case xxx.rjwSextype.Anal: + case xxx.rjwSextype.Rimming: + return VariousDefOf.AnalSex; + case xxx.rjwSextype.Oral: + case xxx.rjwSextype.Fellatio: + case xxx.rjwSextype.Cunnilingus: + return VariousDefOf.OralSex; + + case xxx.rjwSextype.Masturbation: + case xxx.rjwSextype.Boobjob: + case xxx.rjwSextype.Handjob: + case xxx.rjwSextype.Footjob: + case xxx.rjwSextype.Fingering: + case xxx.rjwSextype.MutualMasturbation: + return VariousDefOf.MiscSex; + case xxx.rjwSextype.DoublePenetration : + case xxx.rjwSextype.Scissoring : + case xxx.rjwSextype.Fisting : + case xxx.rjwSextype.Sixtynine : + return VariousDefOf.PromiscuousSex; + } + + } + + } + + + /// + /// Set prefer sextype using precepts + /// + [HarmonyPatch(typeof(SexUtility), "DetermineSexScores")] + public static class RJW_Patch_DetermineSexScores + { + public static void Postfix(Pawn pawn, Pawn partner, bool rape, bool whoring, Pawn receiving, List __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 0); + + ideo = partner.Ideo; + if (!rape && ideo != null) PreceptSextype(ideo, pawn.GetStatValue(xxx.sex_drive_stat), __result, 1); + + } + + public static void PreceptSextype(Ideo ideo, float sexdrive, List result, int offset) + { + float mult = 8.0f * Math.Max(0.3f, 1 / Math.Max(0.01f, sexdrive)); + if (ideo.HasPrecept(VariousDefOf.Sex_VaginalOnly)) + { + result[0 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_AnalOnly)) + { + result[2 + offset] *= mult; + result[6 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_OralOnly)) + { + result[4 + offset] *= mult; + result[8 + offset] *= mult; + } + else if (ideo.HasPrecept(VariousDefOf.Sex_Promiscuous)) + { + result[10 + offset] *= mult; + result[20 + offset] *= mult; + result[24 + offset] *= mult; + result[26 + offset] *= mult; + } + } + } + + [HarmonyPatch(typeof(Nymph_Generator), "set_skills")] + public static class RJW_Patch_Nymph_set_skills + { + public static void Postfix(Pawn pawn) + { + SkillRecord sexskill = pawn.skills.GetSkill(VariousDefOf.SexSkill); + if (sexskill != null) + { + sexskill.passion = Passion.Major; + sexskill.Level = (int)Utility.RandGaussianLike(7f, 20.99f); + sexskill.xpSinceLastLevel = sexskill.XpRequiredForLevelUp * Rand.Range(0.10f, 0.90f); + } + } + } + + [HarmonyPatch(typeof(SexAppraiser), "would_fuck", new Type[] {typeof(Pawn), typeof(Pawn), typeof(bool), typeof(bool), typeof(bool) })] + public static class RJW_Patch_would_fuck + { + public static void Postfix(Pawn fucker, Pawn fucked, bool invert_opinion, bool ignore_bleeding, bool ignore_gender, ref float __result) + { + Ideo ideo = fucker.Ideo; + if (ideo != null) + { + if (fucker.IsIncest(fucked)) + { + if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly)) __result *= 2.0f; + else if (!fucker.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, fucked) ?? false) + { + if (ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved)) __result *= 0.5f; + else if (ideo.HasPrecept(VariousDefOf.Incestuos_Forbidden)) __result *= 0.1f; + } + } + if (fucked.IsAnimal()) + { + if (ideo.HasPrecept(VariousDefOf.Bestiality_Honorable)) __result *= 2.0f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_OnlyVenerated) && ideo.IsVeneratedAnimal(fucked)) __result *= 2.0f; + else if (ideo.HasPrecept(VariousDefOf.Bestiality_Acceptable)) __result *= 1.0f; + else __result *= 0.5f; + } + + } + } + + } + + [HarmonyPatch(typeof(PawnDesignations_Breedee), "UpdateCanDesignateBreeding")] + public static class RJW_Patch_UpdateCanDesignateBreeding + { + public static void Postfix(Pawn pawn, ref bool __result) + { + Ideo ideo = pawn.Ideo; + if (ideo != null && ideo.HasMeme(VariousDefOf.Zoophile)) + { + SaveStorage.DataStore.GetPawnData(pawn).CanDesignateBreeding = true; + __result = true; + } + } + } + + + + + + +} diff --git a/RJWSexperience/RJWSexperience/Rimworld_Patch.cs b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs new file mode 100644 index 0000000..848f81e --- /dev/null +++ b/RJWSexperience/RJWSexperience/Rimworld_Patch.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using HarmonyLib; +using RimWorld; +using Verse; +using rjw; + +namespace RJWSexperience +{ + [HarmonyPatch(typeof(MarriageCeremonyUtility), "Married")] + public static class Rimworld_Patch_Marriage + { + public static void Postfix(Pawn firstPawn, Pawn secondPawn) + { + if (firstPawn.IsIncest(secondPawn)) + { + Find.HistoryEventsManager.RecordEvent(new HistoryEvent(VariousDefOf.Incestuos_Marriage, firstPawn.Named(HistoryEventArgsNames.Doer))); + Find.HistoryEventsManager.RecordEvent(new HistoryEvent(VariousDefOf.Incestuos_Marriage, secondPawn.Named(HistoryEventArgsNames.Doer))); + } + } + } + + [HarmonyPatch(typeof(Pawn_RelationsTracker), "SecondaryRomanceChanceFactor")] + public static class Rimworld_Patch_SecondaryRomanceChanceFactor + { + public static void Postfix(Pawn otherPawn, Pawn ___pawn, ref float __result) + { + Ideo ideo = ___pawn.Ideo; + if (ideo != null) + { + if (ideo.HasPrecept(VariousDefOf.Incestuos_IncestOnly) && ___pawn.IsIncest(otherPawn)) + { + __result *= 8f; + } + } + } + } + + [HarmonyPatch(typeof(PawnGenerator), "GeneratePawn", new Type[] { typeof(PawnGenerationRequest) })] + public static class Rimworld_Patch_GeneratePawn + { + public static void Postfix(PawnGenerationRequest request, ref Pawn __result) + { + if (__result != null && !request.Newborn && xxx.is_human(__result)) + { + float avgsex = -500; + float lust = __result.RecordRandomizer(VariousDefOf.Lust, 0, 500, float.MinValue); + float sexableage = 0; + if (__result.ageTracker.AgeBiologicalYears > RJWSettings.sex_minimum_age) + { + sexableage = __result.ageTracker.AgeBiologicalYearsFloat - RJWSettings.sex_minimum_age; + avgsex = sexableage * Rand.Range(0,30) + lust; + } + float totalsex = 0; + float totalbirth = 0; + if (__result.story != null) + { + + if (xxx.is_rapist(__result)) + { + if (xxx.is_zoophile(__result)) + { + if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, 90); + else totalsex += __result.RecordRandomizer(xxx.CountOfRapedAnimals, avgsex, 90); + } + else totalsex += __result.RecordRandomizer(xxx.CountOfRapedHumanlikes, avgsex, 90); + avgsex /= 2; + } + + if (xxx.is_zoophile(__result)) + { + if (__result.Has(Quirk.ChitinLover)) totalsex += __result.RecordRandomizer(xxx.CountOfRapedInsects, avgsex, 90); + else totalsex += __result.RecordRandomizer(xxx.CountOfSexWithAnimals, avgsex, 90); + avgsex /= 2; + } + else if (xxx.is_necrophiliac(__result)) + { + totalsex += __result.RecordRandomizer(xxx.CountOfSexWithCorpse, avgsex, 90); + avgsex /= 2; + } + + if (__result.IsSlave) + { + totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByHumanlikes, 0, Rand.Range(0,100)*sexableage); + totalsex += __result.RecordRandomizer(xxx.CountOfBeenRapedByAnimals, Rand.Range(-50,10), Rand.Range(0,10)*sexableage); + } + + totalsex += __result.RecordRandomizer(xxx.CountOfSexWithHumanlikes, avgsex, 90); + if (__result.relations != null) + if (__result.relations != null && __result.gender == Gender.Female) + { + totalbirth += __result.relations.GetDirectRelationsCount(PawnRelationDefOf.Child); + __result.records?.SetTo(xxx.CountOfBirthHuman, totalbirth); + } + } + __result.records?.SetTo(xxx.CountOfSex, totalsex); + } + } + } + + +} diff --git a/RJWSexperience/RJWSexperience/StatParts.cs b/RJWSexperience/RJWSexperience/StatParts.cs new file mode 100644 index 0000000..798a107 --- /dev/null +++ b/RJWSexperience/RJWSexperience/StatParts.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using rjw; +using RimWorld; +using Verse; + + +namespace RJWSexperience +{ + public class StatPart_Lust : StatPart + { + public float factor; + + public override string ExplanationPart(StatRequest req) + { + Pawn pawn = req.Thing as Pawn; + return Keyed.LustStatFactor(LustFactor(pawn) * factor * 100); + + } + + public override void TransformValue(StatRequest req, ref float val) + { + Pawn pawn = req.Thing as Pawn; + if (pawn != null) val *= LustFactor(pawn) * factor; + } + + protected float LustFactor(Pawn pawn) + { + return 1 + pawn.records.GetValue(VariousDefOf.Lust) / 100; + } + + } + + public class StatPart_GenderPrimacy : StatPart + { + public float modifier; + + public override string ExplanationPart(StatRequest req) + { + Pawn pawn = req.Thing as Pawn; + Ideo ideo = null; + if (pawn != null) ideo = pawn.Ideo; + float fact = 1f; + if (ideo != null && !ideo.memes.NullOrEmpty()) for (int i = 0; i < ideo.memes.Count; i++) + { + if (ideo.memes[i] == MemeDefOf.MaleSupremacy) + { + if (pawn.gender == Gender.Male) fact = modifier; + else if (pawn.gender == Gender.Female) fact = 1/modifier; + break; + } + else if (ideo.memes[i] == MemeDefOf.FemaleSupremacy) + { + if (pawn.gender == Gender.Male) fact = 1/modifier; + else if (pawn.gender == Gender.Female) fact = modifier; + break; + } + } + return Keyed.MemeStatFactor(fact * 100); + } + + public override void TransformValue(StatRequest req, ref float val) + { + Pawn pawn = req.Thing as Pawn; + Ideo ideo = null; + if (pawn != null) ideo = pawn.Ideo; + if (ideo != null && !ideo.memes.NullOrEmpty()) for(int i=0; i< ideo.memes.Count; i++) + { + if (ideo.memes[i] == MemeDefOf.MaleSupremacy) + { + if (pawn.gender == Gender.Male) val *= modifier; + else if (pawn.gender == Gender.Female) val /= modifier; + break; + } + else if(ideo.memes[i] == MemeDefOf.FemaleSupremacy) + { + if (pawn.gender == Gender.Male) val /= modifier; + else if (pawn.gender == Gender.Female) val *= modifier; + break; + } + } + } + } + + public class StatPart_Slave : StatPart + { + public float factor; + public override string ExplanationPart(StatRequest req) + { + float fact = factor * 100; + Pawn pawn = req.Thing as Pawn; + if (pawn != null) + { + if (pawn.IsSlave) + { + return Keyed.SlaveStatFactor(fact); + } + } + return Keyed.SlaveStatFactorDefault; + } + + public override void TransformValue(StatRequest req, ref float val) + { + Pawn pawn = req.Thing as Pawn; + if (pawn != null) + { + if (pawn.IsSlave) + { + val *= factor; + } + } + + } + } + + +} diff --git a/RJWSexperience/RJWSexperience/Thought_Recordbased.cs b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs new file mode 100644 index 0000000..2a8f7ce --- /dev/null +++ b/RJWSexperience/RJWSexperience/Thought_Recordbased.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + + +namespace RJWSexperience +{ + /// + /// ThoughtDef using record + /// + public class ThoughtDef_Recordbased : ThoughtDef + { + public RecordDef recordDef; + public List minimumValueforStage = new List(); + public float increment; + } + + /// + /// Thought class using record. + /// + public class Thought_Recordbased : Thought_Memory + { + protected ThoughtDef_Recordbased Def => (ThoughtDef_Recordbased)def; + protected RecordDef recordDef => Def.recordDef; + protected List minimumValueforStage => Def.minimumValueforStage; + protected float increment => Def.increment; + + public override int CurStageIndex + { + get + { + float value = pawn.records.GetValue(recordDef); + for (int i = minimumValueforStage.Count - 1; i > 0; i--) + { + if (minimumValueforStage[i] < value) return i + 1; + } + return 0; + } + } + } + + public class Thought_AteCum : Thought_Recordbased + { + + protected int recordIncrement = 1; + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref recordIncrement, "recordIncrement", recordIncrement, true); + } + + + + //There is no direct way to modify custom records via ingestion. So i increase it from thought. + public override void ThoughtInterval() + { + base.ThoughtInterval(); + if (recordIncrement >= 1) + { + recordIncrement--; + pawn.records.AddTo(VariousDefOf.NumofEatenCum, 1); + } + + } + + public override bool TryMergeWithExistingMemory(out bool showBubble) + { + ThoughtHandler thoughts = pawn.needs.mood.thoughts; + if (thoughts.memories.NumMemoriesInGroup(this) >= def.stackLimit) + { + Thought_AteCum thought_Memory = (Thought_AteCum)thoughts.memories.OldestMemoryInGroup(this); + if (thought_Memory != null) + { + showBubble = (thought_Memory.age > thought_Memory.def.DurationTicks / 2); + thought_Memory.Merged(); + return true; + } + } + showBubble = true; + return false; + } + + public override void Init() + { + base.Init(); + recordIncrement = 1; + } + + protected virtual void Merged() + { + age = 0; + recordIncrement += 1; + } + } + + public class Thought_IncreaseRecord : Thought_Recordbased + { + protected float recordIncrement; + + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref recordIncrement, "recordIncrement", recordIncrement, true); + } + + public override void ThoughtInterval() + { + base.ThoughtInterval(); + if (recordIncrement != 0) + { + pawn.records.AddTo(recordDef, recordIncrement); + recordIncrement = 0; + } + + } + + public override bool TryMergeWithExistingMemory(out bool showBubble) + { + ThoughtHandler thoughts = pawn.needs.mood.thoughts; + if (thoughts.memories.NumMemoriesInGroup(this) >= def.stackLimit) + { + Thought_IncreaseRecord thought_Memory = (Thought_IncreaseRecord)thoughts.memories.OldestMemoryInGroup(this); + if (thought_Memory != null) + { + showBubble = (thought_Memory.age > thought_Memory.def.DurationTicks / 2); + thought_Memory.Merged(); + return true; + } + } + showBubble = true; + return false; + } + + public override void Init() + { + base.Init(); + recordIncrement = increment; + } + protected virtual void Merged() + { + age = 0; + recordIncrement += increment; + } + } + + +} diff --git a/RJWSexperience/RJWSexperience/Utility.cs b/RJWSexperience/RJWSexperience/Utility.cs new file mode 100644 index 0000000..8350f57 --- /dev/null +++ b/RJWSexperience/RJWSexperience/Utility.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using RimWorld; +using Verse; +using rjw; +using UnityEngine; + +namespace RJWSexperience +{ + public static class Utility + { + public static System.Random random = new System.Random(Environment.TickCount); + + public static float RandGaussianLike(float min, float max, int iterations = 3) + { + double res = 0; + for (int i = 0; i < iterations; i++) + { + res += random.NextDouble(); + } + res = res / iterations; + + return (float)res * (max - min) + min; + } + + public static void SetTo(this Pawn_RecordsTracker records, RecordDef record ,float value) + { + float recordval = records.GetValue(record); + records.AddTo(record, value - recordval); + } + + public static bool IsIncest(this Pawn pawn, Pawn partner) + { + IEnumerable relations = pawn.GetRelations(partner); + Ideo ideo = pawn.Ideo; + bool wide = false; + if (ideo != null) wide = ideo.HasPrecept(VariousDefOf.Incestuos_Disapproved_CloseOnly); + if (!relations.EnumerableNullOrEmpty()) foreach(PawnRelationDef relation in relations) + { + if(wide) + { + if (relation.incestOpinionOffset < 0) return true; + } + else if (relation.familyByBloodRelation) return true; + } + return false; + } + + public static float RecordRandomizer(this Pawn pawn, RecordDef record, float avg, float dist, float min = 0, float max = float.MaxValue) + { + float value = Mathf.Clamp(RandGaussianLike(avg - dist,avg + dist),min,max); + float recordvalue = pawn.records.GetValue(record); + pawn.records.AddTo(record, value - recordvalue); + + return value; + } + + + + } +} diff --git a/RJWSexperience/RJWSexperience/VariousDefOf.cs b/RJWSexperience/RJWSexperience/VariousDefOf.cs new file mode 100644 index 0000000..c0a19e7 --- /dev/null +++ b/RJWSexperience/RJWSexperience/VariousDefOf.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; + +namespace RJWSexperience +{ + public class VariousDefOf + { + public static readonly RecordDef NumofEatenCum = DefDatabase.GetNamed("NumofEatenCum"); + public static readonly RecordDef Lust = DefDatabase.GetNamed("Lust"); + public static readonly SkillDef SexSkill = DefDatabase.GetNamed("Sex"); + public static readonly ThoughtDef_Recordbased AteCum = DefDatabase.GetNamed("AteCum"); + + [MayRequireIdeology] public static readonly MemeDef Zoophile = DefDatabase.GetNamed("Zoophile"); + [MayRequireIdeology] public static readonly MemeDef Rapist = DefDatabase.GetNamed("Rapist"); + [MayRequireIdeology] public static readonly HistoryEventDef SexWithAnimal = DefDatabase.GetNamed("SexWithAnimal"); + [MayRequireIdeology] public static readonly HistoryEventDef SexWithVeneratedAnimal = DefDatabase.GetNamed("SexWithVeneratedAnimal"); + [MayRequireIdeology] public static readonly HistoryEventDef Raped = DefDatabase.GetNamed("Raped"); + [MayRequireIdeology] public static readonly HistoryEventDef RapedSlave = DefDatabase.GetNamed("RapedSlave"); + [MayRequireIdeology] public static readonly HistoryEventDef RapedPrisoner = DefDatabase.GetNamed("RapedPrisoner"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRaped = DefDatabase.GetNamed("WasRaped"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRapedSlave = DefDatabase.GetNamed("WasRapedSlave"); + [MayRequireIdeology] public static readonly HistoryEventDef WasRapedPrisoner = DefDatabase.GetNamed("WasRapedPrisoner"); + [MayRequireIdeology] public static readonly HistoryEventDef VaginalSex = DefDatabase.GetNamed("VaginalSex"); + [MayRequireIdeology] public static readonly HistoryEventDef AnalSex = DefDatabase.GetNamed("AnalSex"); + [MayRequireIdeology] public static readonly HistoryEventDef OralSex = DefDatabase.GetNamed("OralSex"); + [MayRequireIdeology] public static readonly HistoryEventDef MiscSex = DefDatabase.GetNamed("MiscSex"); + [MayRequireIdeology] public static readonly HistoryEventDef PromiscuousSex = DefDatabase.GetNamed("PromiscuousSex"); + [MayRequireIdeology] public static readonly HistoryEventDef Incestuos_Marriage = DefDatabase.GetNamed("Incestuos_Marriage"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Abhorrent = DefDatabase.GetNamed("Bestiality_Abhorrent"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Horrible = DefDatabase.GetNamed("Bestiality_Horrible"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Disapproved = DefDatabase.GetNamed("Bestiality_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Acceptable = DefDatabase.GetNamed("Bestiality_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_OnlyVenerated = DefDatabase.GetNamed("Bestiality_OnlyVenerated"); + [MayRequireIdeology] public static readonly PreceptDef Bestiality_Honorable = DefDatabase.GetNamed("Bestiality_Honorable"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Abhorrent = DefDatabase.GetNamed("Rape_Abhorrent"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Horrible = DefDatabase.GetNamed("Rape_Horrible"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Disapproved = DefDatabase.GetNamed("Rape_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Acceptable = DefDatabase.GetNamed("Rape_Acceptable"); + [MayRequireIdeology] public static readonly PreceptDef Rape_Honorable = DefDatabase.GetNamed("Rape_Honorable"); + [MayRequireIdeology] public static readonly PreceptDef Sex_Free = DefDatabase.GetNamed("Sex_Free"); + [MayRequireIdeology] public static readonly PreceptDef Sex_VaginalOnly = DefDatabase.GetNamed("Sex_VaginalOnly"); + [MayRequireIdeology] public static readonly PreceptDef Sex_AnalOnly = DefDatabase.GetNamed("Sex_AnalOnly"); + [MayRequireIdeology] public static readonly PreceptDef Sex_OralOnly = DefDatabase.GetNamed("Sex_OralOnly"); + [MayRequireIdeology] public static readonly PreceptDef Sex_Promiscuous = DefDatabase.GetNamed("Sex_Promiscuous"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Free = DefDatabase.GetNamed("Incestuos_Free"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved = DefDatabase.GetNamed("Incestuos_Disapproved"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Forbidden = DefDatabase.GetNamed("Incestuos_Forbidden"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase.GetNamed("Incestuos_IncestOnly"); + [MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase.GetNamed("Incestuos_Disapproved_CloseOnly"); + } +} diff --git a/Textures/Things/Item/GatheredCum/GatheredCum_a.png b/Textures/Things/Item/GatheredCum/GatheredCum_a.png new file mode 100644 index 0000000..3e4833d Binary files /dev/null and b/Textures/Things/Item/GatheredCum/GatheredCum_a.png differ diff --git a/Textures/Things/Item/GatheredCum/GatheredCum_b.png b/Textures/Things/Item/GatheredCum/GatheredCum_b.png new file mode 100644 index 0000000..f5937fc Binary files /dev/null and b/Textures/Things/Item/GatheredCum/GatheredCum_b.png differ diff --git a/Textures/Things/Item/GatheredCum/GatheredCum_c.png b/Textures/Things/Item/GatheredCum/GatheredCum_c.png new file mode 100644 index 0000000..ba518b9 Binary files /dev/null and b/Textures/Things/Item/GatheredCum/GatheredCum_c.png differ diff --git a/Textures/Things/Item/GatheredCum/GatheredCum_d.png b/Textures/Things/Item/GatheredCum/GatheredCum_d.png new file mode 100644 index 0000000..0743eca Binary files /dev/null and b/Textures/Things/Item/GatheredCum/GatheredCum_d.png differ diff --git a/Textures/UI/Issues/Bestiality.png b/Textures/UI/Issues/Bestiality.png new file mode 100644 index 0000000..0743eca Binary files /dev/null and b/Textures/UI/Issues/Bestiality.png differ diff --git a/Textures/UI/Issues/Birth.png b/Textures/UI/Issues/Birth.png new file mode 100644 index 0000000..2fc8e16 Binary files /dev/null and b/Textures/UI/Issues/Birth.png differ diff --git a/Textures/UI/Issues/Incest.png b/Textures/UI/Issues/Incest.png new file mode 100644 index 0000000..b8de126 Binary files /dev/null and b/Textures/UI/Issues/Incest.png differ diff --git a/Textures/UI/Issues/Rape.png b/Textures/UI/Issues/Rape.png new file mode 100644 index 0000000..002b5d3 Binary files /dev/null and b/Textures/UI/Issues/Rape.png differ diff --git a/Textures/UI/Memes/Rape.png b/Textures/UI/Memes/Rape.png new file mode 100644 index 0000000..8ad84ea Binary files /dev/null and b/Textures/UI/Memes/Rape.png differ diff --git a/Textures/UI/Memes/SexualDissolutely.png b/Textures/UI/Memes/SexualDissolutely.png new file mode 100644 index 0000000..0743eca Binary files /dev/null and b/Textures/UI/Memes/SexualDissolutely.png differ diff --git a/changelogs.txt b/changelogs.txt new file mode 100644 index 0000000..66c50d8 --- /dev/null +++ b/changelogs.txt @@ -0,0 +1,21 @@ +Version Beta 1.0.1.5 + - changed icon for precepts and memes + - added stat factors to precepts + - added record randomizing on pawn generation + - pawns will have different sex drive + +Version Beta 1.0.1.4 + - gender supremacy affects to pawn's vulnerability + - nymps will get passion for sex skill always + - raping prisoner reduces will + - added incestous precepts + - more detailed implementations + +Version Beta 1.0.1.3 + - added sextype precepts + +Version Beta 1.0.1.2 + - added precept interactions + +Version Beta 1.0.1.1 + - added ideologies \ No newline at end of file