This commit is contained in:
moreoreganostodump 2021-08-07 02:19:42 +09:00
parent 1326f8bd20
commit 5f9ab6d62a
27 changed files with 567 additions and 79 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
<identifier>RJW Sexperience</identifier>
<version>1.0.1.6</version>
<version>1.0.1.7</version>
<dependencies>
</dependencies>
<incompatibleWith />

Binary file not shown.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<PawnRelationDef>
<workerClass>RJWSexperience.PawnRelationWorker_Bastard</workerClass>
<defName>Bastard</defName>
<label>bastard</label>
<labelFemale>bastard</labelFemale>
<importance>185</importance>
<opinionOffset>-10</opinionOffset>
<generationChanceFactor>0.0</generationChanceFactor>
<implied>true</implied>
<familyByBloodRelation>true</familyByBloodRelation>
</PawnRelationDef>
</Defs>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>BabyFaction</defName>
<label>baby faction</label>
<iconPath>UI/Issues/Birth</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>BabyFaction_AlwaysMother</defName>
<issue>BabyFaction</issue>
<label>always mother(default)</label>
<description>New born babies always follow mother's faction and ideology.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>BabyFaction_AlwaysFather</defName>
<issue>BabyFaction</issue>
<label>always father</label>
<description>New born babies always follow father's faction and ideology(if exists).</description>
<impact>Low</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>BabyFaction_AlwaysColony</defName>
<issue>BabyFaction</issue>
<label>always colony</label>
<description>New born babies are always player's faction and ideology.</description>
<impact>Low</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- Issues -->
<IssueDef>
<defName>SocialAffection</defName>
<label>social affection</label>
<iconPath>UI/Issues/SocialAffection</iconPath>
</IssueDef>
<!-- Precepts -->
<PreceptDef>
<defName>SocialAffection_Normal</defName>
<issue>SocialAffection</issue>
<label>normal(vanilla)</label>
<description>Just normal.</description>
<impact>Low</impact>
<displayOrderInIssue>50</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Small</defName>
<issue>SocialAffection</issue>
<label>only immediate family</label>
<description>Care about only immediate family.</description>
<impact>Medium</impact>
<displayOrderInIssue>40</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_OnlyFamily</defName>
<issue>SocialAffection</issue>
<label>only family</label>
<description>Don't care about non-family memeber's tragedy.</description>
<impact>Medium</impact>
<displayOrderInIssue>30</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Dry</defName>
<issue>SocialAffection</issue>
<label>not family</label>
<description>Don't care about family memeber's tragedy.</description>
<impact>High</impact>
<displayOrderInIssue>20</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
<PreceptDef>
<defName>SocialAffection_Psychopath</defName>
<issue>SocialAffection</issue>
<label>Psychopath</label>
<description>Don't care about others.</description>
<impact>High</impact>
<displayOrderInIssue>10</displayOrderInIssue>
<displayOrderInImpact>1000</displayOrderInImpact>
</PreceptDef>
</Defs>

View File

@ -14,7 +14,7 @@
<defName>Gangbang</defName>
<ritualBehavior>Gangbang</ritualBehavior>
<shortDescOverride>gangbang</shortDescOverride>
<descOverride>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.</descOverride>
<descOverride>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.</descOverride>
<iconPathOverride>UI/Issues/Gangbang</iconPathOverride>
<ritualOnlyForIdeoMembers>false</ritualOnlyForIdeoMembers>
<patternGroupTag/>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<IdeoPresetDef>
<defName>Animal_Breeders</defName>
<label>animal breeders</label>
<description>Animals are our better half.</description>
<categoryDef>Intense</categoryDef>
<memes>
<li>AnimalPersonhood</li>
<li>Zoophile</li>
</memes>
</IdeoPresetDef>
<IdeoPresetDef>
<defName>Savage_Rapist_Brigands</defName>
<label>savage rapist brigands</label>
<description>All of them are ours.</description>
<categoryDef>Intense</categoryDef>
<memes>
<li>Rapist</li>
<li>Nudism</li>
<li>Raider</li>
</memes>
</IdeoPresetDef>
<IdeoPresetDef>
<defName>Hentai_Tribe</defName>
<label>hentai tribe</label>
<categoryDef>Intense</categoryDef>
<description>Impregnate.</description>
<memes>
<li>MaleSupremacy</li>
<li>Rapist</li>
</memes>
</IdeoPresetDef>
</Defs>

View File

@ -147,7 +147,7 @@
<id>animal</id>
<maxCount>10</maxCount>
<required>True</required>
<missingDesc>a breedable animal.</missingDesc>
<missingDesc>a breedable animal</missingDesc>
<countsAsParticipant>false</countsAsParticipant>
</li>
</roles>

View File

@ -6,6 +6,11 @@
<SlaveStatFactor>Slave: x{0}%</SlaveStatFactor>
<SlaveStatFactorDefault>Not Slave: x100%</SlaveStatFactorDefault>
<MemeStatFactor>Meme: x{0}%</MemeStatFactor>
<RSVictimCondition>slave, prisoner, submissive gender only</RSVictimCondition>
<RSBreederCondition>improper animal: cannot breed or forbidden by precepts</RSBreederCondition>
<RSNotHuman>not human</RSNotHuman>
<RSNotAnimal>not animal</RSNotAnimal>
<RSShouldCanFuck>capable of sex is required</RSShouldCanFuck>
<RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
<RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>
@ -21,8 +26,8 @@
<RSOption_6_Desc>Set average sex count.</RSOption_6_Desc>
<RSOption_7_Label>Enable slaves get raped experience</RSOption_7_Label>
<RSOption_7_Desc>Slaves will have experience of being raped</RSOption_7_Desc>
<RSOption_8_Label></RSOption_8_Label>
<RSOption_8_Desc> </RSOption_8_Desc>
<RSOption_8_Label>Lust Limit</RSOption_8_Label>
<RSOption_8_Desc>Set limitation of lust.&#10;If absolute value of lust close to or larger than this value, lust will be less likely to change.</RSOption_8_Desc>
<RSOption_9_Label></RSOption_9_Label>
<RSOption_9_Desc> </RSOption_9_Desc>
<RSOption_10_Label></RSOption_10_Label>

View File

@ -2,20 +2,20 @@
<LanguageData>
<Zoophile.label>수간</Zoophile.label>
<Zoophile.description>동물박이들</Zoophile.description>
<Zoophile.descriptionMaker.rules.rulesStrings.0>creation(tag=meme_Zoophile) ->[deity0_name]는 동물과 교미하는것을 즐겼습니다.</Zoophile.descriptionMaker.rules.rulesStrings.0>
<Zoophile.descriptionMaker.rules.rulesStrings.1>episode(uses=1,tag=meme_Zoophile) ->[deity0_name]는 모두에게 말했습니다, "Sigmar forbids this!"</Zoophile.descriptionMaker.rules.rulesStrings.1>
<Zoophile.descriptionMaker.rules.rulesStrings.2>setup(tag=meme_Zoophile) ->어느날, [founderName]은(는) 너무 발정이나서 동물을 따먹었고 그것을 좋아하게 되었습니다.</Zoophile.descriptionMaker.rules.rulesStrings.2>
<Zoophile.descriptionMaker.rules.rulesStrings.3>story(uses=1,tag=meme_Zoophile) ->동물들을 퍼뜨리기 위해, [founderName]은(는) 동물과 교미하고 다니기 시작했습니다.</Zoophile.descriptionMaker.rules.rulesStrings.3>
<Zoophile.descriptionMaker.rules.rulesStrings.4>lessonIntro(tag=meme_Zoophile) ->어느날, 나는 동물과 섹스했습니다. 그리고 사람보다 훨씬 나았습니다!</Zoophile.descriptionMaker.rules.rulesStrings.4>
<Zoophile.descriptionMaker.rules.rulesStrings.5>lesson(tag=meme_Zoophile) ->오직 동물만 나를 만족시킬수 있습니다.</Zoophile.descriptionMaker.rules.rulesStrings.5>
<Zoophile.descriptionMaker.rules.rulesStrings.6>lessonReinforcement(tag=meme_Zoophile) ->동물과 교미하는것은 영원한 행복입니다.</Zoophile.descriptionMaker.rules.rulesStrings.6>
<Zoophile.descriptionMaker.rules.rulesStrings.7>archistBasis(tag=meme_Zoophile) ->초월주의자들은 항상 궁극의 쾌락을 찾고 있었습니다.</Zoophile.descriptionMaker.rules.rulesStrings.7>
<Zoophile.descriptionMaker.rules.rulesStrings.8>archistFact(tag=meme_Zoophile) ->그것은 동물과 교미하는 것이었습니..</Zoophile.descriptionMaker.rules.rulesStrings.8>
<Zoophile.descriptionMaker.rules.rulesStrings.9>archistProphecy(tag=meme_Zoophile) ->[inTheEnd], 초월공학은 이종간 번식을 가능하게 했습니다. 이것이 그들을 궁극의 쾌락으로 인도할지도 모릅니다.</Zoophile.descriptionMaker.rules.rulesStrings.9>
<Zoophile.descriptionMaker.rules.rulesStrings.10>animistFact(tag=meme_Zoophile) ->가장 강력한 영혼은 짐승의 것입니다, 그리고 짐승의 영혼은 짐승에게 지배받지 않는 한 날뛸것입니다.</Zoophile.descriptionMaker.rules.rulesStrings.10>
<Zoophile.descriptionMaker.rules.rulesStrings.11>animistProphecy(tag=meme_Zoophile) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것입니다. 하지만 인간에게서 태어난 짐승이 [relic0_name]의 힘을 사용하여 파괴자를 파괴할 것입니다.</Zoophile.descriptionMaker.rules.rulesStrings.11>
<Zoophile.generalRules.rulesStrings.0>memeAdjective->수간</Zoophile.generalRules.rulesStrings.0>
<Zoophile.generalRules.rulesStrings.1>memeAdjective->수간</Zoophile.generalRules.rulesStrings.1>
<Zoophile.descriptionMaker.rules.rulesStrings.0>creation(tag=meme_Zoophile) ->[deity0_name]께서는 동물과 교미하는것을 즐기셨느니라.</Zoophile.descriptionMaker.rules.rulesStrings.0>
<Zoophile.descriptionMaker.rules.rulesStrings.1>episode(uses=1,tag=meme_Zoophile) ->[deity0_name]께서 모두에게 이르노니, "Sigmar forbids this!"</Zoophile.descriptionMaker.rules.rulesStrings.1>
<Zoophile.descriptionMaker.rules.rulesStrings.2>setup(tag=meme_Zoophile) ->어느날, [founderName]께서는 너무 발정이나서 동물을 따먹으셨고 그것을 좋아하게 되셨다.</Zoophile.descriptionMaker.rules.rulesStrings.2>
<Zoophile.descriptionMaker.rules.rulesStrings.3>story(uses=1,tag=meme_Zoophile) ->동물들을 퍼뜨리기 위해, [founderName]께서는 동물과 교미하고 다니기 시작하셨다.</Zoophile.descriptionMaker.rules.rulesStrings.3>
<Zoophile.descriptionMaker.rules.rulesStrings.4>lessonIntro(tag=meme_Zoophile) ->어느날, 나는 동물과 섹스했다. 그리고 그건 사람보다 훨씬 좋았다!</Zoophile.descriptionMaker.rules.rulesStrings.4>
<Zoophile.descriptionMaker.rules.rulesStrings.5>lesson(tag=meme_Zoophile) ->오직 동물만 나를 만족시킬수 있을것이다.</Zoophile.descriptionMaker.rules.rulesStrings.5>
<Zoophile.descriptionMaker.rules.rulesStrings.6>lessonReinforcement(tag=meme_Zoophile) ->동물과 교미하는것은 영원한 행복다.</Zoophile.descriptionMaker.rules.rulesStrings.6>
<Zoophile.descriptionMaker.rules.rulesStrings.7>archistBasis(tag=meme_Zoophile) ->초월은 궁극의 쾌락이다.</Zoophile.descriptionMaker.rules.rulesStrings.7>
<Zoophile.descriptionMaker.rules.rulesStrings.8>archistFact(tag=meme_Zoophile) ->그것은 동물과 교미하는 것이다.</Zoophile.descriptionMaker.rules.rulesStrings.8>
<Zoophile.descriptionMaker.rules.rulesStrings.9>archistProphecy(tag=meme_Zoophile) ->[inTheEnd], 초월공학은 이종간 번식을 가능하게 했다. 이것이 그들을 궁극의 쾌락으로 인도할 수 있을것이다.</Zoophile.descriptionMaker.rules.rulesStrings.9>
<Zoophile.descriptionMaker.rules.rulesStrings.10>animistFact(tag=meme_Zoophile) ->가장 강력한 영혼은 짐승의 것이다, 그리고 짐승의 영혼은 짐승에게 지배받지 않는 한 계속해서 날뛸것이다.</Zoophile.descriptionMaker.rules.rulesStrings.10>
<Zoophile.descriptionMaker.rules.rulesStrings.11>animistProphecy(tag=meme_Zoophile) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것다. 하지만 인간에게서 태어난 짐승이 [relic0_name]의 힘을 사용하여 파괴자를 파괴할 것다.</Zoophile.descriptionMaker.rules.rulesStrings.11>
<Zoophile.generalRules.rulesStrings.0>memeAdjective->수간하는</Zoophile.generalRules.rulesStrings.0>
<Zoophile.generalRules.rulesStrings.1>memeAdjective->수간</Zoophile.generalRules.rulesStrings.1>
<Zoophile.generalRules.rulesStrings.2>memeHyphenPrefix->수간</Zoophile.generalRules.rulesStrings.2>
<Zoophile.generalRules.rulesStrings.3>memeConcept->수태</Zoophile.generalRules.rulesStrings.3>
<Zoophile.generalRules.rulesStrings.4>memeConcept->수간</Zoophile.generalRules.rulesStrings.4>
@ -32,25 +32,25 @@
<Rapist.label>강간</Rapist.label>
<Rapist.description>강간은 최고야</Rapist.description>
<Rapist.descriptionMaker.rules.rulesStrings.0>creation(tag=meme_Rapist) ->[deity0_name]는 강간을 사랑합니다.</Rapist.descriptionMaker.rules.rulesStrings.0>
<Rapist.descriptionMaker.rules.rulesStrings.1>episode(uses=1,tag=meme_Rapist) ->[deity0_name]는 복상사 할때까지 강간하다 죽었습니다.</Rapist.descriptionMaker.rules.rulesStrings.1>
<Rapist.descriptionMaker.rules.rulesStrings.2>setup(tag=meme_Rapist) ->[founderName]은(는) 항상 발정나있습니다.</Rapist.descriptionMaker.rules.rulesStrings.2>
<Rapist.descriptionMaker.rules.rulesStrings.3>story(uses=1,tag=meme_Rapist) ->[founderName]은(는) 모두를 강간했습니다. 아무도 [founderName]을(를) 멈출수 없었습니다. [founderName]은(는) 행성을 강간하려다 죽었습니다.</Rapist.descriptionMaker.rules.rulesStrings.3>
<Rapist.descriptionMaker.rules.rulesStrings.0>creation(tag=meme_Rapist) ->[deity0_name]께서 강간을 사랑하시나니.</Rapist.descriptionMaker.rules.rulesStrings.0>
<Rapist.descriptionMaker.rules.rulesStrings.1>episode(uses=1,tag=meme_Rapist) ->[deity0_name]께서는 복상사 할때까지 강간하다 죽으셨느니라.</Rapist.descriptionMaker.rules.rulesStrings.1>
<Rapist.descriptionMaker.rules.rulesStrings.2>setup(tag=meme_Rapist) ->[founderName]께서는 항상 발정나있으셨다.</Rapist.descriptionMaker.rules.rulesStrings.2>
<Rapist.descriptionMaker.rules.rulesStrings.3>story(uses=1,tag=meme_Rapist) ->[founderName]께서는 모두를 강간하셨다. 아무도 [founderName]을(를) 멈출수 없었다. [founderName]께서는 행성을 강간하려다 죽으셨다.</Rapist.descriptionMaker.rules.rulesStrings.3>
<Rapist.descriptionMaker.rules.rulesStrings.4>lessonIntro(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야!</Rapist.descriptionMaker.rules.rulesStrings.4>
<Rapist.descriptionMaker.rules.rulesStrings.5>lesson(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야!</Rapist.descriptionMaker.rules.rulesStrings.5>
<Rapist.descriptionMaker.rules.rulesStrings.6>lessonReinforcement(tag=meme_Rapist) ->강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야! 강간은 최고야!</Rapist.descriptionMaker.rules.rulesStrings.6>
<Rapist.descriptionMaker.rules.rulesStrings.7>archistBasis(tag=meme_Rapist) ->인간의 역사는 강간의 역사입니다.</Rapist.descriptionMaker.rules.rulesStrings.7>
<Rapist.descriptionMaker.rules.rulesStrings.8>archistFact(tag=meme_Rapist) ->초월공학 조차도 강간범들을 막지는 못했습니다.</Rapist.descriptionMaker.rules.rulesStrings.8>
<Rapist.descriptionMaker.rules.rulesStrings.9>archistProphecy(tag=meme_Rapist) ->[inTheEnd], 강간범들은 절대 강간을 멈추지 않을겁니다.</Rapist.descriptionMaker.rules.rulesStrings.9>
<Rapist.descriptionMaker.rules.rulesStrings.10>animistFact(tag=meme_Rapist) ->가장 강력한 영혼을 가진 것은 강간범들입니다. 그리고 그들은 모두를 강간할것입니다.</Rapist.descriptionMaker.rules.rulesStrings.10>
<Rapist.descriptionMaker.rules.rulesStrings.11>animistProphecy(tag=meme_Rapist) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것입니다. 하지만 백만번을 강간한 강간범이 [relic0_name]의 힘을 사용하여 파괴자를 강간할 것입니다.</Rapist.descriptionMaker.rules.rulesStrings.11>
<Rapist.descriptionMaker.rules.rulesStrings.7>archistBasis(tag=meme_Rapist) ->인간의 역사는 강간의 역사다.</Rapist.descriptionMaker.rules.rulesStrings.7>
<Rapist.descriptionMaker.rules.rulesStrings.8>archistFact(tag=meme_Rapist) ->초월공학 조차도 강간범들을 막을수 없었다.</Rapist.descriptionMaker.rules.rulesStrings.8>
<Rapist.descriptionMaker.rules.rulesStrings.9>archistProphecy(tag=meme_Rapist) ->[inTheEnd], 강간범들은 절대 강간을 멈추지 않을것이다.</Rapist.descriptionMaker.rules.rulesStrings.9>
<Rapist.descriptionMaker.rules.rulesStrings.10>animistFact(tag=meme_Rapist) ->가장 강력한 영혼을 가진 것은 강간범들이다. 그리고 그들은 모두를 강간할것이다.</Rapist.descriptionMaker.rules.rulesStrings.10>
<Rapist.descriptionMaker.rules.rulesStrings.11>animistProphecy(tag=meme_Rapist) ->[itIsSaid] 그 강력한 파괴의 영혼은 우주의 파멸을 찾아다닐 것다. 하지만 백만번을 강간한 강간범이 [relic0_name]의 힘을 사용하여 파괴자를 강간할 것다.</Rapist.descriptionMaker.rules.rulesStrings.11>
<Rapist.generalRules.rulesStrings.0>memeAdjective->강간하는</Rapist.generalRules.rulesStrings.0>
<Rapist.generalRules.rulesStrings.1>memeAdjective->겁탈하는</Rapist.generalRules.rulesStrings.1>
<Rapist.generalRules.rulesStrings.2>memeHyphenPrefix->강간범</Rapist.generalRules.rulesStrings.2>
<Rapist.generalRules.rulesStrings.3>memeHyphenPrefix->치한</Rapist.generalRules.rulesStrings.3>
<Rapist.generalRules.rulesStrings.4>memeHyphenPrefix->변태</Rapist.generalRules.rulesStrings.4>
<Rapist.generalRules.rulesStrings.5>memeConcept->강간 </Rapist.generalRules.rulesStrings.5>
<Rapist.generalRules.rulesStrings.6>memeConcept->변태적인</Rapist.generalRules.rulesStrings.6>
<Rapist.generalRules.rulesStrings.5>memeConcept->강간</Rapist.generalRules.rulesStrings.5>
<Rapist.generalRules.rulesStrings.6>memeConcept->겁탈</Rapist.generalRules.rulesStrings.6>
<Rapist.generalRules.rulesStrings.7>memeGod->슬라네쉬</Rapist.generalRules.rulesStrings.7>
<Rapist.generalRules.rulesStrings.8>memeLeaderNoun->종마</Rapist.generalRules.rulesStrings.8>
<Rapist.generalRules.rulesStrings.9>memeLeaderNoun->위대한 강간범</Rapist.generalRules.rulesStrings.9>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<Gangbang.roles.0.label>개시자</Gangbang.roles.0.label>
<Gangbang.roles.1.label>희생양</Gangbang.roles.1.label>
<GangbangByAnimal.roles.0.label>개시자</GangbangByAnimal.roles.0.label>
<GangbangByAnimal.roles.1.label>번식대상</GangbangByAnimal.roles.1.label>
<GangbangByAnimal.roles.2.label>번식동물</GangbangByAnimal.roles.2.label>
</LanguageData>

View File

@ -1,9 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<Gangbang.description>의식의 품질에 따라, 참여자들은 {MINMOOD} ~ {MAXMOOD} 기분을 {MOODDAYS}일동안 얻게 됩니다.</Gangbang.description>
<Gangbang.extraPredictedOutcomeDescriptions.0>만약 {0}이 훌륭히 진행된다면 참여자중 한명이 영감을 얻을 수 있습니다.</Gangbang.extraPredictedOutcomeDescriptions.0>
<Gangbang.comps.2.label>제단에서 시작</Gangbang.comps.2.label>
<Gangbang.comps.3.label>희생양 무너짐</Gangbang.comps.3.label>
<Gangbang.comps.4.label>제단에서 시작</Gangbang.comps.4.label>
<Gangbang.comps.5.label>제단에서 시작</Gangbang.comps.5.label>
<Gangbang.comps.6.label>제단에서 시작</Gangbang.comps.6.label>
<Gangbang.comps.4.label>희생양 극도로 무너짐</Gangbang.comps.4.label>
<Gangbang.comps.5.label>희생양 완전히 무너짐</Gangbang.comps.5.label>
<Gangbang.comps.6.label>만족한 참가자</Gangbang.comps.6.label>
<Gangbang.outcomeChances.0.label>끔찍한</Gangbang.outcomeChances.0.label>
<Gangbang.outcomeChances.1.label>지루한</Gangbang.outcomeChances.1.label>
<Gangbang.outcomeChances.2.label>즐거운</Gangbang.outcomeChances.2.label>
<Gangbang.outcomeChances.3.label>인상적인</Gangbang.outcomeChances.3.label>
<BestialGangbang.description>의식의 품질에 따라, 참여자들은 {MINMOOD} ~ {MAXMOOD} 기분을 {MOODDAYS}일동안 얻게 됩니다.</BestialGangbang.description>
<BestialGangbang.extraPredictedOutcomeDescriptions.0>만약 {0}이 훌륭히 진행된다면 참여자중 한명이 영감을 얻을 수 있습니다.</BestialGangbang.extraPredictedOutcomeDescriptions.0>
<BestialGangbang.comps.2.label>제단에서 시작</BestialGangbang.comps.2.label>
<BestialGangbang.comps.3.label>교배대상 무너짐</BestialGangbang.comps.3.label>
<BestialGangbang.comps.4.label>교배대상 극도로 무너짐</BestialGangbang.comps.4.label>
<BestialGangbang.comps.5.label>교배대상 완전히 무너짐</BestialGangbang.comps.5.label>
<BestialGangbang.outcomeChances.0.label>끔찍한</BestialGangbang.outcomeChances.0.label>
<BestialGangbang.outcomeChances.1.label>지루한</BestialGangbang.outcomeChances.1.label>
<BestialGangbang.outcomeChances.2.label>즐거운</BestialGangbang.outcomeChances.2.label>
<BestialGangbang.outcomeChances.3.label>인상적인</BestialGangbang.outcomeChances.3.label>
</LanguageData>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<Gangbang.shortDescOverride>윤간</Gangbang.shortDescOverride>
<Gangbang.descOverride>의례적 윤간입니다. 지도자가 연설을 한 후, 희생양을 강간합니다. 지도자가 희생양을 강간하지 못하면 취소됩니다.</Gangbang.descOverride>
<GangbangByAnimal.shortDescOverride>동물에 의한 윤간</GangbangByAnimal.shortDescOverride>
<GangbangByAnimal.descOverride>동물들을 이용한 의례적 윤간입니다. 지도자가 연설을 마치면, 동물들이 교배대상을 윤간합니다.</GangbangByAnimal.descOverride>
</LanguageData>

View File

@ -1,11 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<Mod_Title>RJW Sexperience</Mod_Title>
<RS_Mod_Title>RJW Sexperience</RS_Mod_Title>
<LustStatFactor>음란함: x{0}%</LustStatFactor>
<SlaveStatFactor>노예: x{0}%</SlaveStatFactor>
<SlaveStatFactorDefault>노예가 아님: x100%</SlaveStatFactorDefault>
<MemeStatFactor>문화 요소: x{0}%</MemeStatFactor>
<RSVictimCondition>노예, 죄수, 순종적인 성별만 가능합니다.</RSVictimCondition>
<RSBreederCondition>부적절한 동물: 번식할수 없거나 규율에의해 금지된 동물입니다.</RSBreederCondition>
<RSNotHuman>사람이 아님</RSNotHuman>
<RSNotAnimal>동물이 아님</RSNotAnimal>
<RSShouldCanFuck>성관계가 가능해야 합니다.</RSShouldCanFuck>
<RSOption_1_Label>기록 생성기 활성화</RSOption_1_Label>
<RSOption_1_Desc>폰의 섹스기록을 무작위로 생성합니다.</RSOption_1_Desc>
@ -21,12 +26,6 @@
<RSOption_6_Desc>평균 섹스 횟수를 설정합니다.</RSOption_6_Desc>
<RSOption_7_Label>노예 강간 경험 활성화</RSOption_7_Label>
<RSOption_7_Desc>활성화할 경우 노예는 강간당한 경험을 가집니다.</RSOption_7_Desc>
<RSOption_8_Label></RSOption_8_Label>
<RSOption_8_Desc> </RSOption_8_Desc>
<RSOption_9_Label></RSOption_9_Label>
<RSOption_9_Desc> </RSOption_9_Desc>
<RSOption_10_Label></RSOption_10_Label>
<RSOption_10_Desc> </RSOption_10_Desc>
<RSOption_11_Label></RSOption_11_Label>
<RSOption_11_Desc> </RSOption_11_Desc>
<RSOption_8_Label>음란함 한계</RSOption_8_Label>
<RSOption_8_Desc>음란함의 한계치를 설정합니다.&#10;음란함의 절대값이 이 값에 가까워지거나 클수록, 음란함이 적게 변합니다.</RSOption_8_Desc>
</LanguageData>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationConditional">
<xpath>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</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>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"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>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</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>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</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>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" ]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>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</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>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</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>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"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>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</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</value>
</match>
</Operation>
</Patch>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<Patch>
<Operation Class="PatchOperationConditional">
<xpath>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</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>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"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>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</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
<li>SocialAffection_Small</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="MyMotherLost" or defName="MyFatherLost" or defName="MyGrandchildLost" or defName="MySisterLost" or defName="MyBrotherLost" or defName="MyDaughterLost" or defName="MySonLost"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_Dry</li>
</value>
</match>
</Operation>
<Operation Class="PatchOperationConditional">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts</xpath>
<nomatch Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]</xpath>
<value>
<nullifyingPrecepts>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</nullifyingPrecepts>
</value>
</nomatch>
<match Class="PatchOperationAdd">
<xpath>Defs/ThoughtDef[defName="ColonistLost" or defName="PawnWithGoodOpinionLost" or defName="PawnWithBadOpinionLost"]/nullifyingPrecepts</xpath>
<value>
<li>SocialAffection_Psychopath</li>
<li>SocialAffection_OnlyFamily</li>
</value>
</match>
</Operation>
</Patch>

View File

@ -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);

View File

@ -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));
}
}
}

View File

@ -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();

View File

@ -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;
}
}
}

View File

@ -78,8 +78,10 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Configurations.cs" />
<Compile Include="DebugAction.cs" />
<Compile Include="GoodwillSituationWorker_MemeCompatibility.cs" />
<Compile Include="Harmony.cs" />
<Compile Include="PawnRelationWorkers.cs" />
<Compile Include="Rituals\JobGiver_GangbangVictim.cs" />
<Compile Include="Keyed.cs" />
<Compile Include="PreceptComp_SelftTookThoughtExtended.cs" />

View File

@ -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);
}
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -53,5 +53,8 @@ namespace RJWSexperience
[MayRequireIdeology] public static readonly PreceptDef Incestuos_Forbidden = DefDatabase<PreceptDef>.GetNamed("Incestuos_Forbidden");
[MayRequireIdeology] public static readonly PreceptDef Incestuos_IncestOnly = DefDatabase<PreceptDef>.GetNamed("Incestuos_IncestOnly");
[MayRequireIdeology] public static readonly PreceptDef Incestuos_Disapproved_CloseOnly = DefDatabase<PreceptDef>.GetNamed("Incestuos_Disapproved_CloseOnly");
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysMother = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysMother");
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysFather = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysFather");
[MayRequireIdeology] public static readonly PreceptDef BabyFaction_AlwaysColony = DefDatabase<PreceptDef>.GetNamed("BabyFaction_AlwaysColony");
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@ -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