- you can have maybe 2 kids simultaneously (since girls have 2 breasts). age limit is from 0 to 6. maybe for African blood male/futa getting breast fed will give chance to get BBC trait. while the girls can have a small chance of getting black curiosity, if her mom is fucking BBC while breastfeeding her. breast feeding will give stats to the baby (0-6 years old).
- A Decision/Scenario/Laws that forbid feeding white male babies, maybe feed them with BBC's Cum instead. the result of doing this is, white male babies will gain some sort penalty/trait (black curiosity).
- Tattoo "Black Baby Feeders" or "Black Baby Only"
the idea for the UI: if you at the relation page inside window_character.gui it should display 2 empty boxes (floating, you can drag and drop, always shows on top of other window). only shows for lactating adult female. add lactation mechanics. UI also should display the lactation amount of the character.
setup a new relation like ward and guardian. make character interaction for player character and court character just like education. make custom UI window for it. slot 1 slot 2 can be left breast and right breast. try to get the portrait shown from behind to mimic breast feeding. could also show amount of milk
investigate this:
widget = {
name = "first_row"
layoutpolicy_horizontal = expanding
layoutpolicy_vertical = expanding
maximumsize = { -1 110 }
scissor = yes
hbox = {
vbox_character_row_item = {
name = "wards"
visible = "[CharacterWindow.GetCharacter.IsAdult]"
layoutpolicy_vertical = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'ward' ) )]"
}
blockoverride "header_text"
{
text = "WARDS_LABEL"
}
blockoverride "expand_button" {}
### WARD FINDER
blockoverride "find_partner"
{
### FIND WARD FOR ME
fixedgridbox = {
name = "educate_ward"
datamodel = "[GetNullCharacterDataModel( CharacterWindow.CalcUnusedRelationSlots( GetRelation( 'ward' ), '(int32)2' ) )]"
visible = "[Character.IsPlayerInteractionShown('educate_child_interaction')]"
flipdirection = yes
addcolumn = 85
addrow = 90
maxverticalslots = 1
item = {
container = {
portrait_head_small = {
blockoverride "portrait_button_template_onclick"
{
onclick = "[CharacterWindow.GetCharacter.OpenPlayerInteraction( 'educate_child_interaction' )]"
button_icon = {
parentanchor = center
alwaystransparent = yes
size = { 26 26 }
position = {-2 -4}
texture = "gfx/interface/icons/flat_icons/plus.dds"
}
}
blockoverride "portrait_button_template_tooltip"
{
tooltip = "[CharacterWindow.GetCharacter.GetPlayerInteractionTooltip( 'educate_child_interaction' )]"
}
}
}
}
}
### FIND WARD FOR COURTIER
fixedgridbox = {
name = "find_ward"
datamodel = "[GetNullCharacterDataModel( CharacterWindow.CalcUnusedRelationSlots( GetRelation( 'ward' ), '(int32)2' ) )]"
visible = "[Character.IsPlayerInteractionShown('offer_ward_interaction')]"
flipdirection = yes
addcolumn = 85
addrow = 90
maxverticalslots = 1
item = {
container = {
portrait_head_small = {
blockoverride "portrait_button_template_onclick"
{
onclick = "[CharacterWindow.GetCharacter.OpenPlayerInteraction( 'offer_ward_interaction' )]"
enabled = "[CharacterWindow.GetCharacter.IsPlayerInteractionValid( 'offer_ward_interaction' )]"
button_icon = {
parentanchor = center
alwaystransparent = yes
size = { 20 20 }
position = {-2 -5}
texture = "gfx/interface/icons/flat_icons/plus.dds"
}
}
blockoverride "portrait_button_template_tooltip"
{
tooltip = "[CharacterWindow.GetCharacter.GetPlayerInteractionTooltip( 'offer_ward_interaction' )]"
}
}
}
}
}
}
}
vbox_character_row_item = {
name = "diarch"
datacontext = "[CharacterWindow.GetCharacter.GetDiarchy.GetDiarch]"
visible = "[CharacterWindow.GetCharacter.HasActiveDiarchy]"
layoutpolicy_vertical = expanding
blockoverride "minimum_width" {
min_width = 120
}
blockoverride "gridbox" {
portrait_head_small = {
blockoverride "portrait_button"
{
using = tooltip_ne
}
blockoverride "glow_visible"
{
visible = no
}
}
}
blockoverride "header_text"
{
text = "[CharacterWindow.GetCharacter.GetDiarchTitle]"
max_width = 110
}
blockoverride "expand_button" {}
}
### LOVERS 5 PORTRAITS
vbox_character_row_relationship_item = {
name = "lovers_no_diarchy"
visible = "[And( And( CharacterWindow.GetCharacter.IsAdult, Not( CharacterWindow.GetCharacter.HasActiveDiarchy ) ), Not( GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) ) ), '(int32)0' ) ) )]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) )]"
}
blockoverride "header_text"
{
text = "LOVERS_LABEL"
}
blockoverride "remaining_items"
{
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)5' )]"
text = "[GetNumberAbove_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)5' )|=]"
}
blockoverride "expand_button_inside" {
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)5' )]"
onclick = "[CharacterWindow.ToggleExpandedRelation( 'lovers' )]"
}
blockoverride "gridbox_slots"
{
maxhorizontalslots = 5
}
}
### LOVERS 4 PORTRAITS (FOR WHEN REGENT OR ELDER PORTRAIT IS VISIBLE)
vbox_character_row_relationship_item = {
name = "lovers_diarchy"
visible = "[Or( And( And( CharacterWindow.GetCharacter.IsAdult, CharacterWindow.GetCharacter.HasActiveDiarchy ), Not( GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) ) ), '(int32)0' ) ) ), And( GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) ) ), '(int32)0' ), And( CharacterWindow.GetCharacter.IsAdult, Not( CharacterWindow.GetCharacter.HasActiveDiarchy ) ) ) )]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) )]"
}
blockoverride "header_text"
{
text = "LOVERS_LABEL"
}
blockoverride "remaining_items"
{
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)4' )]"
text = "[GetNumberAbove_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)4' )|=]"
}
blockoverride "expand_button_inside" {
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)4' )]"
onclick = "[CharacterWindow.ToggleExpandedRelation( 'lovers' )]"
}
blockoverride "gridbox_slots"
{
maxhorizontalslots = 4
}
}
### LOVERS 3 PORTRAITS (FOR WHEN REGENT AND ELDER PORTRAIT IS VISIBLE)
vbox_character_row_relationship_item = {
name = "lovers_diarchy_and_elder"
visible = "[And( And( CharacterWindow.GetCharacter.IsAdult, CharacterWindow.GetCharacter.HasActiveDiarchy ), GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) ) ), '(int32)0' ) )]"
layoutpolicy_vertical = expanding
layoutpolicy_horizontal = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) )]"
}
blockoverride "header_text"
{
text = "LOVERS_LABEL"
}
blockoverride "remaining_items"
{
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)3' )]"
text = "[GetNumberAbove_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)3' )|=]"
}
blockoverride "expand_button_inside" {
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'lover' ) ) ), '(int32)3' )]"
onclick = "[CharacterWindow.ToggleExpandedRelation( 'lovers' )]"
}
blockoverride "gridbox_slots"
{
maxhorizontalslots = 3
}
}
vbox_character_row_item = {
name = "guardian"
visible = "[Not(CharacterWindow.GetCharacter.IsAdult)]"
layoutpolicy_vertical = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'guardian' ) )]"
}
blockoverride "header_text"
{
text = "GUARDIAN_LABEL"
}
blockoverride "expand_button" {}
### GUARDIAN FINDER
blockoverride "find_partner"
{
### FIND GUARDIAN FOR ME
fixedgridbox = {
name = "educate_child"
datamodel = "[GetNullCharacterDataModel( CharacterWindow.CalcUnusedRelationSlots( GetRelation( 'guardian' ), '(int32)1' ) )]"
visible = "[Character.IsPlayerInteractionShown( 'educate_child_interaction' )]"
flipdirection = yes
addcolumn = 85
addrow = 90
maxverticalslots = 1
item = {
container = {
portrait_head_small = {
blockoverride "portrait_button_template_onclick"
{
onclick = "[CharacterWindow.GetCharacter.OpenPlayerInteraction( 'educate_child_interaction' )]"
button_icon = {
parentanchor = center
alwaystransparent = yes
size = { 20 20 }
position = {-2 -5}
texture = "gfx/interface/icons/flat_icons/plus.dds"
}
}
blockoverride "portrait_button_template_tooltip"
{
tooltip = "[CharacterWindow.GetCharacter.GetPlayerInteractionTooltip( 'educate_child_interaction' )]"
}
}
}
}
}
### GUARDIAN FINDER FOR COURTIER
fixedgridbox = {
name = "find_guardian"
datamodel = "[GetNullCharacterDataModel( CharacterWindow.CalcUnusedRelationSlots( GetRelation( 'guardian' ), '(int32)1' ) )]"
visible = "[Character.IsPlayerInteractionShown( 'offer_guardianship_interaction' )]"
flipdirection = yes
addcolumn = 85
addrow = 90
maxverticalslots = 1
item = {
container = {
portrait_head_small = {
blockoverride "portrait_button_template_onclick"
{
onclick = "[CharacterWindow.GetCharacter.OpenPlayerInteraction( 'offer_guardianship_interaction' )]"
enabled = "[CharacterWindow.GetCharacter.IsPlayerInteractionValid( 'offer_guardianship_interaction' )]"
button_icon = {
parentanchor = center
alwaystransparent = yes
size = { 26 26 }
position = {-2 -4}
texture = "gfx/interface/icons/flat_icons/plus.dds"
}
}
blockoverride "portrait_button_template_tooltip"
{
tooltip = "[CharacterWindow.GetCharacter.GetPlayerInteractionTooltip( 'offer_guardianship_interaction' )]"
}
}
}
}
}
}
}
vbox_character_row_item = {
name = "crushes"
visible = "[Not(CharacterWindow.GetCharacter.IsAdult)]"
layoutpolicy_vertical = expanding
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'crush' ) )]"
}
blockoverride "header_text"
{
text = "CRUSHES_LABEL"
}
blockoverride "expand_button" {}
}
### ELDER PORTRAIT
vbox_character_row_item = {
name = "elder"
visible = "[GreaterThan_int32( GetDataModelSize( CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) ) ), '(int32)0' )]"
layoutpolicy_vertical = expanding
blockoverride "minimum_width" {
min_width = 110
}
blockoverride "portrait_datamodel" {
datamodel = "[CharacterWindow.GetRelationsOfType( GetRelation( 'elder' ) )]"
}
blockoverride "header_text"
{
text = "ELDER_LABEL"
max_width = 75
}
blockoverride "expand_button" {}
}
expand = {}
}
}
{}
}
}
```