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.
Viewing post in Learning Deviant trait by editing game files
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.