Jump to content

Recommended Posts

Quick dive into the code:
 

    //Log.Message(xxx.get_pawnname(receiver) + " cum ammount" + amount);
                        //causes significant memory leak, fixx someday
                        //if (amount > 1f)//spillover in case of very large amounts: just apply hediff a second time
                        //{
                        //      Hediff_Semen hediff2 = (Hediff_Semen)HediffMaker.MakeHediff(hediff.def, receiver, null);
                        //      hediff2.semenType = semenType;
                        //      hediff2.Severity = amount - 1f;
                        //      receiver.health.AddHediff(hediff2, bodyPart, null, null);
                        //}

I want that ?

And I assume here shit hits the fan:

                //determines who is the active male (or equivalent) in the exchange and the amount of semen dispensed and where to
                [SyncMethod]
                public static void calculateAndApplySemen(Pawn pawn, Pawn partner, xxx.rjwSextype sextype)
                {
                        if (!RJWSettings.cum_on_body) return;

                        Pawn giver, receiver;
                        //Rand.PopState();
                        //Rand.PushState(RJW_Multiplayer.PredictableSeed());

                        List<Hediff> giverparts;
                        var pawnparts = Genital_Helper.get_PartsHediffList(pawn, Genital_Helper.get_genitalsBPR(pawn));
                        var partnerparts = Genital_Helper.get_PartsHediffList(partner, Genital_Helper.get_genitalsBPR(partner));

                        //dispenser of the seed
                        if (Genital_Helper.has_penis_fertile(pawn, pawnparts) || xxx.is_mechanoid(pawn) || xxx.is_insect(pawn))
                        {
                                giver = pawn;

Especially if (Genital_Helper.has_penis_fertile(pawn, pawnparts)  will fuck it up. Unfortunately I never figured out how to compile Rimworld mods under linux because of thisvery old mono version that is used ?

Link to comment

uh I should have read further.

       else//female on female or genderless - no semen dispensed; maybe add futa support?
                        {
                                return;
                        }

and

                        //TODO: SemenHelper Autofellatio
                        //if no partner -> masturbation, apply some cum on self:
                        //if (partner == null && sextype == xxx.rjwSextype.Autofellatio)
                        //{
                        //      if (!xxx.is_slime(giver))
                        //              SemenHelper.cumOn(giver, BodyPartDefOf.Jaw, cumAmount, giver);
                        //      return;
                        //}

Well I will just hope that one day someone finds the time to further improve it. I forgot to mention the file: SemenHelper.cs

Case closed...What I am missing is simply not yet implemented.

Link to comment
2 hours ago, Damedesu1 said:

Is it normal that "Random Rape" mental breaks occur even if the pawn is happy, sex need is satisfied and there is no break risk?

Yeah, I hate when that happens and then the pawn can't seem to find someone to rape. Do you need a prisoner for that or something? Most of my colonists are masochists anyway. So they prolly wouldn't even mind.

Link to comment
22 minutes ago, terrorofmorrowind said:

Yeah, I hate when that happens and then the pawn can't seem to find someone to rape. Do you need a prisoner for that or something? Most of my colonists are masochists anyway. So they prolly wouldn't even mind.

No, random rape means random. They might even go for some caravan person if they want to.

 

But in my colony they have all the prisoners in the world to rape... young, beautiful, etc.. I wouldn't mind so much if they'd just chose one, fuck the shit out of her, and get back to work, but they stay in the mental break for a long time, eat kibble, use drugs and other such rape-unrelated nonsense. And they don't even get catharsis afterwards.

 

This makes rape, the "Rapist" trait and comfort prisoners a nuisance when they actually should be a luxury for my colonists. It should at least be an option you can turn off. "Random Rape only as a minor mental break" or something.

Link to comment
1 hour ago, Damedesu1 said:

No, random rape means random. They might even go for some caravan person if they want to.

 

But in my colony they have all the prisoners in the world to rape... young, beautiful, etc.. I wouldn't mind so much if they'd just chose one, fuck the shit out of her, and get back to work, but they stay in the mental break for a long time, eat kibble, use drugs and other such rape-unrelated nonsense. And they don't even get catharsis afterwards.

 

This makes rape, the "Rapist" trait and comfort prisoners a nuisance when they actually should be a luxury for my colonists. It should at least be an option you can turn off. "Random Rape only as a minor mental break" or something.

that's why I disabled the 'gain rapist trait' option, people get it way too easily and might go rape someone even tho they are at like 80% satisfaction and have important work to do

also the random rape from rapist is like the drug binge from chemical fascination and happens randomly 'just cause' (I think chemical fascination was changed but I never allowed pawns to have it so I don't know)

Link to comment
1 hour ago, Skömer said:

Artificial  insemination isn't even from rjw, your comment sadly gives no other info that could help identify the issue, post a hugslog

Complex interspecies or they just fucked up the pregnancy settings.

Alternatively they used preparecarefully to create pawns and the bugged vagina aborts the baby.

Or they are using Androids.

Link to comment

I was on track with the issue for futas in semenhelper.cs and made a quick and dirty hack to test:
 

                        //dispenser of the seed
                        bool v = Genital_Helper.has_penis_fertile(pawn, pawnparts) && !Genital_Helper.has_vagina(pawn, pawnparts) && !Genital_Helper.has_ovipositorF(pawn, pawnparts);
                        if (v || xxx.is_mechanoid(pawn) || xxx.is_insect(pawn))
                        {

Now the futa always is the receiving pawn. Not a real fix but better than before. I would need to figure out a way who is the initiator and what they are performing...

Another question

                        //Log.Message(xxx.get_pawnname(receiver) + " cum ammount" + amount);
                        //causes significant memory leak, fixx someday
                        if (amount < 1f)//spillover in case of very large amounts: just apply hediff a second time
                        {
                        }
                        else
                        {
                                Hediff_Semen hediff2 = (Hediff_Semen)HediffMaker.MakeHediff(hediff.def, receiver, null);
                                hediff2.semenType = semenType;
                                hediff2.Severity = amount - 1f;
                                try
                                {
                                        //error when adding to missing part
                                        receiver.health.AddHediff(hediff2, bodyPart, null, null);
                                }
                                catch
                                {

                                }       
                        }

You know why this code caused a memory leak or how did you discover it? I reversed the if else cause because visual studio told me and I added the try catch from above. Maybe you tried to add it to a missing bodypart and it caused the memory leak?

Link to comment
2 hours ago, Pablooxxx said:

I was on track with the issue for futas in semenhelper.cs and made a quick and dirty hack to test:
 


                        //dispenser of the seed
                        bool v = Genital_Helper.has_penis_fertile(pawn, pawnparts) && !Genital_Helper.has_vagina(pawn, pawnparts) && !Genital_Helper.has_ovipositorF(pawn, pawnparts);
                        if (v || xxx.is_mechanoid(pawn) || xxx.is_insect(pawn))
                        {

Now the futa always is the receiving pawn. Not a real fix but better than before. I would need to figure out a way who is the initiator and what they are performing...

Another question


                        //Log.Message(xxx.get_pawnname(receiver) + " cum ammount" + amount);
                        //causes significant memory leak, fixx someday
                        if (amount < 1f)//spillover in case of very large amounts: just apply hediff a second time
                        {
                        }
                        else
                        {
                                Hediff_Semen hediff2 = (Hediff_Semen)HediffMaker.MakeHediff(hediff.def, receiver, null);
                                hediff2.semenType = semenType;
                                hediff2.Severity = amount - 1f;
                                try
                                {
                                        //error when adding to missing part
                                        receiver.health.AddHediff(hediff2, bodyPart, null, null);
                                }
                                catch
                                {

                                }       
                        }

You know why this code caused a memory leak or how did you discover it? I reversed the if else cause because visual studio told me and I added the try catch from above. Maybe you tried to add it to a missing bodypart and it caused the memory leak?

who knows, author is not with us, i dont even remember why it was disabled, maybe that part is working

i think the actual issue is in Hediff_Bukkake

Link to comment

My Bun Buns (Bunny race on steam that is not anime faced) won't have children. They get pregnant but immediately "miscarry due to bad health" which is nonsense, they are perfectly fine. I don't have Children and Pregnancy running, is it needed? I thought there was a button in RJW Mod settings for which mod to handle pregnancies, but I can't find it. Might have a wrong memory there.

Link to comment

I would avoid any CnP mods as of now and only use faster aging. In my tests the children mods all behaved weird and made strange things in my games.

 

In my quest to get semenhelper improved, I hit another roadblock. Debugging showed me that the initiator of the sex action is not automatically the giver, but can also be the receiver pawn, e.g. JobDriver_SexBaseInitiator.cs:

if (Sexprops == null)
					Sexprops = SexUtility.SelectSextype(pawn, Partner, isRape, isWhoring, Partner);
				sexType = Sexprops.SexType;
				SexUtility.LogSextype(Sexprops.Giver, Sexprops.Reciever, Sexprops.RulePack, Sexprops.DictionaryKey);

I would probably need Sexprops.Giver and Sexprops.Reciever in SemenHelper.cs as pawn and partner.

Also I have seen repeatedly this code that switches Giver and Receiver, if triggered:

		if (t2 % 2 != 0 && !rape)
					{
						giving = partner;
						receiving = pawn;
						prefix = "Ask for ";
						if(arraytype == 2)
							prefix = "Provide for ";

						postfix = "";
					}

Probably this is the reason why most of the code determines giver and receiver by has_penis or has_vagina.

Finally I tried in JobDriver_BestialityForFemale.cs to change the code

					//Log.Message("JobDriver_BestialityForFemale::MakeNewToils() - Calling aftersex");
					//SexUtility.ProcessSex(Partner, pawn, usedCondom: usedCondom, sextype: sexType);
					Pawn Giver;
					Pawn Receiver;
					Giver=Sexprops.Giver;
					Receiver=Sexprops.Reciever;
					SexUtility.ProcessSex(Giver, Receiver, usedCondom: usedCondom, sextype: sexType);

but I am not sure when I gave Sexprops.Giver and Sexprops.Reciever directly as arguments it caused errors in game even though it compiled without errors. Using Sexprops.Giver and Sexprops.Reciever from the jobs looks to me like the best solution. All those interlinked abstract classes and interfaces make my head smoke, though. Any ideas or am I completly wrong here?

 

Edit: I made some progress here, but it needs further test. I will create a new post, when I am sure if this approach is right.

Link to comment
14 hours ago, CYFire said:

My Bun Buns (Bunny race on steam that is not anime faced) won't have children. They get pregnant but immediately "miscarry due to bad health" which is nonsense, they are perfectly fine. I don't have Children and Pregnancy running, is it needed? I thought there was a button in RJW Mod settings for which mod to handle pregnancies, but I can't find it. Might have a wrong memory there.

Present a HugsLog otherwise noone can guess.

 

Well I can guess preparecarefully or Android Tiers but who even knows what else you have loaded.

Link to comment

Ok, I think that I got it sorted out. It is a combination of different issues, but I can now always set the correct giver and receiver. In the case of non-penetrating sex the giver will need to be switched to receiver in the semenhelper (e.g. giving a blowjob make the pawn the active part aka giver, but it should have the cum on the jaw afterwards).

 

@Ed86 Do you want me to post my solution here or where is the best location? Maybe a seperate thread to discuss it? (I never used gitgud or any git tool before and this is the first time that I ever programmed something in c#)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use