Jump to content

[mod] Noxbestia's Darkest Perversions


Recommended Posts

HELP: Am I missing Anyone?

 

As part of getting Darkest Perversions back online, I am trying to fix some bad coding as well as improve my compatibility with other mods.  I have compiled a list of all of the MODs that *I* know of that set any endowment sizes, as well as what flags they set. 

 

I need to know if I am missing any that should be added?

 

In looking at the code everyone is using, Aloha, Dark World, and DW ETOS all check for "has_global_flag = christ_enabled" and defer to it for breast assignment if that flag is found.  All I have found, but Dark World now use a size variable for trait inheritance & assignment.  Here is a breakdown of what MODs use what flags to indicate they have set a trait:

 

  1. ass (ass_size)
    1. dwet_ass_checked
    2. nox_patted_your_ass (also sets: dwet_ass_checked)
       
  2. balls (balls_size)
    1. aloha_ball_size_set (also sets: dw_junk_checked)
    2. dwet_balls_checked
    3. nox_fondled_your_balls (also sets: dwet_balls_checked aloha_ball_size_set )
       
  3. breasts (breast_size)
    1. christ_breast_size_set (also sets: nada_checked)
    2. dw_boobs_checked (does not use breast_size variable) (also sets: nada_checked)
    3. dwet_boobs_checked
    4. nada_checked
    5. nox_groped_your_breasts (also sets: dwet_boobs_checked, dw_boobs_checked, nada_checked, christ_breast_size_set)
       
  4. penis (dick_size)
    1. aloha_dick_size_set (also sets: dw_junk_checked)
    2. dw_junk_checked    (does not use dick_size variable)
    3. dwet_junk_checked
    4. nox_fluffed_your_cock (also sets: aloha_dick_size_set dw_junk_checked dwet_junk_checked)

Not everyone uses the same scale yet, nor the same traits, but NDPA should be able to adjust to that (currently untested code) by setting a rule saying which of three trait systems you want to use (default, DWET, or nox).

Link to comment
5 hours ago, noxbestia said:

HELP: Am I missing Anyone?

 

As part of getting Darkest Perversions back online, I am trying to fix some bad coding as well as improve my compatibility with other mods.  I have compiled a list of all of the MODs that *I* know of that set any endowment sizes, as well as what flags they set. 

 

I need to know if I am missing any that should be added?

 

In looking at the code everyone is using, Aloha, Dark World, and DW ETOS all check for "has_global_flag = christ_enabled" and defer to it for breast assignment if that flag is found.  All I have found, but Dark World now use a size variable for trait inheritance & assignment.  Here is a breakdown of what MODs use what flags to indicate they have set a trait:

 

  1. ass (ass_size)
    1. dwet_ass_checked
    2. nox_patted_your_ass (also sets: dwet_ass_checked)
       
  2. balls (balls_size)
    1. aloha_ball_size_set (also sets: dw_junk_checked)
    2. dwet_balls_checked
    3. nox_fondled_your_balls (also sets: dwet_balls_checked aloha_ball_size_set )
       
  3. breasts (breast_size)
    1. christ_breast_size_set (also sets: nada_checked)
    2. dw_boobs_checked (does not use breast_size variable) (also sets: nada_checked)
    3. dwet_boobs_checked
    4. nada_checked
    5. nox_groped_your_breasts (also sets: dwet_boobs_checked, dw_boobs_checked, nada_checked, christ_breast_size_set)
       
  4. penis (dick_size)
    1. aloha_dick_size_set (also sets: dw_junk_checked)
    2. dw_junk_checked    (does not use dick_size variable)
    3. dwet_junk_checked
    4. nox_fluffed_your_cock (also sets: aloha_dick_size_set dw_junk_checked dwet_junk_checked)

Not everyone uses the same scale yet, nor the same traits, but NDPA should be able to adjust to that (currently untested code) by setting a rule saying which of three trait systems you want to use (default, DWET, or nox).

For what it's worth - my next release (not the one I'm doing later tonight) is going to likely include the variable method that genericlogin and ngppgn talked about in another thread. So I'd say in about two weeks the dw_junk_checked and the dw_boobs_checked will use the variable on breasts and dicks.

 

Since my mod was inspired by Christianity, genericlogin's is the one that I strive to maintain size compatibility with (and our breasts sizes should be compatible, at least trait name wise - we might vary in what sizes we actually view as average, for example.)

Link to comment
4 hours ago, dewguru said:

For what it's worth - my next release (not the one I'm doing later tonight) is going to likely include the variable method that genericlogin and ngppgn talked about in another thread. So I'd say in about two weeks the dw_junk_checked and the dw_boobs_checked will use the variable on breasts and dicks.

 

Since my mod was inspired by Christianity, genericlogin's is the one that I strive to maintain size compatibility with (and our breasts sizes should be compatible, at least trait name wise - we might vary in what sizes we actually view as average, for example.)

 

That is phenomenal news!!!  You don't know how excited I am to hear that.

 

I'd love to see all of us on the same page in mechanics, even if we differ in naming.  Let me share some WIP code that I am using to deal with the current differences between the approaches, as well as the different naming we all use for our traits.  This may be wasted code if we can all agree on a naming scheme and number of traits per physical attribute, but I still think it is at least worth looking at the approach I took to the problem.  It is, in part, how I am making my stuff compatible with all of the different major MODs I have listed before (AGOT, HIP, CK2Plus, etc...).  

 

# pre-script for compatibility with different mechanics
nox_resets_breasts = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_breasts_DWET = yes
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_breasts_DW = yes
	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_breasts_NDPA = yes
	}
}

nox_resets_breasts_NDPA = {
	remove_trait = nox_micro_breasts		
	remove_trait = nox_tiny_breasts		
	remove_trait = nox_small_breasts		
	remove_trait = nox_regular_breasts	
	remove_trait = nox_big_breasts		
	remove_trait = nox_huge_breasts		
	remove_trait = nox_enormous_breasts	
	remove_trait = nox_gigantic_breasts
}

nox_resets_breasts_DW = {		
	remove_trait = gigantic_tits		# = nox_gigantic_breasts
	remove_trait = enormous_tits		# = nox_enormous_breasts
	remove_trait = huge_tits			# = nox_huge_breasts
	remove_trait = big_tits				# = nox_big_breasts
	remove_trait = regular_tits			# = nox_regular_breasts
	remove_trait = small_tits			# = nox_small_breasts
	remove_trait = tiny_tits			# = nox_tiny_breasts
	remove_trait = nox_micro_breasts	# = <no DW equivalent>
}

nox_resets_breasts_DWET = {
	remove_trait = gigantic_tits_DWET	# = nox_gigantic_breasts
	remove_trait = enormous_tits_DWET	# = nox_enormous_breasts
	remove_trait = huge_tits_DWET		# = nox_huge_breasts
	remove_trait = big_tits_DWET		# = nox_big_breasts
	remove_trait = regular_tits_DWET	# = nox_regular_breasts
	remove_trait = small_tits_DWET		# = nox_small_breasts
	remove_trait = tiny_tits_DWET		# = nox_tiny_breasts
	remove_trait = nox_micro_breasts	# = <no DWET equivalent>
}

I have a block of code like this for all 4 traits (penis, balls, breast, butt).  Since I couldn't 100% automate it, the player does have to start by setting a game rule that tells which system they want to use, but once that is set, then my code will assign the proper traits, or in the case of a missing traits, use my own in their place.  When I go to actually assign a trait, I have code like this:

 

nox_gives_you_gigantic_penis = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_penis = yes
		add_trait = dick_monstrous_DWET
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_penis = yes
		add_trait = nox_gigantic_penis	# no DW equivalent so using my trait

	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_penis = yes
		add_trait = nox_gigantic_penis

	}
}

nox_gives_you_enormous_penis = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_penis = yes
		add_trait = dick_horse_DWET
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_penis = yes
		add_trait = dick_horse
	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_penis = yes
		add_trait = nox_enormous_penis
	}
}

My current structure has 8 traits per attribute, based on an attribute_size number between 0 - 7 (rather than 1 -7) because I have use for "micro_*" traits.  Using 0 for micro, I generally maintain compatibility for those who are using the 1-7 scale from @generic login.  :smiley:

 

As you can see in the code below, aside from my own identifier on each trait like @Liqui Turtle uses in DWET, I have named all of my endowment traits with the same structure as the breasts in Christianity mod.  I miss the flavour of traits like dick_horse, but by doing it with way I did, all size 7 attributes regardless of breast, butt, balls, or cock, are  called "gigantic_traitname".  It makes long-term upkeep so much easier, but I would never ask anyone to give up their own personal style jsut to save a me bit of work.  :tongue:

nox_resets_ass_NDPA = {
	remove_trait = nox_micro_ass		# aka a flat ass
	remove_trait = nox_tiny_ass		
	remove_trait = nox_small_ass		
	remove_trait = nox_regular_ass	
	remove_trait = nox_big_ass		
	remove_trait = nox_huge_ass		
	remove_trait = nox_enormous_ass	
	remove_trait = nox_gigantic_ass
}

nox_resets_balls_NDPA = {
	remove_trait = nox_micro_balls		
	remove_trait = nox_tiny_balls		
	remove_trait = nox_small_balls		
	remove_trait = nox_regular_balls	
	remove_trait = nox_big_balls		
	remove_trait = nox_huge_balls		
	remove_trait = nox_enormous_balls	
	remove_trait = nox_gigantic_balls
}

nox_resets_breasts_NDPA = {
	remove_trait = nox_micro_breasts		
	remove_trait = nox_tiny_breasts		
	remove_trait = nox_small_breasts		
	remove_trait = nox_regular_breasts	
	remove_trait = nox_big_breasts		
	remove_trait = nox_huge_breasts		
	remove_trait = nox_enormous_breasts	
	remove_trait = nox_gigantic_breasts
}

nox_resets_penis_NDPA = {
	remove_trait = nox_micro_penis		
	remove_trait = nox_tiny_penis		
	remove_trait = nox_small_penis		
	remove_trait = nox_regular_penis	
	remove_trait = nox_big_penis		
	remove_trait = nox_huge_penis		
	remove_trait = nox_enormous_penis	
	remove_trait = nox_gigantic_penis
}

Finally, all of these things are "scripted effects" that are easily called from within event code.  Two "gotcha's" that I hit, I can hopefully save you from:

  1. The Christianity code assigns trait_size values for all attributes to everyone regardless of sex or traits, so that there is still proper genetic inheritance, but that only works if the person is still alive.  Once you die all variables are removed from your entry in the save file.  I solved this by giving each trait a hidden doppelganger trait with the _DNA suffix on it.  (That hasn't been added to my sample code above yet because I just started on that part tonight.)
  2. I use @Abominus's code for coming up with the score.  He starts it all with a "set_variable = { which = dick_size value = 7 }", but using that number the attribute sizes will steadily grow over time.  After many generations everything will be size 7 or near to it, save for RNG variations.  A 5 or 6 keeps global trait sizes more or less stable, and a 3 or 4 slowly shrinks them.  For my stuff, I have a check for a global flag that can be event-set to change the value to any of the three levels, based on whatever criteria I want to feed it.  

Of course, you are welcome to any of my code you wish and I'll gladly give you the rest of it should you want.  I hope to have this trait stuff finished and tested tomorrow, or Sunday at the latest, but I have company this weekend so I am... distracted.  ;)

 

 

 

Link to comment
3 hours ago, noxbestia said:

Finally, all of these things are "scripted effects" that are easily called from within event code.  Two "gotcha's" that I hit, I can hopefully save you from:

  1. The Christianity code assigns trait_size values for all attributes to everyone regardless of sex or traits, so that there is still proper genetic inheritance, but that only works if the person is still alive.  Once you die all variables are removed from your entry in the save file.  I solved this by giving each trait a hidden doppelganger trait with the _DNA suffix on it.  (That hasn't been added to my sample code above yet because I just started on that part tonight.)
  2. I use @Abominus's code for coming up with the score.  He starts it all with a "set_variable = { which = dick_size value = 7 }", but using that number the attribute sizes will steadily grow over time.  After many generations everything will be size 7 or near to it, save for RNG variations.  A 5 or 6 keeps global trait sizes more or less stable, and a 3 or 4 slowly shrinks them.  For my stuff, I have a check for a global flag that can be event-set to change the value to any of the three levels, based on whatever criteria I want to feed it.  

Of course, you are welcome to any of my code you wish and I'll gladly give you the rest of it should you want.  I hope to have this trait stuff finished and tested tomorrow, or Sunday at the latest, but I have company this weekend so I am... distracted.  ;)

 

 

 

 

Who else uses dick sizes that would be impacted if I renamed them? I had my breast sizes named like I did my dick sizes, but changed them to make life easier in terms of compatibility with genericlogin's Christianity mod.

 

If I'm not going to bork up a bunch of folks, I won't be opposed to redoing the dick traits as well.

 

Regarding the size scale that Abominus uses, I think I prefer a method that favors the average sizes (which I'd guess is 4), with breeding being key to having high chances of tiny or enormous results.

Link to comment
10 hours ago, noxbestia said:

 

That is phenomenal news!!!  You don't know how excited I am to hear that.

 

I'd love to see all of us on the same page in mechanics, even if we differ in naming.  Let me share some WIP code that I am using to deal with the current differences between the approaches, as well as the different naming we all use for our traits.  This may be wasted code if we can all agree on a naming scheme and number of traits per physical attribute, but I still think it is at least worth looking at the approach I took to the problem.  It is, in part, how I am making my stuff compatible with all of the different major MODs I have listed before (AGOT, HIP, CK2Plus, etc...).  

 


# pre-script for compatibility with different mechanics
nox_resets_breasts = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_breasts_DWET = yes
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_breasts_DW = yes
	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_breasts_NDPA = yes
	}
}

nox_resets_breasts_NDPA = {
	remove_trait = nox_micro_breasts		
	remove_trait = nox_tiny_breasts		
	remove_trait = nox_small_breasts		
	remove_trait = nox_regular_breasts	
	remove_trait = nox_big_breasts		
	remove_trait = nox_huge_breasts		
	remove_trait = nox_enormous_breasts	
	remove_trait = nox_gigantic_breasts
}

nox_resets_breasts_DW = {		
	remove_trait = gigantic_tits		# = nox_gigantic_breasts
	remove_trait = enormous_tits		# = nox_enormous_breasts
	remove_trait = huge_tits			# = nox_huge_breasts
	remove_trait = big_tits				# = nox_big_breasts
	remove_trait = regular_tits			# = nox_regular_breasts
	remove_trait = small_tits			# = nox_small_breasts
	remove_trait = tiny_tits			# = nox_tiny_breasts
	remove_trait = nox_micro_breasts	# = <no DW equivalent>
}

nox_resets_breasts_DWET = {
	remove_trait = gigantic_tits_DWET	# = nox_gigantic_breasts
	remove_trait = enormous_tits_DWET	# = nox_enormous_breasts
	remove_trait = huge_tits_DWET		# = nox_huge_breasts
	remove_trait = big_tits_DWET		# = nox_big_breasts
	remove_trait = regular_tits_DWET	# = nox_regular_breasts
	remove_trait = small_tits_DWET		# = nox_small_breasts
	remove_trait = tiny_tits_DWET		# = nox_tiny_breasts
	remove_trait = nox_micro_breasts	# = <no DWET equivalent>
}

I have a block of code like this for all 4 traits (penis, balls, breast, butt).  Since I couldn't 100% automate it, the player does have to start by setting a game rule that tells which system they want to use, but once that is set, then my code will assign the proper traits, or in the case of a missing traits, use my own in their place.  When I go to actually assign a trait, I have code like this:

 


nox_gives_you_gigantic_penis = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_penis = yes
		add_trait = dick_monstrous_DWET
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_penis = yes
		add_trait = nox_gigantic_penis	# no DW equivalent so using my trait

	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_penis = yes
		add_trait = nox_gigantic_penis

	}
}

nox_gives_you_enormous_penis = {
	if = { limit = { nox_sizetrait_DWET = yes }
		nox_resets_penis = yes
		add_trait = dick_horse_DWET
	}
	if = { limit = { nox_sizetrait_DW = yes }
		nox_resets_penis = yes
		add_trait = dick_horse
	}
	if = { limit = { nox_sizetrait_NDPA = yes }
		nox_resets_penis = yes
		add_trait = nox_enormous_penis
	}
}

My current structure has 8 traits per attribute, based on an attribute_size number between 0 - 7 (rather than 1 -7) because I have use for "micro_*" traits.  Using 0 for micro, I generally maintain compatibility for those who are using the 1-7 scale from @generic login.  :smiley:

 

As you can see in the code below, aside from my own identifier on each trait like @Liqui Turtle uses in DWET, I have named all of my endowment traits with the same structure as the breasts in Christianity mod.  I miss the flavour of traits like dick_horse, but by doing it with way I did, all size 7 attributes regardless of breast, butt, balls, or cock, are  called "gigantic_traitname".  It makes long-term upkeep so much easier, but I would never ask anyone to give up their own personal style jsut to save a me bit of work.  :tongue:


nox_resets_ass_NDPA = {
	remove_trait = nox_micro_ass		# aka a flat ass
	remove_trait = nox_tiny_ass		
	remove_trait = nox_small_ass		
	remove_trait = nox_regular_ass	
	remove_trait = nox_big_ass		
	remove_trait = nox_huge_ass		
	remove_trait = nox_enormous_ass	
	remove_trait = nox_gigantic_ass
}

nox_resets_balls_NDPA = {
	remove_trait = nox_micro_balls		
	remove_trait = nox_tiny_balls		
	remove_trait = nox_small_balls		
	remove_trait = nox_regular_balls	
	remove_trait = nox_big_balls		
	remove_trait = nox_huge_balls		
	remove_trait = nox_enormous_balls	
	remove_trait = nox_gigantic_balls
}

nox_resets_breasts_NDPA = {
	remove_trait = nox_micro_breasts		
	remove_trait = nox_tiny_breasts		
	remove_trait = nox_small_breasts		
	remove_trait = nox_regular_breasts	
	remove_trait = nox_big_breasts		
	remove_trait = nox_huge_breasts		
	remove_trait = nox_enormous_breasts	
	remove_trait = nox_gigantic_breasts
}

nox_resets_penis_NDPA = {
	remove_trait = nox_micro_penis		
	remove_trait = nox_tiny_penis		
	remove_trait = nox_small_penis		
	remove_trait = nox_regular_penis	
	remove_trait = nox_big_penis		
	remove_trait = nox_huge_penis		
	remove_trait = nox_enormous_penis	
	remove_trait = nox_gigantic_penis
}

Finally, all of these things are "scripted effects" that are easily called from within event code.  Two "gotcha's" that I hit, I can hopefully save you from:

  1. The Christianity code assigns trait_size values for all attributes to everyone regardless of sex or traits, so that there is still proper genetic inheritance, but that only works if the person is still alive.  Once you die all variables are removed from your entry in the save file.  I solved this by giving each trait a hidden doppelganger trait with the _DNA suffix on it.  (That hasn't been added to my sample code above yet because I just started on that part tonight.)
  2. I use @Abominus's code for coming up with the score.  He starts it all with a "set_variable = { which = dick_size value = 7 }", but using that number the attribute sizes will steadily grow over time.  After many generations everything will be size 7 or near to it, save for RNG variations.  A 5 or 6 keeps global trait sizes more or less stable, and a 3 or 4 slowly shrinks them.  For my stuff, I have a check for a global flag that can be event-set to change the value to any of the three levels, based on whatever criteria I want to feed it.  

Of course, you are welcome to any of my code you wish and I'll gladly give you the rest of it should you want.  I hope to have this trait stuff finished and tested tomorrow, or Sunday at the latest, but I have company this weekend so I am... distracted.  ;)

 

 

 

A bit of optimisation and elegance improvements:

 

Can you use else_if instead of multiple ifs?

If all the traits of a given attribute are opposites of each other, instead of doing remove_trait = X seven times you can do 

add_trait = X remove_trait = X since adding the trait will automatically remove all of the opposites.

Link to comment
6 hours ago, ngppgn said:

A bit of optimisation and elegance improvements:

 

Can you use else_if instead of multiple ifs?

If all the traits of a given attribute are opposites of each other, instead of doing remove_trait = X seven times you can do 

add_trait = X remove_trait = X since adding the trait will automatically remove all of the opposites.

I greatly appreciate your optimization and elegance tips and use them when I can.   Unfortunately, in order to maintain cross-mod compatibility I can't rely on the opposite_trait mechanics.  If all of us used the same names for our traits, and each of us had all 8 traits per attribute then I could.  Even now, I could use them in the *_NOX sections but not the *_DW or *_DWET sections since none of those traits know about the other variants that they don't have.  Also, for right now I am keeping the code as uniform as possible for ease of mass-changes (like having to add the *_DNA traits) and troubleshooting.

 

EDIT: Even if we all used the same names, several of us use the opposite_trait mechanics for opinion modifiers and so not all of the traits are made opposites of each other.  In this case, I think it best to keep with the explicit removes.

 

As for if_else, I do use those a lot, but not everywhere.  The trait evaluation code, for example:

nox_evaluates_ass_size = {
	if = {
		limit = {
			check_variable = { which = ass_size value >= 7 }
		}
		nox_gives_you_gigantic_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 6 }
		}
		nox_gives_you_enormous_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 5 }
		}
			nox_gives_you_huge_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 4 }
		}
			nox_gives_you_big_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 3 }
		}
			nox_gives_you_regular_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 2 }
		}
			nox_gives_you_small_ass = yes
	}
	else_if = {
		limit = {
			check_variable = { which = ass_size value >= 1 }
		}
			nox_gives_you_tiny_ass = yes
	}
	else = {
		nox_gives_you_micro_ass = yes	# aka a flat ass
	}	
}

EDIT: There are other inconsistencies that I also need to account for, so I also try to make my code a bit more "bulletproof" than if I was just coding for my own MODs.  I have to overcome things like DWET.60 which has code for removing "balls_monstrous" but @Liqui Turtle mod doesn't actually have said trait in it.

Link to comment
20 hours ago, noxbestia said:

The Christianity code assigns trait_size values for all attributes to everyone regardless of sex or traits, so that there is still proper genetic inheritance, but that only works if the person is still alive.

 

In Christianity Mod, that happens at birth. I didn't realize that character variables get removed when a character dies, but it's not going to happen very often that one of a character's parents dies before they're born.

Link to comment
14 minutes ago, genericlogin said:

 

In Christianity Mod, that happens at birth. I didn't realize that character variables get removed when a character dies, but it's not going to happen very often that one of a character's parents dies before they're born.

I try to think of 1-off cases like that (probably because of all these years in IT).  In this case, I had two choices: 1) ignore it and let a dead parent give average_trait sizes OR 2) redo the whole thing with 32 new hidden traits.  I am sure you can guess which route *I* went.  :tongue:

 

So... 32 new traits later, I have what I believe to be a very sweet system that keeps the core of your functionality, but extends it to dead parents.  It has one other potential use, and that is multi-generational evaluation.  The code that I had previous abandoned when I saw your updated code was being written to go back 3 generations on each side.  It was gonna be sweet, but do people really care enough to want 3 generations of sexual endowment characteristics averaged?  I might be the only CK2 player who would even think to care about that.  I'm probably also the only one who has set their new game on_actions to assign traits to people over 80 first, then those over 60, then those over 40, and so on jsut so I have more chance of having inherited values for younger characters. :open_mouth:

 

With your permission, once I have this code debugged, optimised, and examined by yourself and anyone else with an interest, I would like to post it as a "recommended standard" for anyone who wants to use it.  (Hopefully that doesn't make me sound too full of myself... I'm not really a futa afterall.)  :cold_sweat: 

Link to comment

I Was Wrong About CK2 Death Mechanics!

 

@genericlogin@dewguru @ngppgn @Abominus @Liqui Turtle While it is true that all flags and variables are not included in the save file for a dead character, while the game is still running the flags and variables remain!  Sexual endowment DNA traits and code is NOT necessary!  The only way a value will be lost is if you save and reload before a child with a dead father is born.

Link to comment
17 hours ago, noxbestia said:

I Was Wrong About CK2 Death Mechanics!

 

@genericlogin@dewguru @ngppgn @Abominus @Liqui Turtle While it is true that all flags and variables are not included in the save file for a dead character, while the game is still running the flags and variables remain!  Sexual endowment DNA traits and code is NOT necessary!  The only way a value will be lost is if you save and reload before a child with a dead father is born.

My small scripting OCD jumps at the thought of that potential loss of information - but what do you mean by dna code and traits?

Link to comment
2 hours ago, ngppgn said:

My small scripting OCD jumps at the thought of that potential loss of information - but what do you mean by dna code and traits?

I had created 32 traits with the _DNA suffix so that genital endowment scores could be kept for dead characters, not knowing that variables and flags for dead characters remain until you reload from a save.  However, since they do remain, there was no longer any need for the complicated code and those 32 new (hidden) traits.  In the extremely rare instance that a parent dies before the child has been born AND the game is loaded from a save after the parent died but before the child is born, then that child will not get any genital value inheritance from the deceased parent.

Link to comment
24 minutes ago, noxbestia said:

I had created 32 traits with the _DNA suffix so that genital endowment scores could be kept for dead characters, not knowing that variables and flags for dead characters remain until you reload from a save.  However, since they do remain, there was no longer any need for the complicated code and those 32 new (hidden) traits.  In the extremely rare instance that a parent dies before the child has been born AND the game is loaded from a save after the parent died but before the child is born, then that child will not get any genital value inheritance from the deceased parent.

I've worked it where if a dead father's variable is lost via the death/save/load, it'll just default to an average score. Just as a precaution.

Link to comment
5 hours ago, dewguru said:

I've worked it where if a dead father's variable is lost via the death/save/load, it'll just default to an average score. Just as a precaution.

In the end, I handled it similar, but instead of the default value I used the following scripted effect (with variants for all 4 body attributes) in its place:

 

nox_random_penis_change = {
    random_list = {
          8 = { subtract_variable = { which = dick_size value = 4 } }  # what have I done?
         16 = { subtract_variable = { which = dick_size value = 3 } }  # why me?
         32 = { subtract_variable = { which = dick_size value = 2 } }  # no!
         64 = { subtract_variable = { which = dick_size value = 1 } }  # erf! :(
        128 = {} # no change                                            # meh, whatever.
         64 = { change_variable = { which = dick_size value = 1 } }    # cool! :)
         32 = { change_variable = { which = dick_size value = 2 } }    # yes!
         16 = { change_variable = { which = dick_size value = 3 } }    # murr!
          8 = { change_variable = { which = dick_size value = 4 } }    # oh my!!!
    }
}

 

Link to comment

What is this mod doing in the history files? I was trying to get the whole Dark World pack of mods to work with the Princes of Darkness mod and it seems like everything works fine together except this one. Which cause there to be no provinces selectable at start if Princes of Darkness is also running.

Link to comment

 

1 hour ago, Bookworm83 said:

What is this mod doing in the history files? I was trying to get the whole Dark World pack of mods to work with the Princes of Darkness mod and it seems like everything works fine together except this one. Which cause there to be no provinces selectable at start if Princes of Darkness is also running.

Most of the history\title files can be removed for now.  In the current development version the only ones I still have in there are: d_horsebeast, d_studranch, d_holy_orgy.

 

Link to comment

No real progress to report (mostly) due to work, but I have spent some time playing with Christianity Mod enabled and looking at the causes of incompatibility and thinking about how to fix them.  I am hoping to get back to it in full swing this weekend.

Link to comment

Update: Encouraging Progress Today!

 

I think I have finally fixed the problems with an overabundance of micro_traits being assigned!  This has been biting me in the butt since my last preview release months ago.  I still have more tests to run on it later tonight to be sure endowment variables are working as expected for multiple generations, and also to make sure that with lots of living ancestors the recursion doesn't break.  I'll probably post more about it later.

 

 

Unofficial Endowment Standard Adopted

 

As I have been discussing, I have decided to embrace a single naming convention for endowment traits.  All 32 of my endowment traits have been renamed to <size>_<trait>, just like the breast traits in Christianity MOD (and Dark World Reborn).  I chopped the nox_ prefix off of all of them in hopes that more of the moders who use their own endowment systems will accept this naming convention and improve cross-compatibility.  Regardless, for NDPA I still have the rules-based option of using mine, @dewguru's, or @Liqui Turtle's trait naming systems so as to maintain compatibility with those mods.  Credit to @genericlogin, of course, for unintentionally inspiring me to do everything this way.

 

FYI: The variables are set for a value of "0" for micro to "7" for gigantic, which is compatible with all in-use systems I know about. 

variable: ass_size      variable: balls_size    variable: breast_size   variable: dick_size
    micro_ass               micro_balls             micro_tits              micro_dick
    tiny_ass                tiny_balls              tiny_tits               tiny_dick
    small_ass               small_balls             small_tits              small_dick
    regular_ass             regular_balls           regular_tits            regular_dick
    big_ass                 big_balls               big_tits                big_dick      
    huge_ass                huge_balls              huge_tits               huge_dick
    enormous_ass            enormous_balls          enormous_tits           enormous_dick
    gigantic_ass            gigantic_balls          gigantic_tits           gigantic_dick

 

Link to comment

Nice. Just maake sure that when you assign traits, variables values are already in place, since an unset variable will behave ashaving a value of 0, which in turn would reflect in micro-atrributes being shown.

 

Any idea as to what remains to be done for a new preview to be releasable?

Link to comment
7 minutes ago, ngppgn said:

Nice. Just maake sure that when you assign traits, variables values are already in place, since an unset variable will behave ashaving a value of 0, which in turn would reflect in micro-atrributes being shown.

 

Any idea as to what remains to be done for a new preview to be releasable?

I have a "0 case" covered.  I also cover whether your parent(s) are alive or dead, and whether or not you even have parent(s).  :smile:

 

I disabled a lot of stuff since everything went to Hell on me around September 30th.  After I am done testing this (assuming it passes), I'll start adding stuff back in.  It all depends on how many problems I hit getting functionality at least back to where it was.  

 

 

Link to comment
3 hours ago, noxbestia said:

Update: Encouraging Progress Today!

 

<---snip--->I still have more tests to run on it later tonight to be sure endowment variables are working as expected for multiple generations, and also to make sure that with lots of living ancestors the recursion doesn't break.<---snip--->

 

The recursion works as desired!  Below are two little clips from the game log (with debugging on):

  1. starting with a kid (Gartiza Ximenez)
    1. the script looks at his father
    2. father doesn't have stats so it looks at grandfather.
    3. grandfather doesn't have stats and no living ancestors so it randomizes him.
    4. returns to the father and calculates his paternal stats and randomizes his maternal ones
    5. returns to the kid and calculates his paternal stats and randomizes his maternal ones.
  2. some time later it comes to Gartiza's brother (Eneko Ximenez)
    1. father already has stats from before
    2. randomizes stats for the missing mother
    3. generates Eneko's stats

 

------------------
Gartzia Ximenez endowment calculations started...
Ximeno Lopez endowment calculations started...
Duke Lope II of Gascogne endowment calculations started...
Duke Lope II of Gascogne: NO FATHER AND NO REAL_FATHER
Duke Lope II of Gascogne: NO MOTHER
Duke Lope II of Gascogne endowment calculations finished...
------------------
Ximeno Lopez: NO MOTHER
Ximeno Lopez endowment calculations finished...
------------------
Gartzia Ximenez: NO MOTHER
Gartzia Ximenez endowment calculations finished...
------------------
------------------
Eneko Ximenez endowment calculations started...
Eneko Ximenez: NO MOTHER
Eneko Ximenez endowment calculations finished...
------------------

Then, I turned off the final randomizer so that I could gauge pure inheritance, and ran 3 more times.  The third run I married two known characters and had them produce two children.  The results were as expected, with the chidlren having exactly the same scores because the final random was off and both parents had generated scores.  The total values were slowly growing because I had Hentai rules turned on which gives all attributes a 2 point bonus each generation.  Fortunately, the randomizer will help counter that some, but I may ahve to rethink my numbers after 15 generations.  We'll see.  :smile:

run 1:
    Duke Lope:          1       1.5     1.5     1
    Ximeno Lopez:       1       1.75    1.25    1.5
    Gartzia Ximenez:    1       1.875   2.125   3.375
    Eneko Ximenez:      1       1.875   1.125   2.75

run 2:
    Duke Lope:          1       0.5     2       0
    Ximeno Lopez:       1.5     1.25    2.5     1
    Gartzia Ximenez:    1.25    1.625   1.75    1.5
    Eneko Ximenez:      1.75    1.625   3.25    1.5

run 3:
    Duke Lope:          1       1.5     3       1
    Ximeno Lopez:       0.5     1.75    5       1.5
    Gartzia Ximenez:    0.75    1.875   1.375   2.5
    Eneko Ximenez:      1.25    2.375   2       1.75
    Princess Gisela:    1.5     2.5     2.75    1.25 
*** Married Eneko to Gisela and had two children:
    Aldontza:           2.375   3.437   3.375   2.5
    Emili:              2.375   3.437   3.375   2.5

So in the end, this is working as expected.  Unfortunately, @dewguru used "cock_score" instead of "dick_score" so those calculations aren't cross-compatible without further code.  I discovered that because I didn't have an on_birth entry setup yet and his ran for the two new children.

 

Still, this has been a very successful bit of progress!  :smile: 

 

 

Link to comment

Elusive Bugs (or over 12 hours straight troubleshooting)

 

At 5 AM, after at least four different total game restarts and over 12 hours of playing and tweaking code for a specific function, I finally found the problem with that function and know what I need to do to fix it.  This particular code will be used to keep the ghostfuckers under control, as well as keep any matriarchal dynasties from going extinct.  This is especially important for the Amazon dynasties and the various daughters_of_sheba dynasties that form the backbone of some of the sexual religions' high priestess hierarchy.

 

I am glad I was being so obsessive about this function because the bug would have also negatively affected other sex functions in my mod yet most likely gone unnoticed in most cases.

 

I still don't have an ETA for the next upload.  As soon as I activate the "rest" of the Darkest Perversions code everything blows up.  Rather than simply disable more functionality so I can upload something, I am working through things one step at a time and fixing them.

 

 

TECHNICIAL DETAILS:

(for the code curious or those who don't want to repeat my mistakes)

 

The scripted trigger that was causing the problem was used for both the top and the bottom in a sex scene.  In that case, it was replying on flags having been set, which in many use cases would not be set.  The solution was to split it into two different triggers that didn't need flags to be set.  Below is the bad function with my note to myself from 5 AM.  After it are the two scripted triggers that replace it.

nox_can_fuck_vaginal = {
	nox_in_chastity = no
	OR = {
		NOT = { has_character_flag = nox_is_restrained }	
		has_character_flag = nox_is_restrained_rapable
	}
	OR = {
		#penetrator
		AND = {
			has_character_flag = nox_is_penetrating
			nox_has_working_penis = yes
		}
		
		#penetrated
		AND = {
			is_female = yes
			NOT = { has_character_flag = nox_is_penetrating }
			# CHARACTER FLAGS ARE BREAKING THIS BECAUSE THEY ARE NOT SET STUPID!!!
		}
	}
}

replaced by:

nox_can_fuck_vaginally = {
	nox_in_chastity = no
	nox_has_working_penis = yes
	OR = {
		NOT = { has_character_flag = nox_is_restrained }	
		has_character_flag = nox_is_restrained_rapable
	}
}

nox_can_be_fucked_vaginally = {
	is_female = yes
	nox_in_chastity = no
	OR = {
		NOT = { has_character_flag = nox_is_restrained }	
		has_character_flag = nox_is_restrained_rapable
	}
}

 

By relying on flags like the first version was doing, the trigger could not be used to select a male random impregnator; it would only select futas if trying to find a random father.  So rather than one trigger that needs flags set for who is getting fucked and who is doing the fucking, we switched to two different triggers and call the correct trigger for the appropriate participant in a scenario.

 

This also had to be done for the oral (felatio only) and anal sex triggers, which had the same bug but would never have affected impregnation (unless I add cock tongues and mouth vaginas, which you know... hentai and/or furries!).

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use