Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

RandomFap

18
Posts
8
Topics
109
Following
A member registered Aug 02, 2021

Recent community posts

Hello,

I try to look at the files or various mods but I don't see how to achieve this with minimal changes. Basically, I would like to allow races with tentacles or multiple limbs to use those during sex scenes, for races such as arachnids, nereid, etc... For example, if the tentacles are many, they should be able to use it on multiple people without using it as a group action such as "fuck in turns", or to use the legs for a footjob on a person and then a massage with feet on another, without actions cancelling. Another example without groups, if you have more than two tentacles, you can maybe DP with tentacles on a single person, and use leftover tentacles for something else.

A race check (or simple bodyparts check, like a variable number_legs/tentacles/boobs), a counter of used bodyparts, should do the trick (maybe who knows multiple penises on a new alien tentacle race), but I cannot find how to modify the code for that. Maybe the whole structure makes it impossible? I found a function somewhere for race check for aphrodisiacs that checks within some list but aside from that no clue. Like for furries, multiple boobs means multiple titjobs? (theoretically with 3 boobs on a triangle you can have 3 simultaneous titjobs but that is stretching the idea). Same for orifices, for... "creative" races/bodyparts (like several hollow boobs on a mutant furry or something).

Since I do not know how to mod it I am adding this as a suggestion. :)

Currently, everytime you reset the game, the mod files are modified. In the modification, skip lines are added, so you could get a lot of extra lineskips in your modded files after many loads...

(2 edits)

I have been looking at different mods to understand how things work but it seems like adding a new sex trait effect is not obvious (no easy copy-paste from another mod).

Sure, I can add a sex trait with

var sex_traits = {
      killjoy_aura= {
          code = "killjoy_aura",
          name = "",
          descript = "",
          starting = true,
          random_generation = false,
          negative = false,
          acquire_reqs = [],
          reqs = [],
          effects = [{effect = 'killjoy_aura', trigger = 'end_turn'}],
      },
}
func load_tables():      
    modding_core.load_table(Traitdata.sex_traits, sex_traits) 


But then defining the killjoy_aura effect and inserting it to InteractionMainModule.gd seems to be a challenge. If I do it manually without mods it work, 

func killjoy_aura(caster):
     for i in participants:
         i.horny-= 10
         i.sens -= 10

but how to add it by mods? I try to look at what was done in the kennel mod but no idea how to make it work in my case.

I tried

extends "res://gui_modules/Interaction/Scripts/InteractionMainModule.gd"
func killjoy_aura(caster):
     for i in participants:
         i.horny-= 10
         i.sens -= 10

in a extra_effect.gd file and adding

func extend_nodes():
     var sexInteractionNode = modding_core.get_spec_node(input_handler.NODE_SEX)
     modding_core.extend_node(sexInteractionNode, path + '/extra_effect.gd')

but it does not seem to work.
EDIT: Weird Typo
EDIT: Found my problem. Needs to add

[NodeScripts]
module_name=true

in mod_config.ini file

Thanks! That was very useful. Maybe I should resort to mods instead of just reading/understanding/editing the game files. Should have thought of that sooner!

(1 edit)

When you accepted quests, and "there are no suitable quests available" you can still click on the accept button on the bottom left, and a weird interaction happens as if I got a new quest.
EDIT: I have a lot of duplicate quest locations to travel to for example

(1 edit)

Hello, I wanted to play with the game files to see what I can change, so far I have managed to add the race "Polymorph" that would have all kind of special attributes from other races , and apparently it required to modify multiple game files.

I now want to add an age category "elderly" to the initial "teen, adult, mature" but it does not seem simple to do so without triggering an error message somewhere (or weird description).
Can someone point me to the files I need to modify to add this new "elderly" category?

To be more precise: I've added a bunch of stuff, but I cannot resolve this error (game runs fine but terminal goes awry when interacting with an "elderly" character):

SCRIPT ERROR: build_attrs_for_char: Invalid get index 'elderly' (on base: 'Dictionary').           At: res://src/core/globals.gd:390

This is a story on how I tried to navigate the game files to understand what is going on, but basically I am searching on how to get the irresistible trait. Only the MC got it by accident.

So in /assets/data/traits.gd we have the traits description, with a list of conditions on how to acquire the traits (in the var sex_traits, which had a comment stating "only in interaction tab")

We learn that lewdness_aura is the only trait you cannot acquire naturally.
I don't understand how to acquire bedroom_prodigy, but I got it several times by accident.

Now the main question is the irresistible trait, that requires "new_consented_partners" to be of value >= 3.
I found the variable "new_consented_partners" in /src/interaction_member.gd, but I have no clue how to increase it during sex scenes.

By setting the variable to, let's say 4, now I have a chance to get it.

On a side note, I've set several group sex but some characters still only have "1" sexual partners in the information tab, even when setting the parameter to non-zero. Not sure if it's a bug.

So I found the variable again in \gui_modules\Interaction\Scripts\InteractionMainModule.gd and it's essentially increased in the function startscene.
And at the beginning of the function, I see the function always start with loops with lowest_consent = 100, which was strange because a lot of my characters have consent above 100. Which makes me realized the trait was acquired during a scene with 3 new characters.

The line "var lowest_consent = 100" has 3 occurences, so I changed it to "var lowest_consent = 10000000".

To debug and not let behaviour belong to randomness, I change line "chance = (randf()*100 < (5 + 5 * p.person.get_stat('sexuals_factor')))" to "chance = true".
This does not change anything, simply because the code has already registered the partners, despite the information tip in the menu saying they only have one or two or zero partners. So I tried it with new partners and it works.

So I try now by resetting var lowest_consent = 100, but keeping chance = true.

Then a bit lower I notice one piece of code:

for i in givers + takers:
        if isencountersamesex(givers,takers,i) == true:
            i.actionshad.samesex += 1
        else:
            i.actionshad.oppositesex += 1
        if i.person_sexexp.actions.has(scenescript.code):
            i.person_sexexp.actions[scenescript.code] += 1
        else:
            i.person_sexexp.actions[scenescript.code] = 1
            i.new_action_performed = true
        for k in givers + takers:
            if k != i:
                if i.person_sexexp.partners.has(k.id):
                    i.person_sexexp.partners[k.id] += 1
                else:
                    i.person_sexexp.partners[k.id] = 1
                    if dict.consents[k.id] - scenescript.consent_level > 0:
                        k.new_consented_partners += 1

From my testing, it seems like you got one shot of getting the trait with new partners, if you don't get it, those will never count anymore.
Also weird thing, you can get the irresistible trait by subduing inexperienced people with 0 consent and then roping them. They will count as new consented partners for the sake of the trait unlocking.

I am not sure that's intended.
Overall, I think the system needs to be changed a little bit to be less random. What about having a progress bar for sex traits, but the sex traits are hidden?
Like "new hidden fetish: progress x%", if the fetish is not practiced for some time, the progress lowers and then disappear.  The Wits and Sex factors can play a part on how fast a fetish is forgotten if not fully acquired, or how fast it is acquired. Less randomness, less "impossible to get the trait unless attempting with new people". This would not replace the hidden fetish to discover by dating: once a fetish is acquired/discovered, it stays there. This could also apply to forgetting negative traits: "changing mind on fetish: x%".

This could be cool, it would leave players wondering what fetish is out there.

Same for the Leon quest, after you get the totem you are warped to the Elven City with a button search for Leon. If you click it you are stuck (no fight party)

If you click on the button "search for Fred" in the city and you plan to fight, you are stuck in the game. You cannot fight with a party of zero people. There is no fight party in the city.

(1 edit)

There's currently a bug with the acquiral/removal of sex traits. Sometimes after learning them, it doesn't appear, and sometimes it doesn't remove the negative traits. What I noticed is that the traits are added/removed to the wrong character, i.e the wrong character in the end message has "Character A lost this trait" but actually character A never had this trait, character B had, but didn't lose it. It's the same with adding traits, the text message says they learn it, but then nothing shows up. This issue seem to matter only in group sex actions.

EDIT: Apparently this could be a misinterpretation of undiscovered sex traits, and working as intended. See https://itch.io/t/2360962/bug-in-sex-traits

This sounds like a stretch, but I believe you are not the only one and a lot of people want to add creative plot lines and NPC.

People just do not have the coding skills to do so.

Right now there is a system that makes it "easy" to add pictures for various races, etc, through the improved random portraits mod and related tools.

But there is no way to easily add storylines with specific NPCs. Imagine if you could create a "container" mod that allows people to share their extra NPCs and extra plot lines easily, where compatibility between different creations would be guaranteed.

Of course the features will likely be quite limited compared to being an experienced modder, but just being able to add custom characters (pictures/stats) and simple events ("if day == X then do" and "if event1 done then etc") would be great for people with ideas and without advanced coding skills.

For example, the mod would load an extra folder named "ExtraPlots" where each story-subfolder would contain

  1. a text file describing custom character stats and pictures relative location (can be set to "none")
  2. a text file containing events to load in the morning or in a map (like "if (day == X) and/or (Event1 == True) then print text/choice") with simple options (like "add/remove specific unique character/item")
  3. extra pictures if needed

Each subfolder would have their local variable names treated differently in the system (not sure how to differentiate, maybe a list of lists, each list being the list of variables/triggers of a specific story-subfolder).

People would be able to share their creations and their custom stories without multiple stories conflicting with each other (that would probably requires that it does not interfere with main story, but who knows what is possible?).

I have no clue how the Godot engine or the game works, so this might be impossible to create. But this game is alive thanks to modding, and giving extra tools for "not-good-at-coding" creators sounds like a good idea.

Thanks for the hard work :) By the way are you also checking compatibility with ankmaidor's bug fix mod? It recently got updated.

https://itch.io/t/1167355/bugfix-for-10d-v5

So I suppose there were many bugs ;)

Anyway people can help?

If you are talking about save files, this one is good enough https://jsoneditoronline.org/

(2 edits)

Wow good luck man... Feels like you'll need it.

EDIT: Thanks to your info I managed to do things. I cannot clean the data except manually (there's also data for non animals that is useless!) but I can aboid creating extra useless data.

I found a workaround by limiting the calls to createrelativesdata, first modifying getrelativename:

func getrelativename(person, person2):
    var result = null
    var data1 
    var data2
    if !globals.state.relativesdata.has(person.id) || !globals.state.relativesdata.has(person2.id):
        return null
    else:
        data1 = globals.state.relativesdata[person.id]
        data2 = globals.state.relativesdata[person2.id]
    #if globals.state.relativesdata.has(person.id):
    #    data1 = globals.state.relativesdata[person.id]
    #else:
    #    createrelativesdata(person)
    #    data1 = globals.state.relativesdata[person.id]
    #if globals.state.relativesdata.has(person2.id):
    #    data2 = globals.state.relativesdata[person2.id]
    #else:
    #    createrelativesdata(person2)
    #    data2 = globals.state.relativesdata[person2.id]
    
    #print(data1, data2)
    for i in ['mother','father']:
        if str(data1[i]) == str(data2.id):
            result = '$parent'
        elif str(data2[i]) == str(data1.id):
            result = '$son'
    for i in [data1, data2]:
        if i.siblings.has(data1.id) || i.siblings.has(data2.id):
            result = '$sibling'
    if result != null:
        result = person2.dictionary(result)
    return result

But createrelativesdata is also called in some places of globals.gd: it makes sense for impregnation. But in some other places, it doesn't.

This function tends to create data for a false return. I just return false without creating data instead.

func checkifrelatives(person, person2):
    var result = false
    var data1 
    var data2
    if !globals.state.relativesdata.has(person.id) || !globals.state.relativesdata.has(person2.id):
        return false
    else:
        data1 = globals.state.relativesdata[person.id]
        data2 = globals.state.relativesdata[person2.id]
    #if globals.state.relativesdata.has(person.id):
    #    data1 = globals.state.relativesdata[person.id]
    #else:
    #    createrelativesdata(person)
    #    data1 = globals.state.relativesdata[person.id]
    #if globals.state.relativesdata.has(person2.id):
    #    data2 = globals.state.relativesdata[person2.id]
    #else:
    #    createrelativesdata(person2)
    #    data2 = globals.state.relativesdata[person2.id]
    for i in ['mother','father']:
        if str(data1[i]) == str(data2.id) || str(data2[i]) == str(data1.id):
            result = true
    for i in [data1, data2]:
        if i.siblings.has(data1.id) || i.siblings.has(data2.id):
            result = true
    
    
    return result

After testing, it seems to work! There is just some issue I noticed: sibilings and step siblings are bugged, and sometimes get errors (comparisons of string names with -1). Unsure if this is prior to modifications or after, but I found some fix to it.

First modify the function connectrelatives, which seems to be the culprit:

func connectrelatives(person1, person2, way):
    if person1 == null || person2 == null || person1.id == person2.id:
        return
    if !globals.state.relativesdata.has(person1.id):
        createrelativesdata(person1)
    if !globals.state.relativesdata.has(person2.id):
        createrelativesdata(person2)
    if way in ['mother','father']:
        var entry = globals.state.relativesdata[person1.id]
        for child in entry.children:
            connectrelatives(person2, globals.state.relativesdata[child], 'sibling')
        entry.children.append(person2.id)
        entry = globals.state.relativesdata[person2.id]
        entry[way] = person1.id
        if typeof(person1) != TYPE_DICTIONARY && typeof(person2) != TYPE_DICTIONARY:
            addrelations(person1, person2, 200)
    elif way == 'sibling':
        var entry = globals.state.relativesdata[person1.id]
        var entry2 = globals.state.relativesdata[person2.id]
        # if one parent is -1 and the other a string_id, it will throw an error! Need to ensure strings
        var good_type_mom = (typeof(entry.mother) == typeof(entry2.mother)) && (typeof(entry.mother) == typeof(person1.id))
        var good_type_dad = (typeof(entry.father) == typeof(entry2.father)) && (typeof(entry.father) == typeof(person1.id))
        var good_types = good_type_mom && good_type_dad
        if good_types and ((entry.mother == entry2.mother) && (entry.father == entry2.father)):
            if !entry.siblings.has(entry2.id):
                entry.siblings.append(entry2.id)
            if !entry2.siblings.has(entry.id):
                entry2.siblings.append(entry.id)
        elif (good_type_mom && (entry.mother == entry2.mother)) || (good_type_dad && (entry.father == entry2.father)):
            if !entry.halfsiblings.has(entry2.id):
                entry.halfsiblings.append(entry2.id)
            if !entry2.halfsiblings.has(entry.id):
                entry2.halfsiblings.append(entry.id)

And then the problem in its calls, when using impregnation. Change the end of the function impregnation (still in globals.gd):

    #calls to connectrelatives is bugged for siblings
    #problem seems to be at the identification of mother AND father simultaneously
    #as connectrelatives do not assign both parents simultaneously
    createrelativesdata(baby)
    globals.state.relativesdata[baby.id]['mother'] = mother.id
    if realfather != -1:
        globals.state.relativesdata[baby.id]['father'] = father.id
        connectrelatives(father, baby, 'father')
    connectrelatives(mother, baby, 'mother')
    mother.preg.baby = baby.id
    mother.preg.duration = 1
    
    mother.metrics.preg += 1
    globals.state.babylist.append(baby)

And this seemed to resolve my issues. Hope it helps other people.

Thank you, knowing where to look at exactly allowed to find a way to have it naturally, even though it could be implemented way better. I use those mods so maybe not everything here is accurate.

I use those mods:

https://itch.io/t/1167355/bugfix-for-10d-v4a

https://itch.io/t/984434/randomportraits-and-portrait-pack-editor-for-the-10-version

https://itch.io/t/1085124/chastity-belt-mod-v13e-for-strive-v10d (only expanded sex to make it work with leo)

https://itch.io/t/1099697/leos-mod-for-strive-v10

In the  file newsexsystem.gd I take inspiration from issamesexencounter and create a function:

func isbestiality(givers, takers, actor = null):
    if givers.empty() || takers.empty():
        return false
    var giversunique = givers[0].person.unique
    var takersunique = takers[0].person.unique
    if givers.has(actor):
        return takersunique in ['dog','horse']
    elif takers.has(actor):
        return giversunique in ['dog','horse']
    return false
I also add a field bestiality in actionshad variable:

# var actionshad = {addtraits = [], removetraits = [], samesex = 0, samesexorgasms = 0, oppositesex = 0, oppositesexorgasms = 0, punishments = 0, group = 0}
var actionshad = {addtraits = [], removetraits = [], samesex = 0, samesexorgasms = 0, oppositesex = 0, oppositesexorgasms = 0, punishments = 0, group = 0, bestiality = 0}
Then somewhere in the code add two lines after the samesexencounter counter update:

if sceneref.isencountersamesex(lastaction.givers, lastaction.takers, self) == true:
        actionshad.samesexorgasms += 1
    else:
        actionshad.oppositesexorgasms += 1
# Adds bestiality points for potential "Deviant" gain
if sceneref.isbestiality(lastaction.givers, lastaction.takers, self) == true:
        actionshad.bestiality += 1
Also here:

    for i in givers + takers:
        if isencountersamesex(givers,takers,i) == true:
            i.actionshad.samesex += 1
        else:
            i.actionshad.oppositesex += 1
        if isbestiality(givers,takers,i) == true:
            i.actionshad.bestiality += 1
and somewhere else in the code add the trigger to add traits:

        if i.actionshad.group*0.01 > randf():
            i.person.trait_remove("Monogamous")
            i.person.add_trait("Fickle")
        # new code to add Deviant trait
        if i.actionshad.bestiality*0.01 > randf():
            i.person.add_trait("Deviant")
And I loaded a game, started an orgy with dogs/horses to get lots of counters, and managed to unlock the trait in-game.

Obviously, this workaround does not replace an actual implementation with flavor text, in-game consequences and stuff but it should be "safe" (as not modifying the game substantially).

Now the only issue, which I do not know the origin/cause (but was present in my version pre-modification) is that the save files are bloated with "dogs" "horses" of random races for siblings/family relationship even though I never got a baby in that save.

In "relativesdata":

      "1243": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1243",
        "mother": -1,
        "name": "Dog 1 Campbell",
        "race": "Halfkin Wolf",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
      "1244": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1244",
        "mother": -1,
        "name": "Dog 2 Leon",
        "race": "Gnome",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
      "1245": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1245",
        "mother": -1,
        "name": "Dog 3 Leawis",
        "race": "Centaur",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
      "1246": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1246",
        "mother": -1,
        "name": "Horse 1 Ray",
        "race": "Centaur",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
      "1247": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1247",
        "mother": -1,
        "name": "Horse 2",
        "race": "Scylla",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
      "1248": {
        "children": [],
        "father": -1,
        "halfsiblings": [],
        "id": "1248",
        "mother": -1,
        "name": "Horse 3",
        "race": "Harpy",
        "sex": "male",
        "siblings": [],
        "state": "normal"
      },
and so on. Not sure what's the deal.

Hello,
I am aware that the deviant trait cannot be learned in current versions if I understand what I read in this forum.

However in sexuals.gd I can find:

        if action.tags.find("degrading") >= 0 && slave.traits.find("Deviant") < 0 && (rand_range(0,1) >= 0.8 || slave.effects.has('entranced') == true):

            slave.add_trait("Deviant")

            counter += 1

So there might be a way to get the deviant trait by adding the "degrading" tag to some action tags.

Anyone know which file to edit for that?

Thanks in advance!

(1 edit)

Fantastic job.  Just FYI
I wanted to help and I believe I found a bug in V4:

var idx

        var removeId

        var tempslave

        for i in range(count):

            idx = randi() % (slaves.size()*7/4) % slaves.size()

            removeId = slaves[idx].id

            for id in slaves[idx].relations:

                tempslave = globals.state.findslave(id)

                if tempslave:tempslave.relations.remove(removeId)

                    

            slaves.remove(idx)

This part can throw the following error:

SCRIPT ERROR: _on_end_pressed: Invalid call. Nonexistent function 'remove' in base 'Dictionary'.

          At: res://files/scripts/Mansion.gd:1254


I do not know how to help at all with that (or which function to use to remove elements from a dictionary), but I believe this code was not there in V3.

Cheers!

EDIT: According to
https://docs.godotengine.org/en/stable/classes/class_dictionary.html
replacing "remove" by "erase" seems to fix the issue. Hope it helps.