Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs

Sericha

15
Posts
1
Following
A member registered 98 days ago

Recent community posts

(1 edit)

Hmm not quite as bad as I thought... 

Only minor changes to constructor.gd, basically I moved the <type>_race_arrays out of the set genealogy function so that I could look at them in globals, rather than rebuilding the arrays myself. (edit: I am also using the arrays in multiple functions within constructor itself, but that is for an entirely different unfinished thing)

I added entries to races.gd for each of the animal types, a little bit of work to prevent characters generating with an animal race but not that hard, most character generation is either already filtered or used globals.allracesarray when generating characters, so I just had to prevent the animal races from being populated into that array.

For globals.gd I did the aforementioned filtering to keep animal races out of allracesarray
had to make major changes to the impregnation, race_breed_compatible, and fertilize_egg functions, 
as well as adding another array for race groups to be used with the getracebygroup function, including adding addition group filters to said function 

And lastly in every file that calls globals.impregnation without providing a father person, I had to add a new input to target either a specific race or group of races to generate a father from.

Aric if I can get my internet to cooperate I will try to send the changes on discord, if you need them. It would be quite the wall of text to post it here.

So I had to basically rewrite the entire breeding code... again, but I have managed to get my drow slave to breed with a kennel hound while sleeping in the kennel an produce a healthy baby halkin wolf/drow. It will take a little while for me to isolate all the changes to make that happen.

Hmm, I think I know what that is from, I had looked it up when someone posted the same error in another thread. Theirs was at 1131, but I imagine that just means you have an extra line of code somewhere before that in your version of globals.gd. The error in question is most likely a result of the impregnation function not being passed a "father" person, like would happen during most of the sex jobs, or randomly to someone being a housepet or sleeping in the kennel. The random events that involve sex with a random "male" character that isn't you or a slave will also pass no father to that function.

Original impregnation would create a random generic person to be the father in those cases but the edits to how breeding slaves works broke that functionality. I have made a bunch of changes to that function and the ones that use the outputs from it myself, but haven't gotten around to testing them yet, if they work when I do test them I will post them.

(2 edits)

Maybe

If you have notepad++ search all strive files for 
.sex ==
.sex !=
and probably 'male', 'female', 'futa', and 'futanari'

that will show you most if not all of the checks for gender.

The main difference between a futa and a dickgirl specifically is that a futa had both a pussy, and a dick, and maybe balls
 where a dickgirl just has a cock and balls.

Why stop at just one stat boosting trait? before I restarted due to mod updates I was in the process of breeding with strong, quick, responsive, and robust.
Also you can use mutate to give any person scales or fur and then augment it.
Mutate can also get multiple good traits onto a single slave to make for an easy starting point for breeding.

(2 edits)

Possible yes, I would argue it probably wouldn't even be all the difficult, tedious maybe but not exceptionally difficult.

as it is right now you can give a male character boobs with majorus potions (or cheating by editing the save file), though that is a fairly surface difference, and requires you to fill in the gaps, as far as the narrative goes.


I imagine you mean having them randomly generate, and actually be referenced as such in game.

in that case aesthetically you would just need to decide on what to call it, what the gender pronouns for the dialogue replacers would be, and give them a gender icon. I think setting all that up would be reasonably simple, but I don't know where everything that needs to be added lives.

 As for mechanically you need to add it to the character generation "if/else" trees for breasts so they generate larger than masculine, or from the mother rather than the father in the case of breeding (fairly simple change could actually streamline that part of the code the way I'm thinking it would look).
And the automatic reassignment from male to shemale when adding breasts to the character or changing from futa to shemale when changing the breasts or genitalia respectively (probably not too difficult either but  that raises the question of is a 'male' with any size of breasts over masculine shemale or do you set a size threshold, this does complicate existing things slightly but not overly so).

You would probably also want to set a rule toggle like exists for futa, or futa with balls, for those who don't necessarily want shemales to generate in their game, if you were to implement it for more than personal use. This one is not something I know how to do outside of the "editing the scripts directly" method.

I have changed my own globals.gd file but, I don't think my changes start until after line 2051 anyway  the lines at 1131, and 2014 both match up with being able to fire those errors so I imagine that I haven't added or removed any lines before them.

Assuming the lines are the same, both errors are exactly the same thing, trying to grab data from a father person that is currently null, so the question is what is the exact situation that is firing those errors, namely who is the father

I can see a dozen or so spots where no father is provided for the first error to occur aside from potential null persons, and the second error would be a direct result of the first one as the only place that calls the second erroring function in question gets the inputs for it from the stored output of the first errored function.

Also why are methods that defaults the inputs to null if they aren't passed a value not properly accounting for what happens when they are null (coding issue not on you)

(1 edit)

And while reviewing this post I realised that I didn't account for if you give away the baby or babies so you could either set it up in one of two ways first:

func _on_giveaway_pressed():
     birthingMother.preg.unborn_baby = []
     birthingMother.preg.baby_count = 0
     birthingMother.metrics.birth += 1
     birthingMother.preg.is_preg = false
     birthingMother.preg.duration = 0
     birthingMother.preg.ovulation_stage = 2
     birthingMother.preg.ovulation_day = -5
     birthingMother = null
     get_node("birthpanel").hide()

That should just delete all of the mother's remaining children when you can't or don't want to keep them, but won't allow you to pass on one and keep a later child

func _on_giveaway_pressed():
     birthingMother.preg.unborn_baby.erase(birthingMother.preg.unborn_baby[0])
     birthingMother.preg.baby_count -= 1
     if birthingMother.preg.baby_count > 0:
          childbirth(birthingMother, birthingMother.preg.unborn_baby[0].id)
     else:
          birthingMother.metrics.birth += 1
          birthingMother.preg.is_preg = false
          birthingMother.preg.duration = 0
          birthingMother.preg.ovulation_stage = 2
          birthingMother.preg.ovulation_day = -5
          birthingMother = null
          get_node("birthpanel").hide()

That should remove the baby being shown, then reload the panel for the next baby, but requires you to manually pass on every child

(3 edits)

I've managed to test twins (and quadruplets and quintuplets) and in every case only one child was ever actually born

The quad and quin were from the player, and a slave respectively, and were after I edited the fertilisation process to prevent ghost babies. (if the mother had ovulation type 2, or gave birth to eggs it would count the first 3 children twice.

I have managed to get the birthing of multiple children working though, with the same quad and quin that weren't working before. All 9 children were successfully born. To fix it instead of repeatedly calling the birthing function, I store the birthing mother in the same manor as the baby being born, then at the end of the birthing function right before closing the birthing panel, if the mother has more children to birth I  call the start of the function.

There are 3 relevant blocks of code that were changed/moved to make all this work all of them are in the Mansion.gd file.

First I created a new variable right next to the baby variable above the childbirth function that I called birthing mother, it doesn't really matter where the variable is in the code long as it isn't in a function:

...

var baby
var birthingMother

func childbirth(person,baby_id):

...

next in the nextdayevents function right at the start where it checks for pregnant character to give birth, instead of calling the looping function I set the aforementioned birthingMother variable to the mother giving birth then call the childbirth function directly:

...

func nextdayevents():
     get_node("FinishDayPanel").hide()
     var player = globals.player
     if player.preg.duration > variables.pregduration && player.preg.is_preg == true:
          birthingMother = player
          childbirth(player, player.preg.unborn_baby[0].id)

          checkforevents = true
          return
     for i in globals.slaves:
          ###---Added by Expansion---### Hybrid Support
          if i.preg.baby != null && (i.preg.duration > variables.pregduration || (i.race.find('Goblin') >= 0 && i.preg.duration > variables.pregduration/2)):
               if i.race.find('Goblin') >= 0:
                    i.away.duration = 2
          ###---End Expansion---###
          else:
               i.away.duration = 3
          i.away.at = 'in labor'
          birthingMother = i
          childbirth(i, i.preg.unborn_baby[0].id)

          checkforevents = true
          return

...

finaly at the end of the babyage function after adding the baby to the list of slaves but before closing the panel I remove the newly born baby from the mother and then if there are any more children to be born call the clidbirth function again for the next baby that they are carrying:

...

     globals.slaves = baby
     globals.state.relativesdata[baby.id].name = baby.name_long()
     globals.state.relativesdata[baby.id].state = 'normal'

     globals.state.babylist.erase(baby)
     birthingMother.preg.baby_count -= 1
     birthingMother.preg.unborn_baby.erase(birthingMother.preg.unborn_baby[0])
     baby = null
  
     get_node("birthpanel/raise/childpanel").hide()
     if birthingMother.preg.baby_count > 0:
          childbirth(birthingMother, birthingMother.preg.unborn_baby[0].id)
     else:
          birthingMother.metrics.birth += 1
          birthingMother.preg.is_preg = false
          birthingMother.preg.duration = 0
          birthingMother.preg.ovulation_stage = 2
          birthingMother.preg.ovulation_day = -5
          birthingMother = null
          get_node("birthpanel").hide()

...


The bolded lines are the lines that I changed/added or moved from the original state.

currently she only has the two spells to teach in plus.

While electric shock was nice for taking out high health low stamina enemies, with the change from health stamina lust, to health mana lust, a spell that targets stamina isn't needed so it would need to be changed, or stamina added back in. That said I would like more spells to use in combat and am sure they will come in time.

The loss of stamina makes some of the enemies that were vulnerable to electric shock over anything else considerably more difficult to defeat quickly, (the ghosts in the graveyard for example) some way to deal with them would be nice.

Yeah I saw he mentioned fixing those like 8 pages or so back while looking for any other issues people have seen and have a fix for. Will be good when the update is finished.

As for the leak spell or numerous other fixes for lactating problems, many of those are treating the symptoms of the milk production being squared, (removing stored milk, reducing the maximum punishment from having too much milk etc.) rather than treating the underlying problem, that being milk production is being squared when they have any of the milk flow traits. It made a huge difference in the stress milk and lust gains for my lactating servants even without the other fixes, and prevents getting thousands of gold from one 'cow' with slightly larger sized udders and a milk flow trait.

As an aside, I wanted to put the code into the boxes others use but I don't know how to format things with itch.io's forum system as I've not used it before today and there is no formatting guide that i could find easily.
I also don't know html despite being a programmer knowing several other languages.

(5 edits)

So i've found (and fixed?) a few bugs in various parts of the mod.

First: the infinite crawling after equipping handcuffs (or other things if they can cause crawling).
It never resets the person.restrained back to none.

in expansion.gd : func updatePerson(person) : Check and Add Restraints section starting at line 184
I added person.restrained = "none" before the for loop that checks equipped items for restraints. It will just set if back to cuffed if it finds them still equipped.

#Check and Add Restraints
person.restrained = "none"
for i in person.gear.values():


Second: the excessive milk generation values when a character has a milk flow trait.
When calculating milk generation (or storage) when a trait to modify the value is present the end result simplifies to regen * round(regen * (1 + 0.2 * milk flow level))
So if regen were 5 (5 milk generated per day) instead of the expect 6 milk with milk flow 1 you get 30 milk.

In expansion.gd : func dailyLactation(person) : Traits section starting at line 2490
I removed the "regen *" from "regen = regen * traitmod" since if traitmod is > 0 it has already factored in the regen value. (and the same for the milkstorage part) 

#Traits

for i in person.traits:
     #Set Lactation Regen/Flow Traitline
     var trait = globals.origins.trait(i)
     if trait.tags.has('lactation-trait') && trait.tags.has('regentrait'):
          traitrank = globals.expansion.regentrait.find(i)
          if traitrank == 0:
               traitmod = round(regen*.5)
               text += "[color=red]Milk regeneration hampered by Trait: " + str(i) + ".[/color]\n"
          elif traitrank > 0:
               traitrank = 1+(traitrank*.2)
               traitmod = round(regen*traitrank)
               text += "[color=green]Milk regeneration increased by Trait: " + str(i) + ".[/color]\n"
     if traitmod > 0:
          regen = traitmod
     traitmod = 0
     if trait.tags.has('lactation-trait') && trait.tags.has('storagetrait'):
          traitrank = globals.expansion.storagetrait.find(i)
          if traitrank == 0:
               traitmod = round(milkstorage*.5)
               text += "[color=red]Milk gland capacity lessened by Trait: " + str(i) + ".[/color]\n"
          elif traitrank > 0:
               traitrank = 1+(traitrank*.2)
               traitmod = round(milkstorage*traitrank)
               text += "[color=green]Milk gland capacity increased by Trait: " + str(i) + ".[/color]\n"
     if traitmod > 0:
          milkstorage = traitmod

Technically traitmod is superfluous you could jet set regen or milkstorage to the value you set traitmod to in the same places you set traitmod.



Third: when getting consent for impregnation by family members it doesn't store the value.
This happens because it is trying to store the value in person.consentexp.incestpregnancy, when the actual variable would be person.consentexp.incestbreeder

it can be fixed by changing one of them to match the other, though since it is incestpregnancy only in the consent assignment and incestbreeder everywhere else changing incestpregnancy to incestbreeder makes more sense, at least unless you add impregnating a family member as a separate consent to being impregnated by a family member, though that bring a whole wack of other changes with it.

In statstab.gd : on lines 1167 and 1223

change : person.consentexp.incestpregnancy 
to : person.consentexp.incestbreeder