diff --git a/About/Manifest.xml b/About/Manifest.xml index c701bdb..d2b2963 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Sexperience - 1.0.1.6 + 1.0.1.7 diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll index e80c92f..3db0243 100644 Binary files a/Assemblies/RJWSexperience.dll and b/Assemblies/RJWSexperience.dll differ diff --git a/Defs/PawnRelationDefs/PawnRelations_Bastard.xml b/Defs/PawnRelationDefs/PawnRelations_Bastard.xml new file mode 100644 index 0000000..6c99329 --- /dev/null +++ b/Defs/PawnRelationDefs/PawnRelations_Bastard.xml @@ -0,0 +1,16 @@ + + + + + RJWSexperience.PawnRelationWorker_Bastard + Bastard + + bastard + 185 + -10 + 0.0 + true + true + + + diff --git a/Defs/PreceptDefs/Precepts_BabyFaction.xml b/Defs/PreceptDefs/Precepts_BabyFaction.xml new file mode 100644 index 0000000..e26356c --- /dev/null +++ b/Defs/PreceptDefs/Precepts_BabyFaction.xml @@ -0,0 +1,42 @@ + + + + + + BabyFaction + + UI/Issues/Birth + + + + + + BabyFaction_AlwaysMother + BabyFaction + + New born babies always follow mother's faction and ideology. + Low + 50 + 1000 + + + + BabyFaction_AlwaysFather + BabyFaction + + New born babies always follow father's faction and ideology(if exists). + Low + 40 + 1000 + + + + BabyFaction_AlwaysColony + BabyFaction + + New born babies are always player's faction and ideology. + Low + 30 + 1000 + + \ No newline at end of file diff --git a/Defs/PreceptDefs/Precepts_SocialAffection.xml b/Defs/PreceptDefs/Precepts_SocialAffection.xml new file mode 100644 index 0000000..b4ee222 --- /dev/null +++ b/Defs/PreceptDefs/Precepts_SocialAffection.xml @@ -0,0 +1,62 @@ + + + + + + SocialAffection + + UI/Issues/SocialAffection + + + + + + SocialAffection_Normal + SocialAffection + + Just normal. + Low + 50 + 1000 + + + + SocialAffection_Small + SocialAffection + + Care about only immediate family. + Medium + 40 + 1000 + + + + SocialAffection_OnlyFamily + SocialAffection + + Don't care about non-family memeber's tragedy. + Medium + 30 + 1000 + + + + SocialAffection_Dry + SocialAffection + + Don't care about family memeber's tragedy. + High + 20 + 1000 + + + + SocialAffection_Psychopath + SocialAffection + + Don't care about others. + High + 10 + 1000 + + \ No newline at end of file diff --git a/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml b/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml index fdc2c0c..1fcfe7b 100644 --- a/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml +++ b/Defs/PreceptDefs/RitualPatternDefs/RitualPatterns_sex.xml @@ -14,7 +14,7 @@ Gangbang Gangbang gangbang - A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fuck the prisoner. If the organizer cannot fuck victim, the ritual will be canceled. + A ritualistic gangbang. The organizer will give a speech to excite the crowd, then fuck the victim. If the organizer cannot fuck victim, the ritual will be canceled. UI/Issues/Gangbang false diff --git a/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml b/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml new file mode 100644 index 0000000..13c8abc --- /dev/null +++ b/Defs/PreconfiguredIdeos/IdeoPresetDefs_sex.xml @@ -0,0 +1,36 @@ + + + + Animal_Breeders + + Animals are our better half. + Intense + +
  • AnimalPersonhood
  • +
  • Zoophile
  • +
    +
    + + + Savage_Rapist_Brigands + + All of them are ours. + Intense + +
  • Rapist
  • +
  • Nudism
  • +
  • Raider
  • +
    +
    + + + Hentai_Tribe + + Intense + Impregnate. + +
  • MaleSupremacy
  • +
  • Rapist
  • +
    +
    +
    \ No newline at end of file diff --git a/Defs/Rituals/Ritual_Behaviors_sex.xml b/Defs/Rituals/Ritual_Behaviors_sex.xml index 4182d9d..78cf13d 100644 --- a/Defs/Rituals/Ritual_Behaviors_sex.xml +++ b/Defs/Rituals/Ritual_Behaviors_sex.xml @@ -147,7 +147,7 @@ animal 10 True - a breedable animal. + a breedable animal false diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml index 363f408..9c8edcc 100644 --- a/Languages/English/Keyed/RJW_Sexperience.xml +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -6,6 +6,11 @@ Slave: x{0}% Not Slave: x100% Meme: x{0}% + slave, prisoner, submissive gender only + improper animal: cannot breed or forbidden by precepts + not human + not animal + capable of sex is required Enable record randomizer Randomize pawn's sex records. @@ -21,8 +26,8 @@ Set average sex count. Enable slaves get raped experience Slaves will have experience of being raped - - + Lust Limit + Set limitation of lust. If absolute value of lust close to or larger than this value, lust will be less likely to change. diff --git a/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml index 0a3aa60..071d44e 100644 --- a/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml +++ b/Languages/Korean/DefInjected/MemeDefs/Translations_MemeDef.xml @@ -2,20 +2,20 @@ 수간 동물박이들 - 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->수간 + 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->수간 @@ -32,25 +32,25 @@ 강간 강간은 최고야 - 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]은(는) 행성을 강간하려다 죽었습니다. + 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]의 힘을 사용하여 파괴자를 강간할 것입니다. + 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->변태적인 + memeConcept->강간 + memeConcept->겁탈 memeGod->슬라네쉬 memeLeaderNoun->종마 memeLeaderNoun->위대한 강간범 diff --git a/Languages/Korean/DefInjected/RitualBehaviorDefs/Translations_RitualBehaviorDefs.xml b/Languages/Korean/DefInjected/RitualBehaviorDefs/Translations_RitualBehaviorDefs.xml new file mode 100644 index 0000000..89c5a4f --- /dev/null +++ b/Languages/Korean/DefInjected/RitualBehaviorDefs/Translations_RitualBehaviorDefs.xml @@ -0,0 +1,9 @@ + + + 개시자 + 희생양 + 개시자 + 번식대상 + 번식동물 + + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml b/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml index 7f07cf6..9747894 100644 --- a/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml +++ b/Languages/Korean/DefInjected/RitualOutcomeEffectDefs/Translations_RitualOutcomeEffectDefs.xml @@ -1,9 +1,25 @@  + 의식의 품질에 따라, 참여자들은 {MINMOOD} ~ {MAXMOOD} 기분을 {MOODDAYS}일동안 얻게 됩니다. + 만약 {0}이 훌륭히 진행된다면 참여자중 한명이 영감을 얻을 수 있습니다. 제단에서 시작 희생양 무너짐 - 제단에서 시작 - 제단에서 시작 - 제단에서 시작 + 희생양 극도로 무너짐 + 희생양 완전히 무너짐 + 만족한 참가자 + 끔찍한 + 지루한 + 즐거운 + 인상적인 + 의식의 품질에 따라, 참여자들은 {MINMOOD} ~ {MAXMOOD} 기분을 {MOODDAYS}일동안 얻게 됩니다. + 만약 {0}이 훌륭히 진행된다면 참여자중 한명이 영감을 얻을 수 있습니다. + 제단에서 시작 + 교배대상 무너짐 + 교배대상 극도로 무너짐 + 교배대상 완전히 무너짐 + 끔찍한 + 지루한 + 즐거운 + 인상적인 \ No newline at end of file diff --git a/Languages/Korean/DefInjected/RitualPatternDefs/Translations_RitualPatternDefs.xml b/Languages/Korean/DefInjected/RitualPatternDefs/Translations_RitualPatternDefs.xml new file mode 100644 index 0000000..6658d61 --- /dev/null +++ b/Languages/Korean/DefInjected/RitualPatternDefs/Translations_RitualPatternDefs.xml @@ -0,0 +1,8 @@ + + + 윤간 + 의례적 윤간입니다. 지도자가 연설을 한 후, 희생양을 강간합니다. 지도자가 희생양을 강간하지 못하면 취소됩니다. + 동물에 의한 윤간 + 동물들을 이용한 의례적 윤간입니다. 지도자가 연설을 마치면, 동물들이 교배대상을 윤간합니다. + + \ No newline at end of file diff --git a/Languages/Korean/Keyed/RJW_Sexperience.xml b/Languages/Korean/Keyed/RJW_Sexperience.xml index 1c469a2..a542592 100644 --- a/Languages/Korean/Keyed/RJW_Sexperience.xml +++ b/Languages/Korean/Keyed/RJW_Sexperience.xml @@ -1,11 +1,16 @@  - RJW Sexperience + RJW Sexperience 음란함: x{0}% 노예: x{0}% 노예가 아님: x100% 문화 요소: x{0}% + 노예, 죄수, 순종적인 성별만 가능합니다. + 부적절한 동물: 번식할수 없거나 규율에의해 금지된 동물입니다. + 사람이 아님 + 동물이 아님 + 성관계가 가능해야 합니다. 기록 생성기 활성화 폰의 섹스기록을 무작위로 생성합니다. @@ -21,12 +26,6 @@ 평균 섹스 횟수를 설정합니다. 노예 강간 경험 활성화 활성화할 경우 노예는 강간당한 경험을 가집니다. - - - - - - - - + 음란함 한계 + 음란함의 한계치를 설정합니다. 음란함의 절대값이 이 값에 가까워지거나 클수록, 음란함이 적게 변합니다. \ No newline at end of file diff --git a/Patches/RJW_ThoughtDefsDeath.xml b/Patches/RJW_ThoughtDefsDeath.xml new file mode 100644 index 0000000..48ff471 --- /dev/null +++ b/Patches/RJW_ThoughtDefsDeath.xml @@ -0,0 +1,68 @@ + + + + + Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
  • SocialAffection_Small
  • +
    +
    +
    + + Defs/ThoughtDef[defName="MyKinDied" or defName="MyCousinDied" or defName="MyGrandparentDied" or defName="MyUncleDied" or defName="MyAuntDied" or defName="MyHalfSiblingDied" or defName="MyNephewDied" or defName="MyNieceDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied" or defName="MyHalfSiblingDied"]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
  • SocialAffection_Small
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" ]/nullifyingPrecepts + + Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" ] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
    +
    +
    + + Defs/ThoughtDef[defName="MyMotherDied" or defName="MyFatherDied" or defName="MyGrandchildDied" or defName="MySisterDied" or defName="MyBrotherDied" or defName="MyDaughterDied" or defName="MySonDied" or defName="WitnessedDeathFamily" ]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_OnlyFamily
  • +
    +
    +
    + + Defs/ThoughtDef[defName="KnowGuestExecuted" or defName="KnowColonistExecuted" or defName="KnowPrisonerDiedInnocent" or defName="KnowColonistDied" or defName="PawnWithGoodOpinionDied" or defName="PawnWithBadOpinionDied" or defName="WitnessedDeathAlly" or defName="WitnessedDeathNonAlly" or defName="ColonistBanishedToDie" or defName="PrisonerBanishedToDie" or defName="ColonistBanishedToDie" or defName="ColonistLeftUnburied"]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_OnlyFamily
  • +
    +
    +
    + + + +
    \ No newline at end of file diff --git a/Patches/RJW_ThoughtDefsLost.xml b/Patches/RJW_ThoughtDefsLost.xml new file mode 100644 index 0000000..43dd8fb --- /dev/null +++ b/Patches/RJW_ThoughtDefsLost.xml @@ -0,0 +1,68 @@ + + + + + Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
  • SocialAffection_Small
  • +
    +
    +
    + + Defs/ThoughtDef[defName="MyKinLost" or defName="MyCousinLost" or defName="MyGrandparentLost" or defName="MyUncleLost" or defName="MyAuntLost" or defName="MyHalfSiblingLost" or defName="MyNephewLost" or defName="MyNieceLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost" or defName="MyHalfSiblingLost"]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
  • SocialAffection_Small
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
    +
    +
    + + Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_Dry
  • +
    +
    +
    + + + Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts + + Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"] + + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_OnlyFamily
  • +
    +
    +
    + + Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts + +
  • SocialAffection_Psychopath
  • +
  • SocialAffection_OnlyFamily
  • +
    +
    +
    + + + +
    \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/Configurations.cs b/RJWSexperience/RJWSexperience/Configurations.cs index bcc8940..1cf08bf 100644 --- a/RJWSexperience/RJWSexperience/Configurations.cs +++ b/RJWSexperience/RJWSexperience/Configurations.cs @@ -21,6 +21,7 @@ namespace RJWSexperience public const float SexPerYearDefault = 30; public const bool SlavesBeenRapedExpDefault = true; public const bool EnableStatRandomizerDefault = true; + public const float LustLimitDefault = 500f/3f; public static float MaxLustDeviation = MaxInitialLustDefault; public static float AvgLust = AvgLustDefault; @@ -29,6 +30,7 @@ namespace RJWSexperience public static float SexPerYear = SexPerYearDefault; public static bool SlavesBeenRapedExp = SlavesBeenRapedExpDefault; public static bool EnableRecordRandomizer = EnableStatRandomizerDefault; + public static float LustLimit = LustLimitDefault; public static void ResettoDefault() { @@ -39,19 +41,19 @@ namespace RJWSexperience SexPerYear = SexPerYearDefault; SlavesBeenRapedExp = SlavesBeenRapedExpDefault; EnableRecordRandomizer = EnableStatRandomizerDefault; + LustLimit = LustLimitDefault; } public override void ExposeData() { - Scribe_Values.Look(ref MaxLustDeviation, "MaxLustDeviation", MaxLustDeviation); - Scribe_Values.Look(ref AvgLust, "AvgLust", AvgLust); - Scribe_Values.Look(ref MaxSexCountDeviation, "MaxSexCountDeviation", MaxSexCountDeviation); - Scribe_Values.Look(ref LustEffectPower, "LustEffectPower", LustEffectPower); - Scribe_Values.Look(ref SexPerYear, "SexPerYear", SexPerYear); - Scribe_Values.Look(ref SlavesBeenRapedExp, "SlavesBeenRapedExp", SlavesBeenRapedExp); - Scribe_Values.Look(ref EnableRecordRandomizer, "EnableRecordRandomizer", EnableRecordRandomizer); - - + Scribe_Values.Look(ref MaxLustDeviation, "MaxLustDeviation", MaxLustDeviation, true); + Scribe_Values.Look(ref AvgLust, "AvgLust", AvgLust, true); + Scribe_Values.Look(ref MaxSexCountDeviation, "MaxSexCountDeviation", MaxSexCountDeviation, true); + Scribe_Values.Look(ref LustEffectPower, "LustEffectPower", LustEffectPower, true); + Scribe_Values.Look(ref SexPerYear, "SexPerYear", SexPerYear, true); + Scribe_Values.Look(ref SlavesBeenRapedExp, "SlavesBeenRapedExp", SlavesBeenRapedExp, true); + Scribe_Values.Look(ref EnableRecordRandomizer, "EnableRecordRandomizer", EnableRecordRandomizer, true); + Scribe_Values.Look(ref LustLimit, "LustLimit", LustLimit, true); base.ExposeData(); } } @@ -74,6 +76,7 @@ namespace RJWSexperience public override void DoSettingsWindowContents(Rect inRect) { int Adjuster; + float fAdjuster; Rect outRect = new Rect(0f, 30f, inRect.width, inRect.height - 30f); Rect mainRect = new Rect(0f, 0f, inRect.width - 30f, inRect.height + 480f); Listing_Standard listmain = new Listing_Standard(); @@ -82,16 +85,23 @@ namespace RJWSexperience listmain.Begin(mainRect); listmain.Gap(20f); + + LabelwithTextfield(listmain.GetRect(24f), Keyed.Option_2_Label + " x" + Configurations.LustEffectPower, Keyed.Option_2_Desc, ref Configurations.LustEffectPower, 0f, 100f); + Adjuster = (int)(Configurations.LustEffectPower * 1000); + //listmain.Label(Keyed.Option_2_Label + " x" + Configurations.LustEffectPower , -1, Keyed.Option_2_Desc); + Adjuster = (int)listmain.Slider(Adjuster, 0, 2000); + Configurations.LustEffectPower = (float)Adjuster / 1000; + + fAdjuster = Configurations.LustLimit * 3; + LabelwithTextfield(listmain.GetRect(24f), Keyed.Option_8_Label + " " + fAdjuster, Keyed.Option_8_Desc, ref fAdjuster, 0, 10000f); + fAdjuster = (int)listmain.Slider(fAdjuster, 0, 1000); + Configurations.LustLimit = fAdjuster / 3; + listmain.CheckboxLabeled(Keyed.Option_1_Label, ref Configurations.EnableRecordRandomizer, Keyed.Option_1_Desc); if (Configurations.EnableRecordRandomizer) { - Listing_Standard section = listmain.BeginSection(24f*11f); + Listing_Standard section = listmain.BeginSection(24f*9f); - LabelwithTextfield(section.GetRect(24f), Keyed.Option_2_Label + " x" + Configurations.LustEffectPower, Keyed.Option_2_Desc, ref Configurations.LustEffectPower, 0f, 100f); - Adjuster = (int)(Configurations.LustEffectPower * 1000); - //listmain.Label(Keyed.Option_2_Label + " x" + Configurations.LustEffectPower , -1, Keyed.Option_2_Desc); - Adjuster = (int)section.Slider(Adjuster, 0, 2000); - Configurations.LustEffectPower = (float)Adjuster / 1000; LabelwithTextfield(section.GetRect(24f), Keyed.Option_3_Label + " " + Configurations.MaxLustDeviation, Keyed.Option_3_Label, ref Configurations.MaxLustDeviation, 0f, 2000f); Adjuster = (int)Configurations.MaxLustDeviation; @@ -105,6 +115,7 @@ namespace RJWSexperience Adjuster = (int)section.Slider(Adjuster, -1000, 1000); Configurations.AvgLust = Adjuster; + LabelwithTextfield(section.GetRect(24f), Keyed.Option_5_Label + " " + Configurations.MaxSexCountDeviation, Keyed.Option_5_Desc, ref Configurations.MaxSexCountDeviation, 0f, 2000f); Adjuster = (int)Configurations.MaxSexCountDeviation; //listmain.Label(Keyed.Option_5_Label + " " + Configurations.MaxSexCountDeviation, -1, Keyed.Option_5_Desc); diff --git a/RJWSexperience/RJWSexperience/DebugAction.cs b/RJWSexperience/RJWSexperience/DebugAction.cs new file mode 100644 index 0000000..f2610aa --- /dev/null +++ b/RJWSexperience/RJWSexperience/DebugAction.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using rjw; + +namespace RJWSexperience +{ + public static class DebugToolsSexperience + { + [DebugAction("RJW Sexperience", "Reset lust", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void ResetLust(Pawn p) + { + float lust; + if (xxx.is_nympho(p)) lust = p.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, 0); + else lust = p.RecordRandomizer(VariousDefOf.Lust, Configurations.AvgLust, Configurations.MaxLustDeviation, float.MinValue); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Lust: " + lust); + } + + [DebugAction("RJW Sexperience", "Set lust to 0", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void SetLust(Pawn p) + { + p.records.SetTo(VariousDefOf.Lust, 0); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Lust: 0"); + } + + + [DebugAction("RJW Sexperience", "Add 10 to lust", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void AddLust(Pawn p) + { + p.records.AddTo(VariousDefOf.Lust, 10); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Lust: " + p.records.GetValue(VariousDefOf.Lust)); + } + + [DebugAction("RJW Sexperience", "Subtract 10 to lust", false, false, actionType = DebugActionType.ToolMapForPawns, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void SubtractLust(Pawn p) + { + p.records.AddTo(VariousDefOf.Lust, -10); + MoteMaker.ThrowText(p.TrueCenter(), p.Map, "Lust: " + p.records.GetValue(VariousDefOf.Lust)); + } + + } +} diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs index 38013f1..70b3e9e 100644 --- a/RJWSexperience/RJWSexperience/Keyed.cs +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -17,6 +17,12 @@ namespace RJWSexperience public static readonly string Mod_Title = "RS_Mod_Title".Translate(); public static readonly string SlaveStatFactorDefault = "SlaveStatFactorDefault".Translate(); + public static readonly string RSVictimCondition = "RSVictimCondition".Translate(); + public static readonly string RSBreederCondition = "RSBreederCondition".Translate(); + public static readonly string RSNotHuman = "RSNotHuman".Translate(); + public static readonly string RSNotAnimal = "RSNotAnimal".Translate(); + public static readonly string RSShouldCanFuck = "RSShouldCanFuck".Translate(); + public static readonly string Option_1_Label = "RSOption_1_Label".Translate(); public static readonly string Option_1_Desc = "RSOption_1_Desc".Translate(); diff --git a/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs b/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs new file mode 100644 index 0000000..64256e1 --- /dev/null +++ b/RJWSexperience/RJWSexperience/PawnRelationWorkers.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using rjw; + + +namespace RJWSexperience +{ + public class PawnRelationWorker_Bastard : PawnRelationWorker_Child + { + public override bool InRelation(Pawn me, Pawn other) + { + Pawn mother = other.GetMother(); + Pawn father = other.GetFather(); + + if (me != other && (mother == me || father == me)) + { + //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) return true; + //if (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true) return true; + return (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.Spouse, father) ?? true) || (!mother?.relations?.DirectRelationExists(PawnRelationDefOf.ExSpouse, father) ?? true); + } + + return false; + } + + + } +} diff --git a/RJWSexperience/RJWSexperience/RJWSexperience.csproj b/RJWSexperience/RJWSexperience/RJWSexperience.csproj index c338c17..c108fca 100644 --- a/RJWSexperience/RJWSexperience/RJWSexperience.csproj +++ b/RJWSexperience/RJWSexperience/RJWSexperience.csproj @@ -78,8 +78,10 @@ + + diff --git a/RJWSexperience/RJWSexperience/RJW_Patch.cs b/RJWSexperience/RJWSexperience/RJW_Patch.cs index 10ab7a5..8a377db 100644 --- a/RJWSexperience/RJWSexperience/RJW_Patch.cs +++ b/RJWSexperience/RJWSexperience/RJW_Patch.cs @@ -7,6 +7,7 @@ using HarmonyLib; using rjw; using RimWorld; using Verse; +using UnityEngine; namespace RJWSexperience @@ -15,7 +16,7 @@ namespace RJWSexperience { public static float GetSexStat(this Pawn pawn) { - if (xxx.is_human(pawn)) + if (xxx.is_human(pawn) && !pawn.Dead) { return pawn.GetStatValue(xxx.sex_stat); } @@ -27,6 +28,32 @@ namespace RJWSexperience return new HistoryEvent(def, pawn.Named(HistoryEventArgsNames.Doer), tag.Named(HistoryEventArgsNamesCustom.Tag), partner.Named(HistoryEventArgsNamesCustom.Partner)); } + public static Faction GetFactionUsingPrecept(this Pawn baby, out Ideo ideo) + { + Faction playerfaction = Find.FactionManager.OfPlayer; + Ideo mainideo = playerfaction.ideos.PrimaryIdeo; + if (mainideo != null) + { + if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysFather)) + { + Pawn parent = baby.GetFather(); + if (parent == null) baby.GetMother(); + + ideo = parent.Ideo; + return parent.Faction; + } + else if (mainideo.HasPrecept(VariousDefOf.BabyFaction_AlwaysColony)) + { + ideo = mainideo; + return playerfaction; + } + } + Pawn mother = baby.GetMother(); + ideo = mother.Ideo; + return mother.Faction; + } + + } @@ -81,17 +108,23 @@ namespace RJWSexperience [HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")] public static class RJW_Patch_SatisfyPersonal_Post { - private const float base_sat_per_fuck = 0.3f; + private const float base_sat_per_fuck = 0.4f; 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. + if (sextype != xxx.rjwSextype.Masturbation) pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp((satisfaction - base_sat_per_fuck) * LustIncrementFactor(lust ?? 0),-0.5f,0.5f)); // If the sex is satisfactory, lust grows up. Declines at the opposite. + else pawn.records.AddTo(VariousDefOf.Lust, Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor(lust ?? 0), 0,0.5f)); // Masturbation always increases lust. } } + + public static float LustIncrementFactor(float lust) + { + return Mathf.Exp(-Mathf.Pow(lust / Configurations.LustLimit, 2)); + } + } [HarmonyPatch(typeof(ThinkNode_ChancePerHour_Bestiality), "MtbHours")] @@ -100,7 +133,7 @@ namespace RJWSexperience 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 + if (ideo != null) __result *= BestialityByPrecept(ideo); // ideo is null if don't have dlc } public static float BestialityByPrecept(Ideo ideo) @@ -403,6 +436,7 @@ namespace RJWSexperience } } + } } @@ -421,7 +455,20 @@ namespace RJWSexperience } } - + [HarmonyPatch(typeof(Hediff_BasePregnancy), "PostBirth")] + public static class RJW_Patch_PostBirth + { + public static void Postfix(Pawn mother, Pawn father, Pawn baby) + { + if (!mother.IsAnimal()) + { + //baby.SetFactionDirect(baby.GetFactionUsingPrecept()); + baby.SetFaction(baby.GetFactionUsingPrecept(out Ideo ideo)); + baby.ideo.SetIdeo(ideo); + if (baby.Faction == Find.FactionManager.OfPlayer && !baby.IsSlave) baby.guest.SetGuestStatus(null, GuestStatus.Guest); + } + } + } diff --git a/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs index bc3daa7..2797957 100644 --- a/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs +++ b/RJWSexperience/RJWSexperience/Rituals/RitualRoles.cs @@ -23,14 +23,13 @@ namespace RJWSexperience if (CanBeVictim(p)) return true; if (!skipReason) { - reason = "slave, prisoner, submissive gender only"; + reason = Keyed.RSVictimCondition; } return false; } public static bool CanBeVictim(Pawn pawn) { - if (pawn.IsPrisonerOfColony || pawn.IsSlaveOfColony) return true; if (pawn.Ideo?.HasMeme(MemeDefOf.FemaleSupremacy) ?? false && pawn.gender != Gender.Female) return true; else if (pawn.Ideo?.HasMeme(MemeDefOf.MaleSupremacy) ?? false && pawn.gender != Gender.Male) return true; @@ -52,13 +51,13 @@ namespace RJWSexperience reason = null; if (!xxx.is_human(p)) { - reason = "not human"; + reason = Keyed.RSNotHuman; return false; } if (CanBeBreedee(p)) return true; if (!skipReason) { - reason = "capable of sex is required"; + reason = Keyed.RSShouldCanFuck; } return false; } @@ -85,13 +84,13 @@ namespace RJWSexperience reason = null; if (!p.IsAnimal()) { - reason = "not animal"; + reason = Keyed.RSNotAnimal; return false; } if (CanBeBreeder(p, assignments?.Ritual)) return true; if (!skipReason) { - reason = "improper animal: cannot breed or forbidden by precepts"; + reason = Keyed.RSBreederCondition; } return false; } diff --git a/RJWSexperience/RJWSexperience/Utility.cs b/RJWSexperience/RJWSexperience/Utility.cs index 22aeab3..1f9b95c 100644 --- a/RJWSexperience/RJWSexperience/Utility.cs +++ b/RJWSexperience/RJWSexperience/Utility.cs @@ -74,11 +74,14 @@ namespace RJWSexperience float lust = pawn.records.GetValue(VariousDefOf.Lust) * Configurations.LustEffectPower; if (lust < 0) { - lust = (float)Math.Exp((lust + 200 * Math.Log(10)) / 100) - 100f; + lust = Mathf.Exp((lust + 200f * Mathf.Log(10f)) / 100f) - 100f; } - - - return 1 + lust / 100; + else + { + lust = Mathf.Sqrt(100f*(lust + 25f)) - 50f; + } + + return 1 + lust / 100f; } } diff --git a/RJWSexperience/RJWSexperience/VariousDefOf.cs b/RJWSexperience/RJWSexperience/VariousDefOf.cs index d6c341f..ae17038 100644 --- a/RJWSexperience/RJWSexperience/VariousDefOf.cs +++ b/RJWSexperience/RJWSexperience/VariousDefOf.cs @@ -53,5 +53,8 @@ namespace RJWSexperience [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"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase.GetNamed("BabyFaction_AlwaysMother"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase.GetNamed("BabyFaction_AlwaysFather"); + [MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase.GetNamed("BabyFaction_AlwaysColony"); } } diff --git a/Textures/UI/Issues/SocialAffection.png b/Textures/UI/Issues/SocialAffection.png new file mode 100644 index 0000000..b8304da Binary files /dev/null and b/Textures/UI/Issues/SocialAffection.png differ diff --git a/changelogs.txt b/changelogs.txt index f4e6afd..fe2a156 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -1,10 +1,20 @@ -Version Beta 1.0.1.6 +Version Beta 1.0.1.7 + - added baby faction and social affection precepts - changed stat calculation of lust - - on negative lust, use exponential function instead of linear - - added gangbang rituals - - chance of bestiality with non-venerated animal on only venerated precept reduced greatly - - added submissive precepts - - added mod settings + - added lust limit + - added debug actions for reset lust + - fixed mod setting was not saved + - fixed bestiality chance + - fixed errors when fuck corpse + - added bastard relation(nothing special yet) + +Version Beta 1.0.1.6 + - changed stat calculation of lust + - on negative lust, use exponential function instead of linear + - added gangbang rituals + - chance of bestiality with non-venerated animal on only venerated precept reduced greatly + - added submissive precepts + - added mod settings Version Beta 1.0.1.5 - changed icon for precepts and memes