Crusader Kings 3 - Converting DNA code using Portrait Editor
DNA 코드에는 Base64 포맷과 룰러디자이너 포맷 2가지가 있습니다.
게임 내 포트레잇 에디터를 사용하여 서로 각기 다른 포맷의 데이터를 컨버팅 해 봅시다.
포트레잇 에디터를 사용하기 위해서는 게임을 디버그 모드로 실행 합니다. (다음 글 참고)
Crusader Kings 3 - How to run debug mode (all--the--things.blogspot.com)
` (백틱 문자) 키를 눌러 디버그 콘솔 창을 띄웁니다.

포트레잇 에디터를 실행 하는 방법은 2가지가 있습니다.
1. 콘솔 입력 창에 portrait_editor 입력 하거나
2. Debug Menus에서 'Portrait Editor' 를 클릭 합니다.

(4명의 무서운 빡빡이가 나옵니다)
게임 내의 캐릭터의 DNA코드를 룰러 디자이너 포맷이든 Base64 포맷이든 준비 합니다. (아래 글 참고)
Crusader Kings 3 - Extract DNA code for ruler designer (all--the--things.blogspot.com)
Crusader Kings 3 - Extract DNA code (Base64 format) (all--the--things.blogspot.com)
# 룰러 디자이너 포맷 → Base64 포맷

이전 글에서 작성했던, '에아드기푸' 캐릭터의 룰러 디자이너 코드는 다음과 같습니다.
meta_main_portrait={
type=female
id=15967
age=0.410000
genes={ hair_color={ 192 141 230 34 } c0 8d e6 22
skin_color={ 87 95 87 95 }
eye_color={ 172 150 74 187 }
gene_chin_forward={ "chin_forward_pos" 134 "chin_forward_pos" 134 }
gene_chin_height={ "chin_height_pos" 140 "chin_height_pos" 140 }
gene_chin_width={ "chin_width_pos" 140 "chin_width_pos" 140 }
gene_eye_angle={ "eye_angle_pos" 133 "eye_angle_pos" 133 }
gene_eye_depth={ "eye_depth_pos" 134 "eye_depth_pos" 134 }
gene_eye_height={ "eye_height_neg" 116 "eye_height_neg" 116 }
gene_eye_distance={ "eye_distance_pos" 134 "eye_distance_pos" 134 }
gene_eye_shut={ "eye_shut_pos" 153 "eye_shut_pos" 153 }
gene_forehead_angle={ "forehead_angle_pos" 137 "forehead_angle_pos" 137 }
gene_forehead_brow_height={ "forehead_brow_height_pos" 153 "forehead_brow_height_pos" 153 }
gene_forehead_roundness={ "forehead_roundness_neg" 114 "forehead_roundness_neg" 114 }
gene_forehead_width={ "forehead_width_neg" 102 "forehead_width_neg" 102 }
gene_forehead_height={ "forehead_height_neg" 114 "forehead_height_neg" 114 }
gene_head_height={ "head_height_neg" 112 "head_height_neg" 112 }
gene_head_width={ "head_width_neg" 102 "head_width_neg" 102 }
gene_head_profile={ "head_profile_pos" 140 "head_profile_pos" 140 }
gene_head_top_height={ "head_top_height_pos" 132 "head_top_height_pos" 132 }
gene_head_top_width={ "head_top_width_pos" 153 "head_top_width_pos" 153 }
gene_jaw_angle={ "jaw_angle_neg" 106 "jaw_angle_neg" 106 }
gene_jaw_forward={ "jaw_forward_pos" 133 "jaw_forward_pos" 133 }
gene_jaw_height={ "jaw_height_pos" 128 "jaw_height_pos" 128 }
gene_jaw_width={ "jaw_width_pos" 148 "jaw_width_pos" 148 }
gene_mouth_corner_depth={ "mouth_corner_depth_neg" 102 "mouth_corner_depth_neg" 102 }
gene_mouth_corner_height={ "mouth_corner_height_pos" 132 "mouth_corner_height_pos" 132 }
gene_mouth_forward={ "mouth_forward_pos" 129 "mouth_forward_pos" 129 }
gene_mouth_height={ "mouth_height_pos" 130 "mouth_height_pos" 130 }
gene_mouth_width={ "mouth_width_neg" 102 "mouth_width_neg" 102 }
gene_mouth_upper_lip_size={ "mouth_upper_lip_size_pos" 153 "mouth_upper_lip_size_pos" 153 }
gene_mouth_lower_lip_size={ "mouth_lower_lip_size_pos" 153 "mouth_lower_lip_size_pos" 153 }
gene_mouth_open={ "mouth_open_neg" 114 "mouth_open_neg" 114 }
gene_neck_length={ "neck_length_neg" 106 "neck_length_neg" 106 }
gene_neck_width={ "neck_width_neg" 108 "neck_width_neg" 108 }
gene_bs_cheek_forward={ "cheek_forward_pos" 38 "cheek_forward_pos" 38 }
gene_bs_cheek_height={ "cheek_height_neg" 176 "cheek_height_neg" 176 }
gene_bs_cheek_width={ "cheek_width_pos" 6 "cheek_width_pos" 6 }
gene_bs_ear_angle={ "ear_angle_pos" 17 "ear_angle_pos" 17 }
gene_bs_ear_inner_shape={ "ear_inner_shape_pos" 3 "ear_inner_shape_pos" 3 }
gene_bs_ear_bend={ "ear_lower_bend_pos" 8 "ear_lower_bend_pos" 8 }
gene_bs_ear_outward={ "ear_outward_pos" 89 "ear_outward_pos" 89 }
gene_bs_ear_size={ "ear_size_neg" 76 "ear_size_neg" 76 }
gene_bs_eye_corner_depth={ "eye_corner_depth_neg" 35 "eye_corner_depth_neg" 35 }
gene_bs_eye_fold_shape={ "eye_fold_shape_pos" 18 "eye_fold_shape_pos" 18 }
gene_bs_eye_size={ "eye_size_pos" 192 "eye_size_pos" 192 }
gene_bs_eye_upper_lid_size={ "eye_upper_lid_size_neg" 6 "eye_upper_lid_size_neg" 6 }
gene_bs_forehead_brow_curve={ "forehead_brow_curve_pos" 0 "forehead_brow_curve_pos" 0 }
gene_bs_forehead_brow_forward={ "forehead_brow_forward_neg" 4 "forehead_brow_forward_neg" 4 }
gene_bs_forehead_brow_inner_height={ "forehead_brow_inner_height_pos" 45 "forehead_brow_inner_height_pos" 45 }
gene_bs_forehead_brow_outer_height={ "forehead_brow_outer_height_neg" 4 "forehead_brow_outer_height_neg" 4 }
gene_bs_forehead_brow_width={ "forehead_brow_width_pos" 19 "forehead_brow_width_pos" 19 }
gene_bs_jaw_def={ "jaw_def_pos" 11 "jaw_def_pos" 11 }
gene_bs_mouth_lower_lip_def={ "mouth_lower_lip_def_pos" 3 "mouth_lower_lip_def_pos" 3 }
gene_bs_mouth_lower_lip_full={ "mouth_lower_lip_full_neg" 5 "mouth_lower_lip_full_neg" 5 }
gene_bs_mouth_lower_lip_pad={ "mouth_lower_lip_pad_neg" 10 "mouth_lower_lip_pad_neg" 10 }
gene_bs_mouth_lower_lip_width={ "mouth_lower_lip_width_neg" 108 "mouth_lower_lip_width_neg" 108 }
gene_bs_mouth_philtrum_def={ "mouth_philtrum_def_pos" 39 "mouth_philtrum_def_pos" 39 }
gene_bs_mouth_philtrum_shape={ "mouth_philtrum_shape_pos" 44 "mouth_philtrum_shape_pos" 44 }
gene_bs_mouth_philtrum_width={ "mouth_philtrum_width_neg" 69 "mouth_philtrum_width_neg" 69 }
gene_bs_mouth_upper_lip_def={ "mouth_upper_lip_def_pos" 1 "mouth_upper_lip_def_pos" 1 }
gene_bs_mouth_upper_lip_full={ "mouth_upper_lip_full_pos" 53 "mouth_upper_lip_full_pos" 53 }
gene_bs_mouth_upper_lip_profile={ "mouth_upper_lip_profile_pos" 44 "mouth_upper_lip_profile_pos" 44 }
gene_bs_mouth_upper_lip_width={ "mouth_upper_lip_width_pos" 50 "mouth_upper_lip_width_pos" 50 }
gene_bs_nose_forward={ "nose_forward_pos" 10 "nose_forward_pos" 10 }
gene_bs_nose_height={ "nose_height_neg" 9 "nose_height_neg" 9 }
gene_bs_nose_length={ "nose_length_pos" 23 "nose_length_pos" 23 }
gene_bs_nose_nostril_height={ "nose_nostril_height_neg" 87 "nose_nostril_height_neg" 87 }
gene_bs_nose_nostril_width={ "nose_nostril_width_neg" 49 "nose_nostril_width_neg" 49 }
gene_bs_nose_profile={ "nose_profile_hawk" 147 "nose_profile_hawk" 147 }
gene_bs_nose_ridge_angle={ "nose_ridge_angle_neg" 27 "nose_ridge_angle_neg" 27 }
gene_bs_nose_ridge_width={ "nose_ridge_width_neg" 11 "nose_ridge_width_neg" 11 }
gene_bs_nose_size={ "nose_size_neg" 46 "nose_size_neg" 46 }
gene_bs_nose_tip_angle={ "nose_tip_angle_pos" 8 "nose_tip_angle_pos" 8 }
gene_bs_nose_tip_forward={ "nose_tip_forward_pos" 106 "nose_tip_forward_pos" 106 }
gene_bs_nose_tip_width={ "nose_tip_width_neg" 0 "nose_tip_width_neg" 0 }
face_detail_cheek_def={ "cheek_def_01" 120 "cheek_def_02" 16 }
face_detail_cheek_fat={ "cheek_fat_01_pos" 20 "cheek_fat_01_pos" 30 }
face_detail_chin_cleft={ "chin_cleft" 1 "chin_cleft" 1 }
face_detail_chin_def={ "chin_def" 147 "chin_def" 147 }
face_detail_eye_lower_lid_def={ "eye_lower_lid_def" 50 "eye_lower_lid_def" 50 }
face_detail_eye_socket={ "eye_socket_01" 145 "eye_socket_01" 145 }
face_detail_nasolabial={ "nasolabial_02" 17 "nasolabial_02" 17 }
face_detail_nose_ridge_def={ "nose_ridge_def_pos" 202 "nose_ridge_def_pos" 202 }
face_detail_nose_tip_def={ "nose_tip_def" 237 "nose_tip_def" 237 }
face_detail_temple_def={ "temple_def" 80 "temple_def" 80 }
expression_brow_wrinkles={ "brow_wrinkles_03" 0 "brow_wrinkles_03" 193 }
expression_eye_wrinkles={ "eye_wrinkles_02" 145 "eye_wrinkles_02" 145 }
expression_forehead_wrinkles={ "forehead_wrinkles_01" 159 "forehead_wrinkles_01" 182 }
expression_other={ "cheek_wrinkles_left_01" 0 "cheek_wrinkles_left_01" 0 }
complexion={ "complexion_beauty_1" 255 "complexion_1" 144 }
gene_height={ "normal_height" 129 "normal_height" 129 }
gene_bs_body_type={ "body_fat_head_fat_low" 118 "body_fat_head_fat_low" 126 }
gene_bs_body_shape={ "body_shape_triangle_half" 112 "body_shape_rectangle_half" 0 }
gene_bs_bust={ "bust_clothes" 154 "bust_shape_3_full" 120 }
gene_age={ "old_beauty_1" 120 "old_4" 120 }
gene_eyebrows_shape={ "avg_spacing_low_thickness" 250 "avg_spacing_low_thickness" 250 }
gene_eyebrows_fullness={ "layer_2_lower_thickness" 157 "layer_2_lower_thickness" 157 }
gene_body_hair={ "body_hair_sparse" 120 "body_hair_sparse" 120 }
gene_hair_type={ "hair_straight" 128 "hair_straight" 128 }
gene_baldness={ "no_baldness" 127 "no_baldness" 127 }
eye_accessory={ "normal_eyes" 60 "normal_eyes" 60 }
teeth_accessory={ "normal_teeth" 0 "normal_teeth" 0 }
eyelashes_accessory={ "normal_eyelashes" 138 "normal_eyelashes" 138 }
pose={ "" 255 "" 0 }
clothes={ "northern_low_nobility_clothes" 127 "most_clothes" 0 }
headgear={ "northern_common" 104 "no_headgear" 0 }
legwear={ "western_common_legwear" 181 "all_legwear" 0 }
hairstyles={ "scripted_character_hairstyles_01" 45 "all_hairstyles" 0 }
}
entity={ 3242738294 3242738294 }
}포트레잇 에디터에서 'Paste Persistent DNA' 버튼을 클릭하면, 위에 복사된 룰러 디자이너 코드가 적용이 됩니다.

그리고 'Copy DNA String' 버튼을 누르면, 클립보드에 Base64 포맷 DNA 코드가 복사됩니다.
복사된 Base64포맷 DNA코드는 다음과 같습니다.
| wI3mIldfV1+slkq7AYYBhgGMAYwBjAGMAYUBhQGGAYYAdAB0AYYBhgGZAZkBiQGJAZkBmQByAHIAZgBmAHIAcgBwAHAAZgBmAYwBjAGEAYQBmQGZAGoAagGFAYUBgAGAAZQBlABmAGYBhAGEAYEBgQGCAYIAZgBmAZkBmQGZAZkAcgByAGoAagBsAGwBJgEmALAAsAEGAQYBEQERAAMAAwAIAAgBWQFZAEwATAAjACMBEgESAcABwAAGAAYBAAEAAAQABAEtAS0ABAAEARMBEwELAQsAAwADAAUABQAKAAoAbABsACcAJwEsASwARQBFAAEAAQE1ATUBLAEsATIBMgEKAQoACQAJARcBFwBXAFcAMQAxApMCkwAbABsACwALAC4ALgEIAQgBagFqAAAAAAB4ARAAFAAeAAEAAQGTAZMAMgAyAJEAkQERAREAygDKAO0A7QBQAFACAALBAZEBkQCfALYAAAAAB/8AkAGBAYEBdgF+CnAIAACaCHgEeAN4A/oD+gSdBJ0AeAB4AIAAgAB/AH8APAA8AAAAAAGKAYo= |
# Base64 포맷 → 룰러 디자이너 포맷
반대로 Base64 포맷의 DNA 코드를 복사해서 'Paste DNA String' 을 클릭 하면, DNA가 적용 되고,
'Copy Persistent DNA' 를 클릭 하면, 룰러 디자이너 포맷의 DNA 코드가 복사 됩니다.
복사된 룰러 디자이너 포맷의 DNA 코드는 영주 생성기에서 'DNA 붙여넣기'에 사용할 수 있습니다.
