4.60 star(s) 65 Votes

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
Excuse me I have a problem in the current version of the mod what happens is that pregnant women when I have sex the clothes completely disappear the girl's clothes and she stays naked all the time
assuming you mean the main mod not mine.
 

shane420

Active Member
Jul 6, 2018
578
499
themagiman

Updated my mod to improve the contract system.
The contract system now grows with you.
It looks at what you have unlocked to develop contracts based on that.
It builds real serums then uses those stats to determine the contract stats.
A Hint is now given at the end of the contract description of what was used to generate the serum stats.
I designed the code so if they add new traits in that it will work with those as well.

Reminder: it is unlikely this mod will work with the main mod.

 

randrew

New Member
Aug 27, 2017
10
9
Diconica I like what you did with the contract generation; if I submitted a pull request with some changes (taking your idea and making the code more 'elegant') would you take a look at it? (I'm not very familiar with Git yet; in the meantime, please find my code attached.)
 
Last edited:

LRKXXV

Newbie
Apr 26, 2017
80
33
Nope, I was forced by f95zone admin to place my mod in this forum as well. Ever since they moved my post in here a while back I just went with it.
Why would they do that? Just start your own mod thread, and release it there. Your mod has nothing to do with this thread, and shouldn't be here.
 

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
Diconica I like what you did with the contract generation; if I submitted a pull request with some changes (taking your idea and making the code more 'elegant') would you take a look at it? (I'm not very familiar with Git yet; in the meantime, please find my code attached.)
You might want to see the next updates code first.
There are a number of changes I haven't put up yet.
Some of the code issues are because Vren has made some poor choices.
Those include stuff like using max as a variable initializing stuff in a bad order.
I haven't been able to track down and get rid of the all the max variables.
That means using something like mk = max(asp_dict, key=asp_dict.get) can't be used without getting an error about max being an int and not callable.
Python:
init -2 python:
#for testing purposes
    def tlog(text):
        f = open("traitlist.txt","a")
        f.write(text)
        f.close()
      
    def exclude_test(text,tags):
        if isinstance(tags,list):
            if text in tags:
                return 1
        else:
            if text == tags:
                return 1
        return 0
    #We had to do this because some idiot used max as a variable!!! Moron
    #def max_key(dict):
    #    m = 0
    #    k = None
    #    for key in dict:
    #        if dict[key] > m:
    #            m = dict[key]
    #            k = key
    #    return k
      
    def generate_contract(contract_tier = 0):
      
        t_mental = 0
        t_physical = 0
        t_sexual = 0
        t_medical = 0
        t_flaws = 0
        t_attention = 0
      
        serum_bases = []
        base_slots = []
        high_cap = None
      
        available_traits = []
      
        lts = list_of_traits
        #this is used because Vren initialized it before the MC is initialized
        try:
            mc
        except NameError:
            lts = list_of_traits
        else:
            lts = list_of_traits + mc.business.blueprinted_traits
      
        #Create a list of bases <= contract tier
        for trait in lts:
            if trait.tier <= contract_tier and exclude_test("Production",trait.exclude_tags):
                serum_bases.append(trait)
                base_slots.append(trait.slots)
      
        #build list of available traits
        #traits have to be below the level of contract and researched
        for t in range (0,4):
            if contract_tier >= t:
                for trait in lts:
                    if trait.tier == t and trait.researched == True and trait.name != "High Capacity Design" and not exclude_test("Production",trait.exclude_tags):
                        available_traits.append(trait)

        #High Cap
        for trait in lts:
            if trait.name == "High Capacity Design":
                high_cap = trait
      
        #select the actual level of serum base
        ct = 0
        if contract_tier > 0:
            ct = renpy.random.randint(0,len(serum_bases)-1)
        slots = serum_bases[ct].slots
        #add bases aspects to aspects
        t_mental = serum_bases[ct].mental_aspect
        t_physical = serum_bases[ct].physical_aspect
        t_sexual = serum_bases[ct].sexual_aspect
        t_medical = serum_bases[ct].medical_aspect
        t_flaws = serum_bases[ct].flaws_aspect
        t_attention = serum_bases[ct].attention
      
        #determine if High Capacity is used.
        HC_Test = 0
        if renpy.random.randint(1,7) < 4 and high_cap.researched:
            HC_Test = 1
        if HC_Test:
            slots += 1
            #include HC aspects
            t_mental += high_cap.mental_aspect
            t_physical += high_cap.physical_aspect
            t_sexual += high_cap.sexual_aspect
            t_medical += high_cap.medical_aspect
            t_flaws += high_cap.flaws_aspect
            t_attention += high_cap.attention
      
        #Determine number of slots filled
        fill = 1
        if ct > 0 and HC_Test != 1:    #tier >0 and no High Cap, may not use all slots
            fill = renpy.random.randint(1,slots)
        if HC_Test == 1:              #if HC is used all slots are used
            fill = slots
        trait_names = "Min Traits:"         #string of the tait names selected for trouble shooting purposes
      
        #select traits to fill slots
        if(len(available_traits)>0): #needed because you start with a base but no traits
            Rn = 0
            selected_traits = []            #these are traits already selected in serum
            for x in range(0,fill):
                while Rn in selected_traits:
                    Rn = renpy.random.randint(0,len(available_traits)-1)
                selected_trait = available_traits[Rn]
                selected_traits.append(Rn)
                trait_names += " " + selected_trait.name
                t_mental += selected_trait.mental_aspect
                t_physical += selected_trait.physical_aspect
                t_sexual += selected_trait.sexual_aspect
                t_medical += selected_trait.medical_aspect
                t_flaws += selected_trait.flaws_aspect
                t_attention += selected_trait.attention
      
        t_flaws += renpy.random.randint(0,(ct+1)*2)
      
        #Some idiot use max as a variable
        asp_dict = {"mental":int(t_medical),"physical":int(t_physical),"sexual":int(t_sexual),"medical":int(t_medical)}
        primary_aspect = max(asp_dict,key=asp_dict.get)
        #primary_aspect = max_key(asp_dict)
        del asp_dict[primary_aspect]
        #secondary_aspect = max_key(asp_dict)
        secondary_aspect = max(asp_dict,key=asp_dict.get)
      
      
      
        #These are shity and don't really match serums either
        #Temp for now
        contract_name, contract_description = get_contract_description(primary_aspect, secondary_aspect, contract_tier)
      
        amount_desired = 5*(contract_tier+renpy.random.randint(1,3))*(contract_tier+renpy.random.randint(1,3))
      
        contract_length = 3 + (renpy.random.randint(0,3+contract_tier) * renpy.random.randint(0,3+contract_tier))
        #My change
        contract_description += " " + trait_names
        #end change
        new_contract = Contract(contract_name, contract_description, contract_length,
            mental_requirement = t_mental, physical_requirement = t_physical, sexual_requirement = t_sexual, medical_requirement = t_medical,
            flaw_tolerance = t_flaws, attention_tolerance = t_attention, amount_desired = amount_desired)

        return new_contract
  
  
    def get_contract_description(primary_aspect, secondary_aspect, contract_tier):
        contract_dict = {("mental","physical"):("Eltaro Co. Employee Boosters","Eltaro Co. is looking for a way to improve the general productivity of their employees by sharpening both body and mind."),
        ("Mental","sexual"):("Iris Cosmetics Makeup Additive","Having a beautiful mind is just as important as clear skin or perfect makeup. Iris cosmetics is looking for something to promote that feeling in their customers, and a little sex appeal always helps sell products."),
        ("mental","medical"):("Tresmon Pharmaceuticals Neuotropics","Tresmon Pharmaceuticals has a number of clients interested in thought-boosting drugs, and they're willing to pay top dollar for you to fill those orders for them."),
      
        ("physical","mental"):("Univerity Athletics Council Request","The university athletics council is looking for a way to improve the performance of their key athletes, on and off the field."),
        ("physical","sexual"):("Univerity Cheerleading Council Request","Attendance at recent sporting events has been down, and many are blaming the new \"respectful\" cheerleading uniforms. Cheer leadership is looking for a new workout enhancer, ideally one that will reduce resistance to a return to the old uniform."),
        ("physical","medical"):("Gary's Power Lifting Additive","Gary runs a local gym, and he's always on the look out for another performance enhancing drug to peddle to those looking for a quick path to fitness."),
      
        ("sexual","mental"):("Personal Business Supplies","A C-suite executive of a nearby business has a secretary they want to turn into a, quote, \"Cock drunk bimbo-slut\", and they're willing to pay good money for a large stock of serum to make it happen."),
        ("sexual","physical"):(str(strip_club.name),str(strip_club_owner) + " is interested in anything that will give his girls more sex appeal while they're stripping on stage. Bigger tits, toned bodies, whatever you think they need to get more twenties on the stage."),
        ("sexual","medical"):("A Questionable Contact","An individual using an obviously fake name has requested \"Anything that gets 'em horny, wet, and ready to suck dick.\". Their name might be fake, but their cash definitely isn't."),
      
        ("medical","mental"):("Tresmon Pharmaceuticals Research Materials","Tresmon Pharmaceuticals is intensely interested in our work on mind altering substances. They want a stock of their own to perform advanced R&D with."),
        ("medical","physical"):("Military Research Study","The military is interested in potential \"super soldier\" applications, and they're willing to work with civilian sources to obtain research material."),
        ("medical","sexual"):("Female Libedo Enhancements","Low libedo is a side effect for many different medications. Tresmon Pharmaceuticals is interested in an additive that might lessen or eliminate that problem from their existing drugs.")
        }
        r = contract_dict.get((primary_aspect,secondary_aspect))
        contract_name = r[0]
        contract_description = r[1]
        return contract_name, contract_description
 
Last edited:

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
Why would they do that? Just start your own mod thread, and release it there. Your mod has nothing to do with this thread, and shouldn't be here.
I think the admins just didn't want more than one thread of mods for the game. I don't know not going to get in a fight over it.
They also might have thought the to mods could be combined. But they are wrong if that was their thought. They aren't compatible. They have different purposes and conflicts in code.
 
  • Like
Reactions: Wmayrt

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
I think the admins just didn't want more than one thread of mods for the game. I don't know not going to get in a fight over it.
They also might have thought the to mods could be combined. But they are wrong if that was their thought. They aren't compatible. They have different purposes and conflicts in code.
Maybe it is time I ask again.
 
  • Like
Reactions: LRKXXV and Edwarf

eldoen

Member
Jun 30, 2021
460
283
You might want to see the next updates code first.
There are a number of changes I haven't put up yet.
Some of the code issues are because Vren has made some poor choices.
Those include stuff like using max as a variable initializing stuff in a bad order.
I haven't been able to track down and get rid of the all the max variables.
That means using something like mk = max(asp_dict, key=asp_dict.get) can't be used without getting an error about max being an int and not callable.
Python:
init -2 python:
#for testing purposes
    def tlog(text):
        f = open("traitlist.txt","a")
        f.write(text)
        f.close()
      
    def exclude_test(text,tags):
        if isinstance(tags,list):
            if text in tags:
                return 1
        else:
            if text == tags:
                return 1
        return 0
    #We had to do this because some idiot used max as a variable!!! Moron
    def max_key(dict):
        m = 0
        k = None
        for key in dict:
            if dict[key] > m:
                m = dict[key]
                k = key
        return k
      
    def generate_contract(contract_tier = 0):
      
        t_mental = 0
        t_physical = 0
        t_sexual = 0
        t_medical = 0
        t_flaws = 0
        t_attention = 0
      
        serum_bases = []
        base_slots = []
        high_cap = None
      
        available_traits = []
      
        lts = list_of_traits
        #this is used because Vren initialized it before the MC is initialized
        try:
            mc
        except NameError:
            lts = list_of_traits
        else:
            lts = list_of_traits + mc.business.blueprinted_traits
      
        #Create a list of bases <= contract tier
        for trait in lts:
            if trait.tier <= contract_tier and exclude_test("Production",trait.exclude_tags):
                serum_bases.append(trait)
                base_slots.append(trait.slots)
      
        #build list of available traits
        #traits have to be below the level of contract and researched
        for t in range (0,4):
            if contract_tier >= t:
                for trait in lts:
                    if trait.tier == t and trait.researched == True and trait.name != "High Capacity Design" and not exclude_test("Production",trait.exclude_tags):
                        available_traits.append(trait)

        #High Cap
        for trait in lts:
            if trait.name == "High Capacity Design":
                high_cap = trait
      
        #select the actual level of serum base
        ct = 0
        if contract_tier > 0:
            ct = renpy.random.randint(0,len(serum_bases)-1)
        slots = serum_bases[ct].slots
        #add bases aspects to aspects
        t_mental = serum_bases[ct].mental_aspect
        t_physical = serum_bases[ct].physical_aspect
        t_sexual = serum_bases[ct].sexual_aspect
        t_medical = serum_bases[ct].medical_aspect
        t_flaws = serum_bases[ct].flaws_aspect
        t_attention = serum_bases[ct].attention
      
        #determine if High Capacity is used.
        HC_Test = 0
        if renpy.random.randint(1,7) < 4 and high_cap.researched:
            HC_Test = 1
        if HC_Test:
            slots += 1
            #include HC aspects
            t_mental += high_cap.mental_aspect
            t_physical += high_cap.physical_aspect
            t_sexual += high_cap.sexual_aspect
            t_medical += high_cap.medical_aspect
            t_flaws += high_cap.flaws_aspect
            t_attention += high_cap.attention
      
        #Determine number of slots filled
        fill = 1
        if ct > 0 and HC_Test != 1:    #tier >0 and no High Cap, may not use all slots
            fill = renpy.random.randint(1,slots)
        if HC_Test == 1:              #if HC is used all slots are used
            fill = slots
        trait_names = "Min Traits:"         #string of the tait names selected for trouble shooting purposes
      
        #select traits to fill slots
        if(len(available_traits)>0): #needed because you start with a base but no traits
            Rn = 0
            selected_traits = []            #these are traits already selected in serum
            for x in range(0,fill):
                while Rn in selected_traits:
                    Rn = renpy.random.randint(0,len(available_traits)-1)
                selected_trait = available_traits[Rn]
                selected_traits.append(Rn)
                trait_names += " " + selected_trait.name
                t_mental += selected_trait.mental_aspect
                t_physical += selected_trait.physical_aspect
                t_sexual += selected_trait.sexual_aspect
                t_medical += selected_trait.medical_aspect
                t_flaws += selected_trait.flaws_aspect
                t_attention += selected_trait.attention
      
        t_flaws += renpy.random.randint(0,(ct+1)*2)
      
        #Some idiot use max as a variable
        asp_dict = {"mental":int(t_medical),"physical":int(t_physical),"sexual":int(t_sexual),"medical":int(t_medical)}
        primary_aspect = max_key(asp_dict)
        del asp_dict[primary_aspect]
        secondary_aspect = max_key(asp_dict)
      
      
      
        #These are shity and don't really match serums either
        #Temp for now
        contract_name, contract_description = get_contract_description(primary_aspect, secondary_aspect, contract_tier)
      
        amount_desired = 5*(contract_tier+renpy.random.randint(1,3))*(contract_tier+renpy.random.randint(1,3))
      
        contract_length = 3 + (renpy.random.randint(0,3+contract_tier) * renpy.random.randint(0,3+contract_tier))
        #My change
        contract_description += " " + trait_names
        #end change
        new_contract = Contract(contract_name, contract_description, contract_length,
            mental_requirement = t_mental, physical_requirement = t_physical, sexual_requirement = t_sexual, medical_requirement = t_medical,
            flaw_tolerance = t_flaws, attention_tolerance = t_attention, amount_desired = amount_desired)

        return new_contract
  
  
    def get_contract_description(primary_aspect, secondary_aspect, contract_tier):
        contract_dict = {("mental","physical"):("Eltaro Co. Employee Boosters","Eltaro Co. is looking for a way to improve the general productivity of their employees by sharpening both body and mind."),
        ("Mental","sexual"):("Iris Cosmetics Makeup Additive","Having a beautiful mind is just as important as clear skin or perfect makeup. Iris cosmetics is looking for something to promote that feeling in their customers, and a little sex appeal always helps sell products."),
        ("mental","medical"):("Tresmon Pharmaceuticals Neuotropics","Tresmon Pharmaceuticals has a number of clients interested in thought-boosting drugs, and they're willing to pay top dollar for you to fill those orders for them."),
      
        ("physical","mental"):("Univerity Athletics Council Request","The university athletics council is looking for a way to improve the performance of their key athletes, on and off the field."),
        ("physical","sexual"):("Univerity Cheerleading Council Request","Attendance at recent sporting events has been down, and many are blaming the new \"respectful\" cheerleading uniforms. Cheer leadership is looking for a new workout enhancer, ideally one that will reduce resistance to a return to the old uniform."),
        ("physical","medical"):("Gary's Power Lifting Additive","Gary runs a local gym, and he's always on the look out for another performance enhancing drug to peddle to those looking for a quick path to fitness."),
      
        ("sexual","mental"):("Personal Business Supplies","A C-suite executive of a nearby business has a secretary they want to turn into a, quote, \"Cock drunk bimbo-slut\", and they're willing to pay good money for a large stock of serum to make it happen."),
        ("sexual","physical"):(str(strip_club.name),str(strip_club_owner) + " is interested in anything that will give his girls more sex appeal while they're stripping on stage. Bigger tits, toned bodies, whatever you think they need to get more twenties on the stage."),
        ("sexual","medical"):("A Questionable Contact","An individual using an obviously fake name has requested \"Anything that gets 'em horny, wet, and ready to suck dick.\". Their name might be fake, but their cash definitely isn't."),
      
        ("medical","mental"):("Tresmon Pharmaceuticals Research Materials","Tresmon Pharmaceuticals is intensely interested in our work on mind altering substances. They want a stock of their own to perform advanced R&D with."),
        ("medical","physical"):("Military Research Study","The military is interested in potential \"super soldier\" applications, and they're willing to work with civilian sources to obtain research material."),
        ("medical","sexual"):("Female Libedo Enhancements","Low libedo is a side effect for many different medications. Tresmon Pharmaceuticals is interested in an additive that might lessen or eliminate that problem from their existing drugs.")
        }
        r = contract_dict.get((primary_aspect,secondary_aspect))
        contract_name = r[0]
        contract_description = r[1]
        return contract_name, contract_description
script.rpy 406 original 48.1
$ max = len(mc.business.mandatory_crises_list)

line 470
$ max = len(mc.business.mandatory_morning_crises_list)

business.rpy
def get_max_employee_slut(self):
max = -1 #Set to -1 for an empty business, all calls should require at least sluttiness 0
for person in self.get_employee_list():
if person.sluttiness > max:
max = person.sluttiness
return max

that is the only places I see it used as a variable
 

randrew

New Member
Aug 27, 2017
10
9
script.rpy 406 original 48.1
$ max = len(mc.business.mandatory_crises_list)

line 470
$ max = len(mc.business.mandatory_morning_crises_list)

business.rpy
def get_max_employee_slut(self):
max = -1 #Set to -1 for an empty business, all calls should require at least sluttiness 0
for person in self.get_employee_list():
if person.sluttiness > max:
max = person.sluttiness
return max

that is the only places I see it used as a variable
dionica also, you can likely use
Python:
__builtins__.max
if you don't want to mess with those.
 

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
script.rpy 406 original 48.1
$ max = len(mc.business.mandatory_crises_list)

line 470
$ max = len(mc.business.mandatory_morning_crises_list)

business.rpy
def get_max_employee_slut(self):
max = -1 #Set to -1 for an empty business, all calls should require at least sluttiness 0
for person in self.get_employee_list():
if person.sluttiness > max:
max = person.sluttiness
return max

that is the only places I see it used as a variable
Yep, found those. Thanks.
It allows me to use the built in function max.
I added the change above it allows. It lets me remove the one function.
This way it probably isn't as clear as how it works to those not familiar with it.

I'll probably just go ahead and use the function I created it saves dealing with adding additional files to the mod.
Vren though should fix it. Not sure what he was thinking when he did that.
 

Diconica

Well-Known Member
Apr 25, 2020
1,134
1,181
dionica also, you can likely use
Python:
__builtins__.max
if you don't want to mess with those.
Thanks also. I think I'll end up using the function I made. It makes the code a little more clear what is going on.
But you are right that would solve the issue of not having to modify the other files.
 

thundersan86

Member
Aug 1, 2019
102
42
At this point I think this mod and the bug fixes should've be part of the original game as one single release...
Just saying...
 

nofear4095

New Member
Jan 22, 2022
7
2
Sorry if this is the wrong place but which serum do I have to make for the sister's Stephanie and Ashley to make them happy? I've tried a bunch and keep not making the correct one
 

bloodbus

Member
Sep 30, 2020
412
340
Sorry if this is the wrong place but which serum do I have to make for the sister's Stephanie and Ashley to make them happy? I've tried a bunch and keep not making the correct one
If their happiness is dropping consistently then I don't think a serum will help you. Unless that's been fixed, it's an opinion they constantly do (Like wearing skimpy clothes when they actually hate dressing like that)
 
4.60 star(s) 65 Votes