Jump to content

[mod] CBO Unofficial


Recommended Posts

Posted
Just now, bananatex09871 said:

my game just instatly crash and not report any crash flie

 

Hi, it should still update the file error.log, even if the game crashes.

Posted
Just now, bananatex09871 said:

here is the error log 

error.log 140.01 kB · 0 downloads

 


[19:36:56][E][jomini_script_system.cpp:284]: Script system error!
  Error: untyped trigger [ Scoped object of type 'character' is not valid (null weak (Character - 4294967295)!) ]
  Script location: Unknown

[19:37:00][E][gfx_dx11_base_buffer.cpp:68]: D3D error: hr returned: Not enough memory resources are available to complete this operation.

[19:37:00][E][pdx_assert.cpp:619]: Assertion failed: hr returned:
Not enough memory resources are available to complete this operation.

[19:37:00][E][gfx_dx11_master_context.cpp:416]: Failed creating buffer
[19:37:00][E][gfx_dx11_master_context.cpp:416]: Failed creating buffer

 

Seems like your are running out of vRAM.

Can you try download CBO Base and CBO Animation, and use those 2 instead of CBO Unofficial? (CBO Unofficial contains CBO Mesh which adds extra clothing, which take up a lot of vRAM)

Posted
Just now, csirke128 said:

 


[19:36:56][E][jomini_script_system.cpp:284]: Script system error!
  Error: untyped trigger [ Scoped object of type 'character' is not valid (null weak (Character - 4294967295)!) ]
  Script location: Unknown

[19:37:00][E][gfx_dx11_base_buffer.cpp:68]: D3D error: hr returned: Not enough memory resources are available to complete this operation.

[19:37:00][E][pdx_assert.cpp:619]: Assertion failed: hr returned:
Not enough memory resources are available to complete this operation.

[19:37:00][E][gfx_dx11_master_context.cpp:416]: Failed creating buffer
[19:37:00][E][gfx_dx11_master_context.cpp:416]: Failed creating buffer

 

Seems like your are running out of vRAM.

Can you try download CBO Base and CBO Animation, and use those 2 instead of CBO Unofficial? (CBO Unofficial contains CBO Mesh which adds extra clothing, which take up a lot of vRAM)

i was try cbo base and cbo animation before but they not work

Posted
1 minute ago, bananatex09871 said:

i was try cbo base and cbo animation before but they not work

 

Hmm, CBO Unofficial is CBO Base + Animation + Mesh, or you mean you also had similar crashes?

 

Can you try (temporarily) remove 

"CBO Unofficial\CBO Unofficial\gfx\models\portraits\f_clothes_rev"

"CBO Unofficial\CBO Unofficial\gfx\models\portraits\m_clothes_rev"

 

Maybe just removing the revealing clothing would be enough

Posted
2 minutes ago, csirke128 said:

 

Hmm, CBO Unofficial is CBO Base + Animation + Mesh, or you mean you also had similar crashes?

 

Can you try (temporarily) remove 

"CBO Unofficial\CBO Unofficial\gfx\models\portraits\f_clothes_rev"

"CBO Unofficial\CBO Unofficial\gfx\models\portraits\m_clothes_rev"

 

Maybe just removing the revealing clothing would be enough

i mean i also have similar crash when try cbo base+animation

Posted
Just now, bananatex09871 said:

i mean i also have similar crash when try cbo base+animation

 

Can you check if you have similar errors in error.log related to memory? Maybe the crash reason is different for that.

Posted
Just now, bananatex09871 said:

i didnt find out it

 

Can you share the error.log? So when the load order is

Carnalitas

CBO Unofficial Base

CBO Unofficial Animation

Better Barbershop

Better Barbershop CBO Extension

Posted
3 minutes ago, csirke128 said:

 

Can you share the error.log? So when the load order is

Carnalitas

CBO Unofficial Base

CBO Unofficial Animation

Better Barbershop

Better Barbershop CBO Extension

accidentally delete it,wait me run it with this load order and give you the error log

Posted
11 minutes ago, csirke128 said:

 

I think it might be crashing due to this now:

[20:39:25][E][pdx_gui_widget.h:1082]: [ObsoleteCppFunction] Widget not found: category_interaction_list

 

Can you remove:

Better Barbershop/gui/interaction_menu_window.gui

 

This file has category_interaction_list

is work,thank you so much :))

Posted
4 hours ago, Gav1in said:

Traits are not changing the character model when in the character creator menu

 

Hi, Yea its expected now, I was suspecting its causing the issue related to incorrect gene inheritance, so took it out in 1.7, but since then it turned out its caused by something else.

I'll try put it back later that they take effect in character creator later (maybe when new DLC drops)

Posted

Quick question; the bed has replaced my normal royal court. Is there a way around that, or is it just something to live with? I don't really care aside from the inability to place court artifacts.

Posted (edited)

Hey, I got a question. Is there a way to make custom morphs for cbo? I am decent at blender but dogshit in coding. I checked the file structure and can't figure out how. Any insights?

 

For example, I mean: Changing the way muscles look, maybe breast morphs or clothing etc.

Edited by marinara
Posted
27 minutes ago, CDiet said:

Quick question; the bed has replaced my normal royal court. Is there a way around that, or is it just something to live with? I don't really care aside from the inability to place court artifacts.

 

You probably have a mod that adds new court rooms, if not patched those will cause issues like that, can you share your load order?

Posted
18 minutes ago, marinara said:

Hey, I got a question. Is there a way to make custom morphs for cbo? I am decent at blender but dogshit in coding. I checked the file structure and can't figure out how. Any insights?

 

For example, I mean: Changing the way muscles look, maybe breast morphs or clothing etc.

 

Hi,

 

The way to add things to CK3 is usually to copy something thats already doing that. So to add new blendshapes, and triggers for them, you need to start with an existing one, and check how they are done.

The next thing is to use some search function to find references in other files, I usually use the total commander search in file function to find where things are referenced.

 

So to start out, the body is at:

"CBO Unofficial Base\gfx\models\portraits\female_body\female_body.mesh"

 

This file is referenced in

"CBO Unofficial Base\gfx\models\portraits\female_body\female_body.asset"

 

pdxmesh = {
    name = "female_body_mesh"
    file = "female_body.mesh"

 

In here, you have blendshapes:

 

For example, lets look at hips:

    blend_shape = { id = "female_bs_body_hips_max"                                    type = "blendshapes/female_bs_body_hips_max.mesh" }
    blend_shape = { id = "female_bs_body_hips_min"                                    type = "blendshapes/female_bs_body_hips_min.mesh" }

 

You first connect a mesh file to an identifier, then you need to connect that to an attribute:

    attribute = { name = "bs_body_hips_max"                                            blend_shape = "female_bs_body_hips_max" }
    attribute = { name = "bs_body_hips_min"                                            blend_shape = "female_bs_body_hips_min" }

 

The attributes are the way the blendshapes are controlled, and these attributes are common between objects, so you have the same  bs_body_hips_max in the male body asset file as well, but also the same for clothing, you will see these attributes referenced there.

 

For example:

"CBO Unofficial Mesh\gfx\models\portraits\f_clothes\byzantine\nob_01\f_clothing_secular_byzantine_nob_01.asset"

    attribute = { name = "bs_body_hips_max"                    blend_shape = "female_clothing_secular_byzantine_nobility_01_bs_hips_max" }
    attribute = { name = "bs_body_hips_min"                    blend_shape = "female_clothing_secular_byzantine_nobility_01_bs_hips_min" }

 

The main thing for blendshapes, are that you need to have the same vertex ordering in the file as the main mesh, and you don't need the skeleton, but even if you have the skeleton in the mesh, its not an issue.

 

Then based on the attribute, you can apply the blendshape, 0 value is original mesh, 1 value is the blendshape.

And these are additive, so you can have multiple of them take effect.

 

So to control this blendshape, we need genes:

"CBO Unofficial Base\common\genes\hips gene.txt"

 

    gene_bs_hips = {
        group = body
        hips = {
        index = 0
            male = {
                setting = {
                    attribute = "bs_body_hips_max"
                    curve = {
                        { 0.0   0.0 }
                        { 0.33   0.0 }
                        { 1.0   0.75 }
                    }   
                    age = age_preset_puberty
                }
                setting = {
                    required_tags = "hips_clothed,dressed"
                    attribute = "bs_body_hips_max"
                    curve = {
                        { 0.0   0.0 }
                        { 0.33   0.0 }
                        { 1.0   -0.15 }
                    }   
                    age = age_preset_puberty
                }
                setting = {
                    attribute = "bs_body_hips_min"
                    curve = {
                        { 0.0   0.25 }
                        { 0.33   0.0 }
                        { 1.0   0.0 }
                    }   
                    age = age_preset_puberty
                }
            }
            female = male
            boy = male
            girl = male
        }
    }

 

Here, we have a gene, and the gene can have a value between 0 and 1, and these values are then mapped to attributes with these curves.

 
					curve = {
						{ 0.0   0.0 }
						{ 0.33   0.0 }
						{ 1.0   0.75 }
					} 

 

So what this tells us, is 

at gene value 0, apply the blendshape with value 0

at gene value 0.33, apply the blendshape with value 0

at gene value 1.0, apply the blendshape with value 0.75

 

Inbetween these values, there is a curve fitted, but for simplicity just think of them as linear lines, so at 0.2, it will have a value of 0, but at 0.5, maybe its around 0.2 or smth.

 

So based on the above, you can see that hips_max has no effect between value 0 and 0.33, and hips min has no effect between 0.33 and 1.0

The hips_clothed part is there, so that when a character is wearing clothing, the body is shrunk a bit to prevent clipping.

 

There are 2 types of genes:

morph_genes = {
    gene_bs_hips = {

 

special_genes = {
    morph_genes = {
        gene_bs_pregnant = {

 

Normal morph genes are part of the character DNA, you can add them to the file:

"CBO Unofficial Base\common\ethnicities\00_ethnicities_templates.txt"

 

    ### hips ###
    gene_bs_hips = {
        5 =  { name = hips      range = { 0.00 0.14 } }
        11 = { name = hips      range = { 0.14 0.28 } }
        13 = { name = hips      range = { 0.28 0.42 } }
        11 = { name = hips      range = { 0.42 0.58 } }
        5 = { name = hips      range = { 0.58 0.72 } }
        2 = { name = hips      range = { 0.72 0.86 } }
        1 =  { name = hips      range = { 0.86 1.00 } }
    }

 

So for random new characters, the game will first roll a dice on the number before the first =, i think maybe its 52 sided or smth, then if its less tahn 5, it picks the first category, then it choses a random value between 0 and 0.14

So it just lets you have a bit more varied distribution, here its ment to be more like a bell curve, the extreme values are less likely then the average values.

 

There are characters with predefined DNA, these are stored at files like:

"CBO Unofficial Base\common\dna_data\00_dna.txt"

 

Here, for each character, there is a value set for that gene, I think if you dont set it, it gets a value of 0 or something like that, so I have a script that adds the CBO genes to these files (randomize_dna.py).

 

The other gene type is special genes, these genes cannot be edited in the ruler creator, and they are not part of the character DNA, so the way these are applied is through portrait modifiers.

 

So its not a blendshape, but one example is makeup:

makeup_base_customization = {
    interface_position = 17
    usage = customization
    no_makeup_base = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = no_makeup_base
                value = 0
            }
        }
    }
    makeup_base_full = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = makeup_base
                value = 1.0
            }
        }
    }    
    makeup_base_half = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = makeup_base
                value = 0.5
            }
        }
    }
}

 

This adds a new option in the barbershop, and then you can select between 3 different values, and when selected, it applies the gene with the value there.

 

It gets a bit more complicated with more details, but you will probably just need to mess around with things to understand a bit more how they work, let me know if you need some more info.

 

Posted
28 minutes ago, csirke128 said:

 

You probably have a mod that adds new court rooms, if not patched those will cause issues like that, can you share your load order?

My Carnalitas-related LO is #3, the others are just my complete (atm) load order. I don't think any add new court rooms, but I'll revise their pages to be sure. 

LoadOrder3.PNG

LoadOrder2.PNG

LoadOrder1.PNG

Posted
13 minutes ago, CDiet said:

My Carnalitas-related LO is #3, the others are just my complete (atm) load order. I don't think any add new court rooms, but I'll revise their pages to be sure. 

LoadOrder3.PNG

LoadOrder2.PNG

LoadOrder1.PNG

 

Hi, its probably More Holding Graphics

 

 

MHG CBO Patch 1.0.zip

Posted
3 hours ago, csirke128 said:

 

Hi,

 

The way to add things to CK3 is usually to copy something thats already doing that. So to add new blendshapes, and triggers for them, you need to start with an existing one, and check how they are done.

The next thing is to use some search function to find references in other files, I usually use the total commander search in file function to find where things are referenced.

 

So to start out, the body is at:

"CBO Unofficial Base\gfx\models\portraits\female_body\female_body.mesh"

 

This file is referenced in

"CBO Unofficial Base\gfx\models\portraits\female_body\female_body.asset"

 

pdxmesh = {
    name = "female_body_mesh"
    file = "female_body.mesh"

 

In here, you have blendshapes:

 

For example, lets look at hips:

    blend_shape = { id = "female_bs_body_hips_max"                                    type = "blendshapes/female_bs_body_hips_max.mesh" }
    blend_shape = { id = "female_bs_body_hips_min"                                    type = "blendshapes/female_bs_body_hips_min.mesh" }

 

You first connect a mesh file to an identifier, then you need to connect that to an attribute:

    attribute = { name = "bs_body_hips_max"                                            blend_shape = "female_bs_body_hips_max" }
    attribute = { name = "bs_body_hips_min"                                            blend_shape = "female_bs_body_hips_min" }

 

The attributes are the way the blendshapes are controlled, and these attributes are common between objects, so you have the same  bs_body_hips_max in the male body asset file as well, but also the same for clothing, you will see these attributes referenced there.

 

For example:

"CBO Unofficial Mesh\gfx\models\portraits\f_clothes\byzantine\nob_01\f_clothing_secular_byzantine_nob_01.asset"

    attribute = { name = "bs_body_hips_max"                    blend_shape = "female_clothing_secular_byzantine_nobility_01_bs_hips_max" }
    attribute = { name = "bs_body_hips_min"                    blend_shape = "female_clothing_secular_byzantine_nobility_01_bs_hips_min" }

 

The main thing for blendshapes, are that you need to have the same vertex ordering in the file as the main mesh, and you don't need the skeleton, but even if you have the skeleton in the mesh, its not an issue.

 

Then based on the attribute, you can apply the blendshape, 0 value is original mesh, 1 value is the blendshape.

And these are additive, so you can have multiple of them take effect.

 

So to control this blendshape, we need genes:

"CBO Unofficial Base\common\genes\hips gene.txt"

 

    gene_bs_hips = {
        group = body
        hips = {
        index = 0
            male = {
                setting = {
                    attribute = "bs_body_hips_max"
                    curve = {
                        { 0.0   0.0 }
                        { 0.33   0.0 }
                        { 1.0   0.75 }
                    }   
                    age = age_preset_puberty
                }
                setting = {
                    required_tags = "hips_clothed,dressed"
                    attribute = "bs_body_hips_max"
                    curve = {
                        { 0.0   0.0 }
                        { 0.33   0.0 }
                        { 1.0   -0.15 }
                    }   
                    age = age_preset_puberty
                }
                setting = {
                    attribute = "bs_body_hips_min"
                    curve = {
                        { 0.0   0.25 }
                        { 0.33   0.0 }
                        { 1.0   0.0 }
                    }   
                    age = age_preset_puberty
                }
            }
            female = male
            boy = male
            girl = male
        }
    }

 

Here, we have a gene, and the gene can have a value between 0 and 1, and these values are then mapped to attributes with these curves.

 
					curve = {
						{ 0.0   0.0 }
						{ 0.33   0.0 }
						{ 1.0   0.75 }
					} 

 

So what this tells us, is 

at gene value 0, apply the blendshape with value 0

at gene value 0.33, apply the blendshape with value 0

at gene value 1.0, apply the blendshape with value 0.75

 

Inbetween these values, there is a curve fitted, but for simplicity just think of them as linear lines, so at 0.2, it will have a value of 0, but at 0.5, maybe its around 0.2 or smth.

 

So based on the above, you can see that hips_max has no effect between value 0 and 0.33, and hips min has no effect between 0.33 and 1.0

The hips_clothed part is there, so that when a character is wearing clothing, the body is shrunk a bit to prevent clipping.

 

There are 2 types of genes:

morph_genes = {
    gene_bs_hips = {

 

special_genes = {
    morph_genes = {
        gene_bs_pregnant = {

 

Normal morph genes are part of the character DNA, you can add them to the file:

"CBO Unofficial Base\common\ethnicities\00_ethnicities_templates.txt"

 

    ### hips ###
    gene_bs_hips = {
        5 =  { name = hips      range = { 0.00 0.14 } }
        11 = { name = hips      range = { 0.14 0.28 } }
        13 = { name = hips      range = { 0.28 0.42 } }
        11 = { name = hips      range = { 0.42 0.58 } }
        5 = { name = hips      range = { 0.58 0.72 } }
        2 = { name = hips      range = { 0.72 0.86 } }
        1 =  { name = hips      range = { 0.86 1.00 } }
    }

 

So for random new characters, the game will first roll a dice on the number before the first =, i think maybe its 52 sided or smth, then if its less tahn 5, it picks the first category, then it choses a random value between 0 and 0.14

So it just lets you have a bit more varied distribution, here its ment to be more like a bell curve, the extreme values are less likely then the average values.

 

There are characters with predefined DNA, these are stored at files like:

"CBO Unofficial Base\common\dna_data\00_dna.txt"

 

Here, for each character, there is a value set for that gene, I think if you dont set it, it gets a value of 0 or something like that, so I have a script that adds the CBO genes to these files (randomize_dna.py).

 

The other gene type is special genes, these genes cannot be edited in the ruler creator, and they are not part of the character DNA, so the way these are applied is through portrait modifiers.

 

So its not a blendshape, but one example is makeup:

makeup_base_customization = {
    interface_position = 17
    usage = customization
    no_makeup_base = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = no_makeup_base
                value = 0
            }
        }
    }
    makeup_base_full = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = makeup_base
                value = 1.0
            }
        }
    }    
    makeup_base_half = {
        usage = customization
        dna_modifiers = {
            morph = {
                mode = add
                gene = makeup_base
                template = makeup_base
                value = 0.5
            }
        }
    }
}

 

This adds a new option in the barbershop, and then you can select between 3 different values, and when selected, it applies the gene with the value there.

 

It gets a bit more complicated with more details, but you will probably just need to mess around with things to understand a bit more how they work, let me know if you need some more info.

 

This is so helpful, thank you so much. I will look into this rn.
Thanks for all the work on the mod as well. :)

Posted
32 minutes ago, kaxli said:

Thank you, I've found that using EPE or CFP makes it impossible for Eastern Europe to enter the court. Is it a matter of sorting?

 

Hi, you need to use the CFP or CFP+EPE CBO Patches, those should patch the court room so they work.

 

 

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