Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

The relative's data for those dogs and horses is empty of any relation, so it was not a pregnancy that caused it. Rather in the vanilla game sexdescriptions.gd calls getrelativename(), which has the side effect of creating entries in relativesdata for people who do not have entries already. Cleaning up the hidden data has been a relatively recent goal of mine, so there is still likely lots of such data.

(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.