code:
l_spanish:

dominant:1 "[dominant|E]"
relation_dominant:1 "Dominante"
relation_dominant_possessive:1 "del Dominante"

submissive:1 "[submissive|E]"
relation_submissive:1 "Sumiso"
relation_submissive_possessive:1 "Del Sumiso"

slave:1 "[slave|E]"
relation_slave:1 "Esclavo"
relation_slave_possessive:1 "Del Esclavo"

slave_owner:1 "[slave_owner|E]"
relation_slave_owner:1 "Propietario"
relation_slave_owner_possessive:1 "Del Propietario"

repo_name: Synthael/carnalitas

license: mit


code:
l_spanish:

trait_futa:1 "Futanari"
trait_futa_immersive:1 "Hermafrodita"
trait_futa_desc:1 "Este personaje tiene ambos organos sexuales.\n\nDebido a mecanicas del juego, este personaje no puede tener hijos o casarse con otras mujeres en esta version de Carnalitas. Puede casarse y tener hijos con hombres."
trait_futa_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] posee ambos organos sexuales.\n\nDebido a mecanicas del juego, este personaje no puede tener hijos o casarse con otras mujeres en esta version de Carnalitas. Puede casarse y tener hijos con hombres."

trait_dick_small:1 "Penes Pequeños"

trait_dick_small_1:1 "Pene Pequeño"
trait_dick_small_1_immersive:1 "Pequeñin"
trait_dick_small_1_desc:1 "Este personaje no fue dotado con una considerable hombria."
trait_dick_small_1_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] no fue dotado con una considerable hombria."

trait_dick_small_2:1 "Pene Diminuto"
trait_dick_small_2_immersive:1 "Capón"
trait_dick_small_2_desc:1 "El tamaño del pene de este personaje es motivo de vergüenza."
trait_dick_small_2_character_desc:1 "El tamaño del pene de [ROOT.GetCharacter.GetFirstNameNoTooltip]es motivo de vergüenza."

trait_dick_small_3:1 "Micro Pene"
trait_dick_small_3_immersive:1 "Castrado"
trait_dick_small_3_desc:1 "El pene de este personaje es tan pequeño que dificilmente puede ser encontrado."
trait_dick_small_3_character_desc:1 "El pene de [ROOT.GetCharacter.GetFirstNameNoTooltip] es tan pequeño que dificilmente puede ser encontrado."

trait_dick_big:1 "Penes Grandes"

trait_dick_big_1:1 "Pene Grande"
trait_dick_big_1_immersive:1 "Bien Dotado"
trait_dick_big_1_desc:1 "Este personaje es reconocido por tener una espada... más grande... que el resto."
trait_dick_big_1_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] es reconocido por tener una espada... más grande... que el resto."

trait_dick_big_2:1 "Pene Enorme"
trait_dick_big_2_immersive:1 "Salchichon"
trait_dick_big_2_desc:1 "Solo las bragüetas más grandes son lo suficiente para este personaje."
trait_dick_big_2_character_desc:1 "Solo las bragüetas más grandes son lo suficiente para [ROOT.GetCharacter.GetFirstNameNoTooltip]."

trait_dick_big_3:1 "Pene Gigante"
trait_dick_big_3_immersive:1 "Semental"
trait_dick_big_3_desc:1 "Este personaje tiene una impresionante hommbria que dificilmente puede ocultar la ropa."
trait_dick_big_3_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] tiene una impresionante hommbria que dificilmente puede ocultar la ropa."

trait_tits_small:1 "Senos Pequeños"

trait_tits_small_1:1 "Senos Pequeños"
trait_tits_small_1_immersive:1 "Petite"
trait_tits_small_1_desc:1 "El busto de este personaje es más pequeño que el resto."
trait_tits_small_1_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] tiene un busto más pequeño que el resto."

trait_tits_small_2:1 "Senos Diminutos"
trait_tits_small_2_immersive:1 "Botones"
trait_tits_small_2_desc:1 "Este personaje tiene un busto de niña que es dificil de distinguir."
trait_tits_small_2_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] tiene un busto de niña que es dificil de distinguir."

trait_tits_small_3:1 "Pechos Planos"
trait_tits_small_3_immersive:1 "Como Tabla"
trait_tits_small_3_desc:1 "El busto de este personaje es plano como una tabla."
trait_tits_small_3_character_desc:1 "El busto de [ROOT.GetCharacter.GetFirstNameNoTooltip]es plano como una tabla."

trait_tits_big:1 "Senos Grandes"

trait_tits_big_1:1 "Senos Grandes"
trait_tits_big_1_immersive:1 "Pomelos"
trait_tits_big_1_desc:1 "Este personaje tiene un busto más grande que el resto."
trait_tits_big_1_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] tiene un busto más grande que el resto."

trait_tits_big_2:1 "Senos Enormes"
trait_tits_big_2_immersive:1 "Melones"
trait_tits_big_2_desc:1 "Este personaje tiene... enormes atributos."
trait_tits_big_2_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] tiene... enormes atributos."

trait_tits_big_3:1 "Senos Gigantes"
trait_tits_big_3_immersive:1 "Sandias"
trait_tits_big_3_desc:1 "El busto de este personaje es motivo de leyendas."
trait_tits_big_3_character_desc:1 "El busto de [ROOT.GetCharacter.GetFirstNameNoTooltip]es motivo de leyendas."

trait_slave:1 "Esclavo"
trait_slave_desc:1 "Este personaje es propiedad de otra persona, reconocido por la ley como menos que un ser humano."
trait_slave_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] es propiedad de otra persona, reconocido por la ley como menos que un ser humano."

trait_former_slave:1 "Esclavo Libre"
trait_former_slave_neutral:1 "Esclavo Libre"
trait_former_slave_female:1 "Liberta"
trait_former_slave_male:1 "Liberto"
trait_former_slave_desc:1 "Este personaje fue un esclavo que libró de sus ataduras y ahora es libre."
trait_former_slave_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] fue un esclavo que se libró de sus ataduras y ahora es libre."

trait_prostitute_1:1 "Prostituta Principiante"
trait_prostitute_1_neutral:1 "Prostituta Principiante"
trait_prostitute_1_female:1 "Prostituta Principiante"
trait_prostitute_1_male:1 "Prostituto Principiante"
trait_prostitute_1_desc:1 "$trait_prostitute_1$ esta en el negocio de la prostitución sirviendo clientes a cambio de dinero."
trait_prostitute_1_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] esta en el negocio de la prostitución sirviendo clientes a cambio de dinero."
trait_prostitute_2:1 "Prostituta Experimentada"
trait_prostitute_2_neutral:1 "Prostituta Experimentada"
trait_prostitute_2_female:1 "Prostituta Experimentada"
trait_prostitute_2_male:1 "Prostituto Experimentado"
trait_prostitute_2_desc:1 "$trait_prostitute_2$ es reconocid[ROOT.Char.Custom('ES_OA')] por su habilidosa compañia y conocimiento carnal."
trait_prostitute_2_character_desc:1 "[ROOT.GetCharacter.GetFirstNameNoTooltip] es reconocid[ROOT.Char.Custom('ES_OA')] por su [ROOT.GetCharacter.GetHerHis] por su habilidosa compañia y conocimiento carnal."
trait_prostitute_3:1 "Prostituta Maestra"
trait_prostitute_3_neutral:1 "Prostituta Maestra"
trait_prostitute_3_female:1 "Prostituta Maestra"
trait_prostitute_3_male:1 "Prostituto Maestro"
trait_prostitute_3_desc:1 "Un[ROOT.Char.Custom('ES_OA')] exclusiv[ROOT.Char.Custom('ES_OA')] compañer[ROOT.Char.Custom('ES_OA')] dign[ROOT.Char.Custom('ES_OA')] de la más alta nobleza, $trait_prostitute_3$ es un[ROOT.Char.Custom('ES_OA')] expert[ROOT.Char.Custom('ES_OA')] acompañante y un[ROOT.Char.Custom('ES_OA')] amante sin igual."
trait_prostitute_3_character_desc:1 "Un[ROOT.Char.Custom('ES_OA')] exclusiv[ROOT.Char.Custom('ES_OA')] compañer[ROOT.Char.Custom('ES_OA')] dign[ROOT.Char.Custom('ES_OA')] de la más alta nobleza, [ROOT.GetCharacter.GetFirstNameNoTooltip] es un[ROOT.Char.Custom('ES_OA')] expert[ROOT.Char.Custom('ES_OA')] acompañante y un[ROOT.Char.Custom('ES_OA')] amante sin igual."

trait_lifestyle_prostitute:1 "Prostitutas"


code:
l_spanish:
NOT_IS_ATTRACTED_TO_TRIGGER:1 "No le atrae a [TARGET_CHARACTER.GetShortUIName]"

carn_i_can_be_granted_titles:1 "Se te puede otorgar titulos"
carn_not_i_can_be_granted_titles:1 "No se te puede otorgar titulos"
carn_they_can_be_granted_titles:1 "[CHARACTER.GetShortUIName|U] se le puede otorgar titulos"
carn_not_they_can_be_granted_titles:1 "[CHARACTER.GetShortUIName|U] no se le puede otorgar titulos"
carn_can_be_granted_titles:1 "Puede otorgar titulos"
carn_not_can_be_granted_titles:1 "No puede otorgar titulos"

ccarn_cannot_be_raped:1 "No puede cometer abuso"

carn_cannot_have_max_number_of_slave_prostitutes:1 "No puedes tener más [EmptyScope.ScriptValue('carn_max_slave_prostitutes_per_owner')|1] esclavos ejerciendo la prostitución"

carn_cannot_have_sex:1 "No puede tener relaciones"

carn_effective_age_under_prostitution_age_cutoff:1 "La edad es menor que [EmptyScope.ScriptValue('carn_prostitution_age_cutoff')|1]"

carn_i_have_a_fetish_trigger:1 "Tiene un fetiche"
carn_not_i_have_a_fetish_trigger:1 "#bold No#! tienes un fetiche"
carn_they_have_a_fetish_trigger:1 "[CHARACTER.GetShortUIName|U] Tiene un fetiche"
carn_not_they_have_a_fetish_trigger:1 "[CHARACTER.GetShortUIName|U] #bold No#! tiene un fetiche"
carn_has_any_fetish_trigger:1 "Tiene un fetiche"
carn_not_has_a_fetish_trigger:1 "#bold No#! tiene un fetiche"

carn_is_diplomatically_available:1 "No esta disponible"

carn_i_am_lactating_trigger:1 "Estas [lactating|E]"
carn_not_i_am_lactating_trigger:1 "#bold No# estas [lactating|E]"
carn_they_are_lactating_trigger:1 "[CHARACTER.GetShortUIName|U] esta [lactating|E]"
carn_not_they_are_lactating_trigger:1 "[CHARACTER.GetShortUIName|U] #bold No# esta [lactating|E]"
carn_is_lactating_trigger:1 "Esta [lactating|E]"
carn_not_is_lactating_trigger:1 "#bold No# esta [lactating|E]"

carn_slavery_is_illegal:1 "Tú fé no te permite tomar miembros de [CHARACTER.GetFaith.GetAdherentNamePluralNoTooltip|U] como esclavos"


code:
l_spanish:

carn_futanari:1 "Futanari"
carn_futanari_plural:1 "Futanari"
carn_futanari_possessive:1 " De Futanari"
carn_futanari_article:1 "Una"
carn_hermaphrodite:1 "Hermafrodita"
carn_hermaphrodite_plural:1 "Hermafroditas"
carn_hermaphrodite_possessive:1 "De Hermafrodita"
carn_hermaphrodite_article:1 "Una"


code:
l_spanish:

carn_futanari:0 "futanari"
carn_futanari_plural:0 "futanari"
carn_futanari_possessive:0 "futanari's"
carn_futanari_article:0 "a"
carn_hermaphrodite:0 "hermaphrodite"
carn_hermaphrodite_plural:0 "hermaphrodites"
carn_hermaphrodite_possessive:0 "hermaphrodite's"
carn_hermaphrodite_article:0 "a"


code:
l_spanish:

 carn_very_low_milk_production_description:1 "Un poquito de"
 carn_low_milk_production_description:1 "Un poco de"
 carn_average_milk_production_description:1 "Una saludable cantidad de"
 carn_high_milk_production_description:1 "Una impresionante cantidad de"
 carn_very_high_milk_production_description:1 "Una increible cantidad de"
 carn_extreme_milk_production_description:1 "Una cantidad enorme de"

 carn_very_low:1 "Muy poco"
 carn_low:1 "Poco"
 carn_average:1 "Normal"
 carn_high:1 "Mayor"
 carn_very_high:1 "Superior"
 carn_extreme:1 "Extremo"


code:
l_spanish:

carn_very_low_milk_production_description:0 "a very small trickle of"
carn_low_milk_production_description:0 "a small amount of"
carn_average_milk_production_description:0 "a healthy amount of"
carn_high_milk_production_description:0 "an impressive amount of"
carn_very_high_milk_production_description:0 "an incredible amount of"
carn_extreme_milk_production_description:0 "an extreme amount of"

carn_very_low:0 "very low"
carn_low:0 "low"
carn_average:0 "average"
carn_high:0 "high"
carn_very_high:0 "very high"
carn_extreme:0 "extreme"


code:
l_english:

 carn_i_gain_fetish:1 "Ganas un [fetish|E]"
 carn_i_gained_fetish:1 "Ganaste un [fetish|E]"
 carn_they_gain_fetish:1 "[CHARACTER.GetShortUIName|U] gana un [fetish|E]"
 carn_they_gained_fetish:1 "[CHARACTER.GetShortUIName|U] ganó un [fetish|E]"
 carn_gains_fetish:1 "Gana un [fetish|E]"
 carn_gained_fetish:1 "Ganó un [fetish|E]"

 carn_i_gain_fetish_anal_effect:1 "Ganas un [fetish|E] anal"
 carn_i_gained_fetish_anal_effect:1 "Ganaste un [fetish|E] anal"
 carn_they_gain_fetish_anal_effect:1 "[CHARACTER.GetShortUIName|U] gana un [fetish|E] anal"
 carn_they_gained_fetish_anal_effect:1 "[CHARACTER.GetShortUIName|U] ganó un [fetish|E] anal"
 carn_gain_fetish_anal_effect:1 "Gana un [fetish|E] anal"
 carn_gained_fetish_anal_effect:1 "Ganó un [fetish|E] anal"

 carn_i_gain_fetish_sadism_effect:1 "Ganas un [fetish|E] sadico"
 carn_i_gained_fetish_sadism_effect:1 "Ganaste un [fetish|E] sadico"
 carn_they_gain_fetish_sadism_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] sadico"
 carn_they_gained_fetish_sadism_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] sadico"
 carn_gain_fetish_sadism_effect:1 "Gana un [fetish|E] sadico [fetish|E]"
 carn_gained_fetish_sadism_effect:1 "Ganó un [fetish|E] sadico [fetish|E]"

 carn_i_gain_fetish_masochism_effect:1 "Ganas un [fetish|E] masoquista [fetish|E]"
 carn_i_gained_fetish_masochism_effect:1 "Ganaste un [fetish|E] masoquista [fetish|E]"
 carn_they_gain_fetish_masochism_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] masoquista"
 carn_they_gained_fetish_masochism_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] masoquista"
 carn_gain_fetish_masochism_effect:1 "Gana un [fetish|E] masoquista"
 carn_gained_fetish_masochism_effect:1 "Ganó un [fetish|E] masoquista"

 carn_i_gain_fetish_bestiality_effect:1 "Ganas un [fetish|E] bestialismo"
 carn_i_gained_fetish_bestiality_effect:1 "Ganaste un [fetish|E] bestialismo"
 carn_they_gain_fetish_bestiality_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] bestialismo"
 carn_they_gained_fetish_bestiality_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] bestialismo"
 carn_gain_fetish_bestiality_effect:1 "Gana un [fetish|E] bestialismo"
 carn_gained_fetish_bestiality_effect:1 "Ganó un [fetish|E] bestialismo"

 carn_i_gain_fetish_watersports_effect:1 "Ganas un [fetish|E] urolagnia"
 carn_i_gained_fetish_watersports_effect:1 "Ganaste un [fetish|E] urolagnia"
 carn_they_gain_fetish_watersports_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] urolagnia"
 carn_they_gained_fetish_watersports_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] urolagnia"
 carn_gain_fetish_watersports_effect:1 "Gana un [fetish|E] urolagnia"
 carn_gained_fetish_watersports_effect:1 "Ganó un [fetish|E] urolagnia"

 carn_i_gain_fetish_scat_effect:1 "Ganas un [fetish|E] coprofilia"
 carn_i_gained_fetish_scat_effect:1 "Ganaste un [fetish|E] scat [fetish|E]"
 carn_they_gain_fetish_scat_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] coprofilia"
 carn_they_gained_fetish_scat_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] coprofilia"
 carn_gain_fetish_scat_effect:1 "Gana un [fetish|E] coprofilia"
 carn_gained_fetish_scat_effect:1 "Ganó un [fetish|E] coprofilia"

 carn_i_gain_fetish_gore_effect:1 "Ganas un [fetish|E] gore"
 carn_i_gained_fetish_gore_effect:1 "Ganaste un [fetish|E] gore"
 carn_they_gain_fetish_gore_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] gore"
 carn_they_gained_fetish_gore_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] gore"
 carn_gain_fetish_gore_effect:1 "Gana un [fetish|E] gore"
 carn_gained_fetish_gore_effect:1 "Ganó un [fetish|E] gore"

 carn_i_gain_fetish_foot_play_effect:1 "Ganas un [fetish|E] podofilia"
 carn_i_gained_fetish_foot_play_effect:1 "Ganaste un [fetish|E] podofilia"
 carn_they_gain_fetish_foot_play_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] podofilia"
 carn_they_gained_fetish_foot_play_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] podofilia"
 carn_gain_fetish_foot_play_effect:1 "Gana un [fetish|E] podofilia"
 carn_gained_fetish_foot_play_effect:1 "Ganó un [fetish|E] podofilia"

 carn_i_gain_fetish_bondage_effect:1 "Ganas un [fetish|E] bondage"
 carn_i_gained_fetish_bondage_effect:1 "Ganaste un [fetish|E] bondage"
 carn_they_gain_fetish_bondage_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] bondage"
 carn_they_gained_fetish_bondage_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] bondage"
 carn_gain_fetish_bondage_effect:1 "Gana un [fetish|E] bondage"
 carn_gained_fetish_bondage_effect:1 "Ganó un [fetish|E] bondage"

 carn_i_gain_fetish_domination_effect:1 "Ganas un [fetish|E] dominante"
 carn_i_gained_fetish_domination_effect:1 "Ganaste un [fetish|E] dominante"
 carn_they_gain_fetish_domination_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] dominante"
 carn_they_gained_fetish_domination_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] dominante"
 carn_gain_fetish_domination_effect:1 "Gana un [fetish|E] dominante"
 carn_gained_fetish_domination_effect:1 "Ganó un [fetish|E] dominante"

 carn_i_gain_fetish_submission_effect:1 "Ganas un [fetish|E] sumisión"
 carn_i_gained_fetish_submission_effect:1 "Ganaste un [fetish|E] sumisión"
 carn_they_gain_fetish_submission_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] sumisión"
 carn_they_gained_fetish_submission_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] sumisión"
 carn_gain_fetish_submission_effect:1 "Gana un [fetish|E] sumisión"
 carn_gained_fetish_submission_effect:1 "Ganó un [fetish|E] sumisión"

 carn_i_gain_fetish_raping_effect:1 "Ganas un [fetish|E] violacion dominante"
 carn_i_gained_fetish_raping_effect:1 "Ganaste un [fetish|E] violacion dominante"
 carn_they_gain_fetish_raping_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] violacion dominante"
 carn_they_gained_fetish_raping_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] violacion dominante"
 carn_gain_fetish_raping_effect:1 "Gana un [fetish|E] violacion dominante"
 carn_gained_fetish_raping_effect:1 "Ganó un [fetish|E] violacion dominante"

carn_i_gain_fetish_being_raped_effect:1 "Ganas un [fetish|E] violacion sumisa"
 carn_i_gained_fetish_being_raped_effect:1 "Ganaste un [fetish|E] violacion sumisa"
 carn_they_gain_fetish_being_raped_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] violacion sumisa"
 carn_they_gained_fetish_being_raped_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] violacion sumisa"
 carn_gain_fetish_being_raped_effect:1 "Gana un [fetish|E] violacion sumisa"
 carn_gained_fetish_being_raped_effect:1 "Ganó un [fetish|E] violacion sumisa"

carn_i_gain_fetish_lactation_effect:1 "Ganas un [fetish|E] lactancia"
 carn_i_gained_fetish_lactation_effect:1 "Ganaste un [fetish|E] lactancia"
 carn_they_gain_fetish_lactation_effect:1 "[CHARACTER.GetShortUIName|U] Gana un [fetish|E] lactancia"
 carn_they_gained_fetish_lactation_effect:1 "[CHARACTER.GetShortUIName|U] Ganó un [fetish|E] lactancia"
 carn_gain_fetish_lactation_effect:1 "Gana un [fetish|E] lactancia"
 carn_gained_fetish_lactation_effect:1 "Ganó un [fetish|E] lactancia"

 carn_i_lose_fetishes_effect:1 "Pierdes todos los [fetishes|E]"
 carn_i_lost_fetishes_effect:1 "Perdiste todos los [fetishes|E]"
 carn_they_lose_fetishes_effect:1 "[CHARACTER.GetShortUIName|U] pierde todos los [fetishes|E]"
 carn_they_lost_fetishes_effect:1 "[CHARACTER.GetShortUIName|U] perdio todos los [fetishes|E]"
 carn_lose_fetishes_effect:1 "Pierde todos los [fetishes|E]"
 carn_lost_fetishes_effect:1 "Perdio todos los [fetishes|E]"

 carn_i_lose_fetish_effect:1 "Pierdes un [fetish|E]"
 carn_i_lost_fetish_effect:1 "Perdiste un [fetish|E]"
 carn_they_lose_fetish_effect:1 "[CHARACTER.GetShortUIName|U] pierde un [fetish|E]"
 carn_they_lost_fetish_effect:1 "[CHARACTER.GetShortUIName|U] perdio un [fetish|E]"
 carn_lose_fetish_effect:1 "Pierde un [fetish|E]"
 carn_lost_fetish_effect:1 "Perdio un [fetish|E]"

 carn_msg_fetish_gained:1 "Fetiche Obtenido"


code:
l_spanish:

carn_i_gain_fetish:0 "You gain a [fetish|E]"
carn_i_gained_fetish:0 "You gained a [fetish|E]"
carn_they_gain_fetish:0 "[CHARACTER.GetShortUIName|U] gains a [fetish|E]"
carn_they_gained_fetish:0 "[CHARACTER.GetShortUIName|U] gained a [fetish|E]"
carn_gains_fetish:0 "Gains a [fetish|E]"
carn_gained_fetish:0 "Gained a [fetish|E]"

carn_i_gain_fetish_anal_effect:0 "You gain an anal [fetish|E]"
carn_i_gained_fetish_anal_effect:0 "You gained an anal [fetish|E]"
carn_they_gain_fetish_anal_effect:0 "[CHARACTER.GetShortUIName|U] gains an anal [fetish|E]"
carn_they_gained_fetish_anal_effect:0 "[CHARACTER.GetShortUIName|U] gained an anal [fetish|E]"
carn_gain_fetish_anal_effect:0 "Gains an anal [fetish|E]"
carn_gained_fetish_anal_effect:0 "Gained an anal [fetish|E]"

carn_i_gain_fetish_sadism_effect:0 "You gain a sadism [fetish|E]"
carn_i_gained_fetish_sadism_effect:0 "You gained a sadism [fetish|E]"
carn_they_gain_fetish_sadism_effect:0 "[CHARACTER.GetShortUIName|U] gains a sadism [fetish|E]"
carn_they_gained_fetish_sadism_effect:0 "[CHARACTER.GetShortUIName|U] gained a sadism [fetish|E]"
carn_gain_fetish_sadism_effect:0 "Gains a sadism [fetish|E]"
carn_gained_fetish_sadism_effect:0 "Gained a sadism [fetish|E]"

carn_i_gain_fetish_masochism_effect:0 "You gain a masochism [fetish|E]"
carn_i_gained_fetish_masochism_effect:0 "You gained a masochism [fetish|E]"
carn_they_gain_fetish_masochism_effect:0 "[CHARACTER.GetShortUIName|U] gains a masochism [fetish|E]"
carn_they_gained_fetish_masochism_effect:0 "[CHARACTER.GetShortUIName|U] gained a masochism [fetish|E]"
carn_gain_fetish_masochism_effect:0 "Gains a masochism [fetish|E]"
carn_gained_fetish_masochism_effect:0 "Gained a masochism [fetish|E]"

carn_i_gain_fetish_bestiality_effect:0 "You gain a bestiality [fetish|E]"
carn_i_gained_fetish_bestiality_effect:0 "You gained a bestiality [fetish|E]"
carn_they_gain_fetish_bestiality_effect:0 "[CHARACTER.GetShortUIName|U] gains a bestiality [fetish|E]"
carn_they_gained_fetish_bestiality_effect:0 "[CHARACTER.GetShortUIName|U] gained a bestiality [fetish|E]"
carn_gain_fetish_bestiality_effect:0 "Gains a bestiality [fetish|E]"
carn_gained_fetish_bestiality_effect:0 "Gained a bestiality [fetish|E]"

carn_i_gain_fetish_watersports_effect:0 "You gain a watersports [fetish|E]"
carn_i_gained_fetish_watersports_effect:0 "You gained a watersports [fetish|E]"
carn_they_gain_fetish_watersports_effect:0 "[CHARACTER.GetShortUIName|U] gains a watersports [fetish|E]"
carn_they_gained_fetish_watersports_effect:0 "[CHARACTER.GetShortUIName|U] gained a watersports [fetish|E]"
carn_gain_fetish_watersports_effect:0 "Gains a watersports [fetish|E]"
carn_gained_fetish_watersports_effect:0 "Gained a watersports [fetish|E]"

carn_i_gain_fetish_scat_effect:0 "You gain a scat [fetish|E]"
carn_i_gained_fetish_scat_effect:0 "You gained a scat [fetish|E]"
carn_they_gain_fetish_scat_effect:0 "[CHARACTER.GetShortUIName|U] gains a scat [fetish|E]"
carn_they_gained_fetish_scat_effect:0 "[CHARACTER.GetShortUIName|U] gained a scat [fetish|E]"
carn_gain_fetish_scat_effect:0 "Gains a scat [fetish|E]"
carn_gained_fetish_scat_effect:0 "Gained a scat [fetish|E]"

carn_i_gain_fetish_gore_effect:0 "You gain a gore [fetish|E]"
carn_i_gained_fetish_gore_effect:0 "You gained a gore [fetish|E]"
carn_they_gain_fetish_gore_effect:0 "[CHARACTER.GetShortUIName|U] gains a gore [fetish|E]"
carn_they_gained_fetish_gore_effect:0 "[CHARACTER.GetShortUIName|U] gained a gore [fetish|E]"
carn_gain_fetish_gore_effect:0 "Gains a gore [fetish|E]"
carn_gained_fetish_gore_effect:0 "Gained a gore [fetish|E]"

carn_i_gain_fetish_foot_play_effect:0 "You gain a foot play [fetish|E]"
carn_i_gained_fetish_foot_play_effect:0 "You gained a foot play [fetish|E]"
carn_they_gain_fetish_foot_play_effect:0 "[CHARACTER.GetShortUIName|U] gains a foot play [fetish|E]"
carn_they_gained_fetish_foot_play_effect:0 "[CHARACTER.GetShortUIName|U] gained a foot play [fetish|E]"
carn_gain_fetish_foot_play_effect:0 "Gains a foot play [fetish|E]"
carn_gained_fetish_foot_play_effect:0 "Gained a foot play [fetish|E]"

carn_i_gain_fetish_bondage_effect:0 "You gain a bondage [fetish|E]"
carn_i_gained_fetish_bondage_effect:0 "You gained a bondage [fetish|E]"
carn_they_gain_fetish_bondage_effect:0 "[CHARACTER.GetShortUIName|U] gains a bondage [fetish|E]"
carn_they_gained_fetish_bondage_effect:0 "[CHARACTER.GetShortUIName|U] gained a bondage [fetish|E]"
carn_gain_fetish_bondage_effect:0 "Gains a bondage [fetish|E]"
carn_gained_fetish_bondage_effect:0 "Gained a bondage [fetish|E]"

carn_i_gain_fetish_domination_effect:0 "You gain a domination [fetish|E]"
carn_i_gained_fetish_domination_effect:0 "You gained a domination [fetish|E]"
carn_they_gain_fetish_domination_effect:0 "[CHARACTER.GetShortUIName|U] gains a domination [fetish|E]"
carn_they_gained_fetish_domination_effect:0 "[CHARACTER.GetShortUIName|U] gained a domination [fetish|E]"
carn_gain_fetish_domination_effect:0 "Gains a domination [fetish|E]"
carn_gained_fetish_domination_effect:0 "Gained a domination [fetish|E]"

carn_i_gain_fetish_submission_effect:0 "You gain a submission [fetish|E]"
carn_i_gained_fetish_submission_effect:0 "You gained a submission [fetish|E]"
carn_they_gain_fetish_submission_effect:0 "[CHARACTER.GetShortUIName|U] gains a submission [fetish|E]"
carn_they_gained_fetish_submission_effect:0 "[CHARACTER.GetShortUIName|U] gained a submission [fetish|E]"
carn_gain_fetish_submission_effect:0 "Gains a submission [fetish|E]"
carn_gained_fetish_submission_effect:0 "Gained a submission [fetish|E]"

carn_i_gain_fetish_raping_effect:0 "You gain a dominant rape [fetish|E]"
carn_i_gained_fetish_raping_effect:0 "You gained a dominant rape [fetish|E]"
carn_they_gain_fetish_raping_effect:0 "[CHARACTER.GetShortUIName|U] gains a dominant rape [fetish|E]"
carn_they_gained_fetish_raping_effect:0 "[CHARACTER.GetShortUIName|U] gained a dominant rape [fetish|E]"
carn_gain_fetish_raping_effect:0 "Gains a dominant rape [fetish|E]"
carn_gained_fetish_raping_effect:0 "Gained a dominant rape [fetish|E]"

carn_i_gain_fetish_being_raped_effect:0 "You gain a submissive rape [fetish|E]"
carn_i_gained_fetish_being_raped_effect:0 "You gained a submissive rape [fetish|E]"
carn_they_gain_fetish_being_raped_effect:0 "[CHARACTER.GetShortUIName|U] gains a submissive rape [fetish|E]"
carn_they_gained_fetish_being_raped_effect:0 "[CHARACTER.GetShortUIName|U] gained a submissive rape [fetish|E]"
carn_gain_fetish_being_raped_effect:0 "Gains a submissive rape [fetish|E]"
carn_gained_fetish_being_raped_effect:0 "Gained a submissive rape [fetish|E]"

carn_i_gain_fetish_lactation_effect:0 "You gain a lactation [fetish|E]"
carn_i_gained_fetish_lactation_effect:0 "You gained a lactation [fetish|E]"
carn_they_gain_fetish_lactation_effect:0 "[CHARACTER.GetShortUIName|U] gains a lactation [fetish|E]"
carn_they_gained_fetish_lactation_effect:0 "[CHARACTER.GetShortUIName|U] gained a lactation [fetish|E]"
carn_gain_fetish_lactation_effect:0 "Gains a lactation [fetish|E]"
carn_gained_fetish_lactation_effect:0 "Gained a lactation [fetish|E]"

carn_i_lose_fetishes_effect:0 "You lose all [fetishes|E]"
carn_i_lost_fetishes_effect:0 "You lost all [fetishes|E]"
carn_they_lose_fetishes_effect:0 "[CHARACTER.GetShortUIName|U] loses all [fetishes|E]"
carn_they_lost_fetishes_effect:0 "[CHARACTER.GetShortUIName|U] lost all [fetishes|E]"
carn_lose_fetishes_effect:0 "Loses all [fetishes|E]"
carn_lost_fetishes_effect:0 "Lost all [fetishes|E]"

carn_i_lose_fetish_effect:0 "You lose a [fetish|E]"
carn_i_lost_fetish_effect:0 "You lost a [fetish|E]"
carn_they_lose_fetish_effect:0 "[CHARACTER.GetShortUIName|U] loses a [fetish|E]"
carn_they_lost_fetish_effect:0 "[CHARACTER.GetShortUIName|U] lost a [fetish|E]"
carn_lose_fetish_effect:0 "Loses a [fetish|E]"
carn_lost_fetish_effect:0 "Lost a [fetish|E]"

carn_msg_fetish_gained:0 "Fetish Gained"


code:
l_english:

 carn_i_gain_slave: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en tu [slave|E]"
 carn_they_gain_slave: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en [CHARACTER.GetShortUINamePossessive] [slave|E]"

 carn_i_got_slave: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en tu [slave|E]"
 carn_they_got_slave: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en [CHARACTER.GetShortUINamePossessive] [slave|E]"

 carn_i_gain_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en tu [slave_owner|E]"
 carn_they_gain_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

 carn_i_got_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en tu [slave_owner|E]"
 carn_they_got_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

 carn_i_lose_slave: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [slave|E]"
 carn_they_lose_slave: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [slave|E]"

 carn_i_lost_slave: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [slave|E]"
 carn_they_lost_slave: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [slave|E]"

 carn_i_lose_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [slave_owner|E]"
 carn_they_lose_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

 carn_i_lost_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [slave_owner|E]"
 carn_they_lost_slave_owner: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

 carn_i_gain_dominant: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en tu [dominant|E]"
 carn_they_gain_dominant: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en [CHARACTER.GetShortUINamePossessive] [dominant|E]"

 carn_i_got_dominant: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en tu [dominant|E]"
 carn_they_got_dominant: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en [CHARACTER.GetShortUINamePossessive] [dominant|E]"

 carn_i_lose_dominant: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [dominant|E]"
 carn_they_lose_dominant: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [dominant|E]"

 carn_i_lost_dominant: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [dominant|E]"
 carn_they_lost_dominant: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [dominant|E]"

 carn_i_gain_submissive: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en tu [submissive|E]"
 carn_they_gain_submissive: "[TARGET_CHARACTER.GetShortUIName|U] se convierte en [CHARACTER.GetShortUINamePossessive] [submissive|E]"

 carn_i_got_submissive: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en tu [submissive|E]"
 carn_they_got_submissive: "[TARGET_CHARACTER.GetShortUIName|U] se convirtio en [CHARACTER.GetShortUINamePossessive] [submissive|E]"

 carn_i_lose_submissive: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [submissive|E]"
 carn_they_lose_submissive: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [submissive|E]"

 carn_i_lost_submissive: "[TARGET_CHARACTER.GetShortUIName|U] no es más tu [submissive|E]"
 carn_they_lost_submissive: "[TARGET_CHARACTER.GetShortUIName|U] no es más [CHARACTER.GetShortUINamePossessive] [submissive|E]"


code:
l_spanish:

carn_i_gain_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes your [slave|E]"
carn_they_gain_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes [CHARACTER.GetShortUINamePossessive] [slave|E]"

carn_i_got_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] became your [slave|E]"
carn_they_got_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] became [CHARACTER.GetShortUINamePossessive] [slave|E]"

carn_i_gain_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes your [slave_owner|E]"
carn_they_gain_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

carn_i_got_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] became your [slave_owner|E]"
carn_they_got_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] became [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

carn_i_lose_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [slave|E]"
carn_they_lose_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [slave|E]"

carn_i_lost_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [slave|E]"
carn_they_lost_slave:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [slave|E]"

carn_i_lose_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [slave_owner|E]"
carn_they_lose_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

carn_i_lost_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [slave_owner|E]"
carn_they_lost_slave_owner:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [slave_owner|E]"

carn_i_gain_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes your [dominant|E]"
carn_they_gain_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes [CHARACTER.GetShortUINamePossessive] [dominant|E]"

carn_i_got_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] became your [dominant|E]"
carn_they_got_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] became [CHARACTER.GetShortUINamePossessive] [dominant|E]"

carn_i_lose_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [dominant|E]"
carn_they_lose_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [dominant|E]"

carn_i_lost_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [dominant|E]"
carn_they_lost_dominant:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [dominant|E]"

carn_i_gain_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes your [submissive|E]"
carn_they_gain_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] becomes [CHARACTER.GetShortUINamePossessive] [submissive|E]"

carn_i_got_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] became your [submissive|E]"
carn_they_got_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] became [CHARACTER.GetShortUINamePossessive] [submissive|E]"

carn_i_lose_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [submissive|E]"
carn_they_lose_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [submissive|E]"

carn_i_lost_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer your [submissive|E]"
carn_they_lost_submissive:0 "[TARGET_CHARACTER.GetShortUIName|U] is no longer [CHARACTER.GetShortUINamePossessive] [submissive|E]"


code:
l_spanish:
carn_msg_arousal:1 "Exitacion Causa Estres"
carn_msg_arousal_desc:1 "La falta de satisfación sexual te causa [stress_gain_i] [stressed|E]"


code:
l_spanish:

carn_sex_scene.0001.t:1 "Agonia de Pasion"
carn_sex_scene.0001.desc_opening:1 "Encuentro a mi [ROOT.Char.Custom2('RelationToMeShort', SCOPE.sC('carn_sex_target'))] [carn_sex_target.GetTitledFirstName] esperandome ansiosamente."
carn_sex_scene.0001.desc_ending:1 "[ROOT.Char.Custom2('sex_scene', SCOPE.sC('carn_sex_target'))]"
carn_sex_scene.0001.a:1 "Explendido."


code:
l_spanish:
carn_can_no_longer_work_as_prostitute_tooltip:1 "[carn_prostitute.GetShortUIName|U] No puede ejercer más la prostitución"
carn_prostitution_random_events.0001.notification:1 "Prostitución: Hablilidades Mejoradas"
carn_prostitution_random_events.0002.notification:1 "Prostitución: La competencia te calumnia"
carn_prostitution_random_events.0003.notification:1 "Prostitución: [ROOT.Char.GetFaith.PriestNeuterPlural|U] Te condena"
carn_prostitution_random_events.0005.notification:1 "Prostitución: Buenas propinas"

carn_prostitution_random_events.0011.t:1 "Prostitución: Una proposición seductora"
carn_prostitution_random_events.0011.desc:1 "Mientras estoy en mis aposentos, me intriga saber que mi próximo cliente no es nada más que [client.Custom2('MyCharacterIntroduction', ROOT.Char)].\n\nContenplandome con una lujuria desenfrenada, [client.GetSheHe] me asegura que tendre una buena recompensa por mis servicios..."

carn_prostitution_random_events.0011.a:1 "¡Quién soy para rechazar tal propuesta?"
carn_prostitution_random_events.0011.b:1 "Me temo que debo rechazar su oferta."
carn_prostitution_random_events.0011.c:1 "Esto prodría ser un gran escandalo..."


code:
l_spanish:

carn_sex_scene.0003.t:0 "Defilement"
carn_sex_scene.0003.desc_opening:0 "[carn_sex_target.Custom2('MyCharacterIntroduction', ROOT.Char)|U] looks at me with fear and dread as I approach [carn_sex_target.GetHerHim].\n\nI rip [carn_sex_target.GetHerHis] [carn_sex_target.Custom('GetClothingArticle')] off [carn_sex_target.GetHerHis] body and force myself onto [carn_sex_target.GetHerHim]. Driven by lust, I have my way with my prisoner, without a care for anything but my own pleasure.\n\n"
carn_sex_scene.0003.desc_ending:0 "After having had my fun with [carn_sex_target.GetHerHim], I take my leave, paying [carn_sex_target.GetHerHim] no more attention."
carn_sex_scene.0003.a:0 "Now [carn_sex_target.GetShortUIName] knows [carn_sex_target.GetHerHis] place."

carn_sex_scene.0004.t:0 "Raped"
carn_sex_scene.0004.desc_opening:0 "[carn_sex_target.Custom2('MyCharacterIntroduction', ROOT.Char)|U] looks at me hungrily as [carn_sex_target.GetSheHe] approaches me, [carn_sex_target.GetHerHis] intent clear.\n\n[carn_sex_target.GetSheHe|U] rips my [carn_sex_player.Custom('GetClothingArticle')] off my body and forces [carn_sex_target.GetHerselfHimself] onto me. Driven by lust, [carn_sex_target.GetSheHe] has [carn_sex_target.GetHerHis] way with me, without a care for anything but [carn_sex_target.GetHerHis] own pleasure.\n\n"
carn_sex_scene.0004.desc_ending:0 "After defiling me, [carn_sex_target.GetSheHe] takes [carn_sex_target.GetHerHis] leave, paying me no more attention."
carn_sex_scene.0004.a:0 "I feel sick..."
carn_sex_scene.0004.a.being_raped_fetish:0 "That felt... good..."


code:
l_spanish:
carn_slave.0001.t:1 "Esclavizado"
carn_slave.0001.desc:1 "Me llevan hasta el patio, donde me despojan de mi calzado y me cologan grilletes en mis muñecas. Me resigno a mi terrible destino mientras [actor.GetShortUIName] me proclama como un esclavo más."
carn_slave.0001.a:1 "Desde este dia, no soy más que la propiedad de otros."


code:
l_spanish:
carn_slave_prostitution.0001.t:1 "Ganancias la prostitución esclavo"


code:
l_spanish:
carn_slavery_doctrine.0001.desc:1 "Cumpliré con el deber de [ROOT.Char.GetFaith.GetReligion.GetAdjectiveNoTooltip] y voy a liberar a mis esclavos."
carn_slavery_doctrine.0001.a:1 "Una sabia decisión."

carn_slavery_doctrine.0002.desc:1 "Entiendo tus preocupaciones, pero consegui estos esclavos con un alto preco...\n\nSi recuperaras mi inversion, estaria más que dispuesto a liberarlos."
carn_slavery_doctrine.0002.a:1 "Es lo que [ROOT.Char.GetFaith.GetReligion.GetAdjectiveNoTooltip] tiene que hacer."
carn_slavery_doctrine.0002.b:1 "¡No pagaré por tus adquisiciones pecaminosas!"
carn_slavery_doctrine.0002.c:1 "Me temo que no tienes elección en cuanto al asunto."

carn_slavery_doctrine.0003.default.desc:1 "Veo la sabiduria en tu peticion, pero pero los servicios de estos esclavos son indispensables...\n\nTal vez si me prometieras tu ayuda en mis negocios, podría reponer su perdida."
carn_slavery_doctrine.0003.a:1 "Te ayudare a hacerlo de la forma correcta."
carn_slavery_doctrine.0003.b:1 "¡Tus errores no son de mi importancia!"
carn_slavery_doctrine.0003.c:1 "Tienes otras deudas que pagarme, primero."

carn_slavery_doctrine.0004.desc:1 "Tus demandas no tienen merito ni justificación. Mis esclavos no son le incumben a [recipient.GetFaith.PantheonTerm]."
carn_slavery_doctrine.0004.hooking_out:1 "\n\nTe recuerdo que eres de mi propiedad, no me interesa seguir con el asunto."
carn_slavery_doctrine.0004.b:1 "Entonces [recipient.GetFaith.PantheonTerm] sera testigo de tu juicio."
carn_slavery_doctrine.0004.c:1 "¡No pienses que dejare que te salgas con la tuya!"
carn_slavery_doctrine.0004.d:1 "Oh, creo que haras exactamente lo que yo diga."


code:
l_spanish:
 carn_cv_spouses_heading: "$SECONDARY_SPOUSES$ #weak ([GetDataModelSize(CharacterWindow.GetSecondarySpouses)])#!"
 carn_cv_concubines_heading: "$doctrine_concubines_name$ #weak ([GetDataModelSize(CharacterWindow.GetConcubines)])#!"

 carn_lactation_gui_tooltip: "[milk_production|E]: [Character.MakeScope.Var('carn_milk_production').GetValue|0] #weak ([Character.Custom('CarnShortMilkProductionDescription')|U])#!"


code:
l_spanish:

 carn_fetish_gui_title: "#T [fetishes|E]:#!"
 carn_fetish_gui_anal: "$EFFECT_LIST_BULLET$Anal"
 carn_fetish_gui_sadism: "$EFFECT_LIST_BULLET$Sadism"
 carn_fetish_gui_masochism: "$EFFECT_LIST_BULLET$Masochism"
 carn_fetish_gui_bestiality: "$EFFECT_LIST_BULLET$Bestiality"
 carn_fetish_gui_watersports: "$EFFECT_LIST_BULLET$Watersports"
 carn_fetish_gui_scat: "$EFFECT_LIST_BULLET$Scat"
 carn_fetish_gui_gore: "$EFFECT_LIST_BULLET$Gore"
 carn_fetish_gui_foot_play: "$EFFECT_LIST_BULLET$Foot Play"
 carn_fetish_gui_bondage: "$EFFECT_LIST_BULLET$Bondage"
 carn_fetish_gui_domination: "$EFFECT_LIST_BULLET$Domination"
 carn_fetish_gui_submission: "$EFFECT_LIST_BULLET$Submission"
 carn_fetish_gui_raping: "$EFFECT_LIST_BULLET$Raping"
 carn_fetish_gui_being_raped: "$EFFECT_LIST_BULLET$Being Raped"
 carn_fetish_gui_lactation: "$EFFECT_LIST_BULLET$[lactation|E]"


code:
l_spanish:
carn_button_prison_enslave_tooltip:1 "#T $carn_enslave_interaction$#!"
carn_button_prison_mass_enslave_tooltip:1 "Mass $carn_enslave_interaction$"


code:
l_spanish:
carn_using_birth_control_modifier:1 "Usando control natal"
carn_using_birth_control_modifier_desc:1 "Este personaje esta usando ungüentos y otras medicinas para evitar embarazos no deseados."


code:
l_spanish:
carn_working_as_prostitute_1_modifier:1 "Trabajando como $trait_prostitute_1$"
carn_working_as_prostitute_1_modifier_desc:1 "Este personaje vende su cuerpo impudicamente a cambio de monedas."
carn_working_as_prostitute_2_modifier:1 "Trabajando como $trait_prostitute_2$"
carn_working_as_prostitute_2_modifier_desc:1 "La influyente labor sexual de este personaje es avalada por varios clientes."
carn_working_as_prostitute_3_modifier:1 "Trabajando como $trait_prostitute_3$"
carn_working_as_prostitute_3_modifier_desc:1 "Este personaje recibe visitas nocturnas tanto como de la nobleza como de la realeza."


code:
l_spanish:
 carn_recently_raped:1 "Violado recientemente"


code:
l_spanish:

 carn_raped_family_member:0 "Raped Family Member"
 carn_raped_me:0 "Raped Me"


code:
l_spanish:
carn_enslaved_close_family_opinion:1 "Familia Esclavizada"
carn_enslaved_close_family_crime_opinion:1 "Familia Esclavizada Ilegalmente"
carn_enslaved_dynasty_member_opinion:1 "Miembro de la Dinastia Esclavizado"
carn_enslaved_close_relation_opinion:1 "Miembro Cercano Esclavizado"
carn_enslaved_my_countryman_opinion:1 "Subdito Esclavizado"
carn_enslaved_guest_opinion:1 "Invitado Esclavizado"
carn_enslaved_me_opinion:1 "Me Esclavizo"
carn_enslaved_me_crime_opinion:1 "Me Es Ilegalmente"
carn_demanded_manumission_opinion:1 "Demando Sumision"
carn_refused_manumission_demand_opinion:1 "Sumision Rechazada"
carn_illegal_refused_manumission_demand_opinion:1 "Sumision Rechazada"
carn_freed_me_from_slavery_opinion:1 "Me Libero de la Esclavitud"
carn_stole_my_slave_opinion:1 "Me Robó Mí Esclavo"
carn_wants_to_be_your_slave_opinion:1 "Desea Un Amo"


code:
l_spanish:

carn_doctrine_same_slavery_name:1 "Religión Esclavista Justa"
carn_doctrine_same_slavery_crime_name:1 "Criminal"
carn_doctrine_same_slavery_crime_desc:1 "Es un pecado capital esclavizar a un miembro de la fé [ROOT.Faith.GetReligion.GetAdjectiveNoTooltip], porque hacerlo es creerte superior a [ROOT.Faith.PantheonTerm]."
carn_doctrine_same_slavery_shunned_name:1 "Rechazado"
carn_doctrine_same_slavery_shunned_desc:1 "A pesar de nuestras diferencia, todos los miembros de [ROOT.Faith.GetReligion.GetAdjectiveNoTooltip] son projimos. Es injusto que uno de nosotros sea tratado menos que un ser humano."
carn_doctrine_same_slavery_accepted_name:1 "Aceptado"
carn_doctrine_same_slavery_accepted_desc:1 "La esclavitud es un justo y merecido castigo para aquellos que hayan pecado contra [ROOT.Faith.GetAdherentNamePluralNoTooltip]. Una servidumbre de por vida sera su justo castigo por sus faltas."
doctrine_parameter_same_slavery_illegal:1 "Poseer [slaves|E] de [faith_righteous|E] o [faith_astray|E] [faiths|E] es un [crime|E]"
doctrine_parameter_same_slavery_shunned:1 "Poseer [slaves|E] de [faith_righteous|E] o [faith_astray|E] [faiths|E] esta [shunned|E]"
doctrine_parameter_same_slavery_accepted:1 "Poseer [slaves|E] de [faith_righteous|E] o [faith_astray|E] [faiths|E] es aceptado"

carn_doctrine_other_slavery_name:1 "Religión Esclavista Hostil"
carn_doctrine_other_slavery_crime_name:1 "Criminal"
carn_doctrine_other_slavery_crime_desc:1 "Todas las personas tienen dignidad a pesar de su credo. Es un crimen esclavizar a alguien solo porque no cree en [ROOT.Faith.PantheonTerm]."
carn_doctrine_other_slavery_shunned_name:1 "Rechazado"
carn_doctrine_other_slavery_shunned_desc:1 "Es cruel y desagradable apropiarse de la vida de un infiel, incluso si sus creencias son erroneas."
carn_doctrine_other_slavery_accepted_name:1 "Aceptado"
carn_doctrine_other_slavery_accepted_desc:1 "Todos los [ROOT.Faith.GetAdherentNamePluralNoTooltip] tienen el derecho de salvar a aquellos que no creen en la fé verdadera, incluso de si mismos."
doctrine_parameter_other_slavery_illegal:1 "Poseer [slaves|E] de [faith_hostile|E] o [faith_evil|E] [faiths|E] es un [crime|E]"
doctrine_parameter_other_slavery_shunned:1 "Poseer [slaves|E] de [faith_hostile|E] o[faith_evil|E] [faiths|E] es [shunned|E]"
doctrine_parameter_other_slavery_accepted:1 "Poseer [slaves|E] de [faith_hostile|E] o [faith_evil|E] [faiths|E] es aceptado"

carn_doctrine_prostitution_name:1 "Prostitución"
carn_doctrine_prostitution_crime_name:1 "Criminal"
carn_doctrine_prostitution_crime_desc:1 "Vender o pagar por sexo es corromper la base misma de la sociedad. Aquellos que esparcen este mal deben ser castigados por sus crimenes."
carn_doctrine_prostitution_shunned_name:1 "Rechazada"
carn_doctrine_prostitution_shunned_desc:1 "Aunque sea vergonzoso y demigrante vender cuerpos por sexo, no hay nada inherentemente contrario hacia [ROOT.Faith.PantheonTerm]."
carn_doctrine_prostitution_accepted_name:1 "Aceptada"
carn_doctrine_prostitution_accepted_desc:1 "El sexo es parte natural de nuestra sociedad, y comerciar con sexo por dinero es un negocio más como cualquier otro."
doctrine_parameter_carn_prostitution_illegal:1 "Los personajes [prostitute|E] [trait|E] son [criminals|E]"
doctrine_parameter_carn_prostitution_shunned:1 "Los personajes [prostitute|E] [trait|E] son [shunned|E]"
doctrine_parameter_carn_prostitution_accepted:1 "Los personajes [prostitute|E] [trait|E] son aceptados"

doctrine_parameter_naked_females_active:1 "Las mujeres que profesan esta religión estaran desnudas"
doctrine_parameter_naked_males_active:1 "Los hombres que profesan esta religión estaran desnudos"

carn_dummy_doctrine_name:1 ""
carn_we_need_this_to_define_parameters_otherwise_error_log_complains_name:1 ""
carn_we_need_this_to_define_parameters_otherwise_error_log_complains_desc:1 ""


code:
"""
CK3 Localization Helper script by erri120 under GPLv3.

Usage:

Updating translations:

python localization_helper.py update --lang german

Viewing statistics:

python localization_helper.py stats

Viewing statistics for a specific language:

python localization_helper.py stats --lang german

"""

import os;
import argparse;
import sys;
import glob;
import shutil;
import re;
from typing import Tuple, List;
from enum import Enum;

class TranslationStatus(Enum):
    """Status enum for translations"""
    UNTRANSLATED = 0
    TRANSLATED = 1
    NEEDSUPDATE = 2

#key, value, translated, comment
Yaml = Tuple[str, str, TranslationStatus, bool];

BASE_LANGUAGE = 'english';
ENCODING = 'utf-8-sig';
BACKUP_SUFFIX = '_backup';

localization_dir = os.path.abspath('localization');
base_dir = os.path.join(localization_dir, BASE_LANGUAGE);

def create_empty_list(count: int) -> List[str]:
    """Creates a new empty list"""
    return [''] * count;

def is_empty(string: str) -> bool:
    """Checks if the string is empty or only has whitespaces"""

    if not string:
        return True;
    return string.isspace();

def get_lang_name(lang: str) -> str:
    """Returns the name ending for a language."""

    return 'l_'+lang;

def get_yaml(string: str) -> Yaml:
    """Gets a YAML Tuple for the current line"""

    empty = ('', '', TranslationStatus.UNTRANSLATED, False);

    if is_empty(string):
        return empty;

    line = string.strip();
    comment_index = -1;

    try:
        comment_index = line.index('#');
        if comment_index == 0:
            return ('', '', TranslationStatus.UNTRANSLATED, True);
    except ValueError:
        pass;

    line_len = len(line);
    index = -1;
    key = '';
    value = '';
    status = TranslationStatus.UNTRANSLATED;

    try:
        index = line.index(':');
    except ValueError:
        print('Unable to get index of : in line \"'+line+'\"');
        return empty;

    key = line[0:index];

    if line_len <= index+1:
        return (key, value, status, False);

    if not is_empty(line[index+1]):
        translation_value = line[index+1];
        if not translation_value in ('0', '1', '2'):
            print('Unknown translation value \"'+translation_value+'\" in line \"'+line+'\"');
        else:
            if translation_value == '1':
                status = TranslationStatus.TRANSLATED;
            if translation_value == '2':
                status = TranslationStatus.NEEDSUPDATE;
        value = line[index+2:].strip();
    else:
        value = line[index+1:].strip();

    result = (key, value, status, False);
    return result;

def get_yaml_from_file(path: str) -> List[Yaml]:
    """Reads a file and returns a list of all YAML values"""

    yaml = list();
    with open(path, 'r', encoding=ENCODING) as file_stream:
        line = file_stream.readline();
        while line:
            yaml.append(get_yaml(line));
            line = file_stream.readline();

    return yaml;

def yaml_to_string(yaml: Yaml, include_translate: bool = True, override_translate_status: str = '') -> str:
    """Converts a YAML Tuple to string"""
    translate_str = '' if not include_translate else str(yaml[2].value);
    if not override_translate_status == '':
        translate_str = override_translate_status;
    return yaml[0]+':'+translate_str+' '+yaml[1]+'\n';

def update_translation_file(input_path: str, output_path: str, output_lang: str):
    """Updates the provided file with new translations"""

    output_lang_name = get_lang_name(output_lang);
    output_path_short = re.sub(r'^.*?localization', '', output_path)
    input_path_short = re.sub(r'^.*?localization', '', input_path)

    print("========================================");
    print('Updating file '+output_path_short);

    if not os.path.exists(output_path):
        print('=> File does not exist, copying from '+input_path_short+' to '+output_path_short);
        shutil.copyfile(input_path, output_path);

    input_yaml = get_yaml_from_file(input_path);
    output_yaml = get_yaml_from_file(output_path);

    input_len = len(input_yaml);
    output_len = len(output_yaml);
    new_lines = create_empty_list(input_len);

    if output_len != input_len:
        print('=> Input length does not equal output length: '+str(input_len)+' != '+str(output_len));

    output_len_updated = input_len;
    for i in range(input_len):
        cur_input = input_yaml[i];
        # is comment
        if cur_input[3]:
            continue;

        if i == 0:
            new_lines[0] = output_lang_name+':\n';
            continue;

        if is_empty(cur_input[0]):
            new_lines[i] = '\n';
            continue;

        # searching for a YAML tuple with the same key as the current
        found_in_output = next((x for x in output_yaml if x[0] == cur_input[0]),
            ('', '', TranslationStatus.UNTRANSLATED, False));

        # not found means we just add the input
        if not found_in_output[0]:
            print('==> New key: '+ cur_input[0]);
            new_lines[i] = yaml_to_string(cur_input, True, "0");
            continue;

        # if we found it in the output file we check if it's already flagged as needing update, and keep the translation
        if found_in_output[2] == TranslationStatus.NEEDSUPDATE:
            new_lines[i] = yaml_to_string(found_in_output);
            continue;

        # if we found it in the output file we check if it needs update and we add the NEEDSUPDATE status
        if cur_input[2] == TranslationStatus.NEEDSUPDATE and found_in_output[2] == TranslationStatus.TRANSLATED:
            print('==> New Update Needed: '+ cur_input[0]);
            new_lines[i] = "#" + yaml_to_string(found_in_output) + yaml_to_string(cur_input, True, "2");
            # i = i+1;
            # output_len_updated = output_len_updated+1;
            continue;

        # if we found it in the output file we check if it's translated and keep the translation
        if found_in_output[2] == TranslationStatus.TRANSLATED:
            new_lines[i] = yaml_to_string(found_in_output);
            continue;

        # if it's not translated then we copy the input
        new_lines[i] = yaml_to_string(cur_input, True, "0");

    with open(output_path, 'w', encoding=ENCODING) as file_stream:
        file_stream.writelines(new_lines);

def copy_base_translations(input_dir: str, output_dir: str, input_lang: str, output_lang: str):
    """
    Recursively copies the contents of one folder to another and
    calls the updateFile function on every file.
    """

    input_lang_file_name = get_lang_name(input_lang)+'.yml';
    output_lang_file_name = get_lang_name(output_lang)+'.yml';

    if not os.path.exists(output_dir):
        os.mkdir(output_dir);
    items = glob.glob(input_dir + '\\*');
    for item in items:
        if os.path.isdir(item):
            path = os.path.join(output_dir, item.split(os.path.sep)[-1]);
            copy_base_translations(item, path, input_lang, output_lang);
        else:
            file_name = item.split(os.path.sep)[-1];
            if file_name.endswith(input_lang_file_name):
                file_name = file_name.replace(input_lang_file_name, output_lang_file_name);
            path = os.path.join(output_dir, file_name);
            update_translation_file(item, path, output_lang);

def rename_deleted_or_moved_files(input_dir: str, output_dir: str, input_lang: str, output_lang: str):
    """
    Rename files in the translation that are not present in the english localization anymore
    """

    input_lang_file_name = get_lang_name(input_lang)+'.yml';
    output_lang_file_name = get_lang_name(output_lang)+'.yml';

    # We get a list of all files in the english localization
    input_file_list = list()
    for subdir, dirs, files in os.walk(input_dir):
        for file in files:
            cur_input_file = os.path.join(subdir, file).split(input_lang_file_name);
            cur_input_file = cur_input_file[0].split(input_dir);
            input_file_list += cur_input_file;

    # We compare the translation files with the english ones, and rename those that don't exist in the english loc anymore
    # With the exception of the language specific custom localizations in "custom_localization_[output_lang]"
    for subdir, dirs, files in os.walk(output_dir):
        for file in files:
            cur_output_file = os.path.join(subdir, file).split(output_lang_file_name);
            cur_output_file = cur_output_file[0].split(output_lang);
            if not cur_output_file[1] in input_file_list and not os.path.isdir(cur_output_file[1]) and not file.endswith(BACKUP_SUFFIX) and not subdir.endswith("custom_localization_" + output_lang):
                print("========================================");
                print("=> '" + input_lang + cur_output_file[1] + input_lang_file_name + "' doesn't exist anymore");
                print(" ==> renaming the " + output_lang + " version for backup");
                os.rename(os.path.join(subdir, file), os.path.join(subdir, file) + BACKUP_SUFFIX)

def updating(output_language: str):
    """Updates all Translations"""

    print("===================================================");
    print('Updating Translation for Language: '+output_language);
    print("===================================================");
    output_dir = os.path.join(localization_dir, output_language);

    print('=> Using '+BASE_LANGUAGE+' Translations from '+base_dir+' in '+output_dir);
    copy_base_translations(base_dir, output_dir, BASE_LANGUAGE, output_language);
    rename_deleted_or_moved_files(base_dir, output_dir, BASE_LANGUAGE, output_language);

def get_translation_stats_file(base: str, path: str, cur_lang: str, detail: bool) -> Tuple[str, int, int, int]:
    """Gets the number of translated and not translated string of a file"""

    yaml = get_yaml_from_file(path);

    total = 0;
    translated = 0;
    not_translated = 0;
    needs_update = 0;

    lang_name = get_lang_name(cur_lang);

    for x in yaml:
        if x[3]:
            continue;
        if is_empty(x[0]):
            continue;
        if x[0] == lang_name:
            continue;

        total += 1;
        if x[2] == TranslationStatus.TRANSLATED:
            translated += 1;
        elif x[2] == TranslationStatus.UNTRANSLATED:
            if detail:
                print(path+' '+x[0]);
            not_translated += 1;
        else:
            needs_update += 1;

    return (path.replace(base, ''), translated, not_translated, needs_update);

def get_translation_stats_folder(base: str, folder: str, cur_lang: str, detail: bool) -> List[Tuple[str, int, int, int]]:
    """Gets Translation stats for a folder"""

    result = list();

    items = glob.glob(folder + '\\*');
    for item in items:
        if os.path.isdir(item):
            dir_stats = get_translation_stats_folder(base, item, cur_lang, detail);
            for stat in dir_stats:
                result.append(stat);
        else:
            file_stats = get_translation_stats_file(base, item, cur_lang, detail);
            result.append(file_stats);

    return result;

def add(enumerable: List[int]) -> int:
    """Adds all numbers of a list"""

    i = 0;
    for x in enumerable:
        i += x;
    return i;

def stats(lang: str):
    """Displays Translation Statistics"""

    print('Translation Statistics:\n');
    print('%-15s %10s %7s %8s %7s' % ('Language ', 'Translated', 'Missing', 'Outdated', 'Ratio'))

    languages = glob.glob(localization_dir+'\\*');
    detail = lang != '';
    for language in languages:
        name = language.replace(localization_dir+'\\', '');
        if name == BASE_LANGUAGE:
            continue;
        if detail and lang != name:
            continue;
        lang_stats = get_translation_stats_folder(language+'\\', language, name, detail);
        translated = list(map(lambda x: x[1], lang_stats));
        missing = list(map(lambda x: x[2], lang_stats));
        needs_update = list(map(lambda x: x[3], lang_stats));
        total_translated = add(translated);
        total_missing = add(missing);
        total_needs_update = add(needs_update);
        total = total_translated+total_missing+total_needs_update;
        ratio = (total_translated/total)*100;

        ratio_str = f'{ratio:.2f}%';

        print('%-15s %10s %7s %8s %7s' % (name, total_translated, total_missing, total_needs_update, ratio_str))

def main():
    """Main"""
    parser = argparse.ArgumentParser('Localization Helper',
        description='Localization Helper by erri120',
        allow_abbrev=False);
    parser.add_argument('verb',
        help='Translation Update or Statistics',
        choices=('update', 'stats'));
    parser.add_argument('--lang',
        action='store',
        type=str,
        metavar='Language',
        help='Language for Translation Updates');
    args = parser.parse_args();

    lang = args.lang;
    if args.verb == 'update':
        if lang is None:
            print('update requires --lang to be set!');
            sys.exit(-1);
        updating(lang);
    else:
        if lang is None:
            stats('');
        else:
            stats(lang);

if __name__ == '__main__':
    main();


code:
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain

path: .gitattributes

license: unknown


code:
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
/Source/Patches/PawnAnimationPatches/HarmonyPatch_Pawn_DrawTracker.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRotation.cs
/Source/Patches/PawnAnimationPatches/HarmonyPatch_PawnRenderer.cs
/Source/Patches/OtherModPatches/HarmonyPatch_ShowHairWithHats.cs
/Source/Patches/OtherModPatches/HarmonyPatch_FacialAnimation.cs
/Source/Patches/OtherModPatches/HarmonyPatch_DontShaveYourHead.cs
/Source/Patches/OtherModPatches/HarmonyPatch_CSL.cs
/Source/Patches/OtherModPatches/HarmonyPatch_AlienRace.cs
/Source/Patches/ThingAnimationPatches/HarmonyPatch_ThingDrawAt.cs
/Defs/AnimationDefs/Animations_SexToys.xml

path: .gitignore


code:
<?xml version="1.0" encoding="utf-8"?>

<ModMetaData>
	<name>Rimworld-Animations</name>
	<author>C0ffee</author>
  <url>https://gitgud.io/c0ffeeeeeeee/rimworld-animations</url>
	<supportedVersions>

1.1

1.2

	</supportedVersions>
	<packageId>c0ffee.rimworld.animations</packageId>
	<modDependencies>

			<packageId>brrainz.harmony</packageId>
			<displayName>Harmony</displayName>
			<steamWorkshopUrl>steam://url/CommunityFilePage/2009463077</steamWorkshopUrl>
			<downloadUrl>https://github.com/pardeike/HarmonyRimWorld/releases/latest</downloadUrl>

			<packageId>UnlimitedHugs.HugsLib</packageId>
			<displayName>HugsLib</displayName>
			<downloadUrl>https://github.com/UnlimitedHugs/RimworldHugsLib/releases/latest</downloadUrl>
			<steamWorkshopUrl>steam://url/CommunityFilePage/818773962</steamWorkshopUrl>

      <packageId>rim.job.world</packageId>
      <displayName>RimJobWorld</displayName>
      <downloadUrl>https://www.loverslab.com/topic/110270-mod-rimjobworld/</downloadUrl>

	</modDependencies>
	<loadAfter>

UnlimitedHugs.HugsLib

brrainz.harmony

rim.job.world

	</loadAfter>
	<description>
    Rimworld Animations! Hurray!

    Questions or bugs?
    Chat with me on the forums: https://www.loverslab.com/topic/140386-rjw-animations/
    Or on the rjw discord: https://discord.gg/CXwHhv8

  </description>
</ModMetaData>


code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
  <identifier>Rimworld-Animations</identifier>
  <version>1.1.2</version>
</Manifest>