Ejemplo n.º 1
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     target = cls.get_interaction_target(interaction_instance)
     sim_skill_level = get_sim_nudity_skill_level(sim)
     target_skill_level = get_sim_nudity_skill_level(target)
     if sim_skill_level > target_skill_level:
         if TurboSimUtil.Sim.is_npc(target):
             apply_nudity_skill_influence(target,
                                          sim_skill_level / 100,
                                          overall_limit=2.5)
         else:
             increase_sim_nudity_skill(target,
                                       sim_skill_level,
                                       extra_fatigue=2.5)
     elif sim_skill_level < target_skill_level:
         if TurboSimUtil.Sim.is_npc(sim):
             apply_nudity_skill_influence(sim,
                                          target_skill_level / 100,
                                          overall_limit=2.5)
         else:
             increase_sim_nudity_skill(sim,
                                       target_skill_level,
                                       extra_fatigue=2.5)
     if TurboSimUtil.Gender.get_gender(sim) in get_sim_preferenced_genders(
             target):
         change_sim_desire_level(target, 5)
     if TurboSimUtil.Gender.get_gender(
             target) in get_sim_preferenced_genders(sim):
         change_sim_desire_level(sim, 5)
     increase_sim_ww_statistic(sim, 'times_talked_exhibitionism')
     increase_sim_ww_statistic(target, 'times_talked_exhibitionism')
     return True
Ejemplo n.º 2
0
def update_naturism_buffs(sim_info, category_and_index):
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    has_naturist_buff = has_sim_buff(
        sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2) or (
            has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3) or
            (has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4)
             or has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5)))
    sim_outfit_level = get_sim_outfit_level(
        sim_info, outfit_category_and_index=category_and_index)
    is_sim_allowed_for_buff = (sim_outfit_level == OutfitLevel.NUDE
                               or sim_outfit_level == OutfitLevel.BATHING
                               ) and is_sim_naturist(sim_info)
    if has_naturist_buff is False and is_sim_allowed_for_buff is True:
        nudity_skill_level = get_sim_nudity_skill_level(sim_info)
        naturism_buff = None
        if nudity_skill_level <= 1:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_1
        elif nudity_skill_level == 2:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_2
        elif nudity_skill_level == 3:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_3
        elif nudity_skill_level == 4:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_4
        elif nudity_skill_level >= 5:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_5
        if naturism_buff is not None:
            add_sim_buff(sim_info, naturism_buff)
    if has_naturist_buff is True and is_sim_allowed_for_buff is False:
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5)
Ejemplo n.º 3
0
def update_sim_nudity_skill_on_mirror_use(sim_identifier):
    if sim_ev(sim_identifier
              ).is_running_mirror_nudity_skill_interaction is False:
        return
    if not TurboSimUtil.Interaction.is_running_interaction(
            sim_identifier, SimInteraction.WW_MIRROR_ADMIRE_YOUR_BODY):
        sim_ev(
            sim_identifier).is_running_mirror_nudity_skill_interaction = False
        return
    sim_outfit_level = get_sim_outfit_level(sim_identifier)
    sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
    if sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING:
        increase_sim_nudity_skill(
            sim_identifier,
            get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.MIRROR_NAKED_OUTFIT) /
            sim_nudity_skill_level,
            extra_fatigue=0.2,
            reason=NuditySkillIncreaseReason.MIRROR_NAKED_OUTFIT)
    else:
        increase_sim_nudity_skill(
            sim_identifier,
            get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.MIRROR_REVEALING_OUTFIT) /
            sim_nudity_skill_level,
            extra_fatigue=0.05,
            reason=NuditySkillIncreaseReason.MIRROR_REVEALING_OUTFIT)
Ejemplo n.º 4
0
def trigger_story_progression():
    story_progression_debug_sims_count = 0
    story_progression_debug_data = list()
    for sim_info in TurboManagerUtil.Sim.get_all_sim_info_gen(humans=True,
                                                              pets=False):
        if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
            pass
        if not TurboSimUtil.Component.has_component(
                sim_info, TurboComponentUtil.ComponentType.STATISTIC):
            pass
        if has_sim_reached_max_nudity_skill_level(sim_info):
            pass
        nudity_skill_value = get_sim_nudity_skill_level(
            sim_info) + get_sim_nudity_skill_progress(sim_info)
        influence_amount = _update_and_get_influence_score(sim_info)
        if influence_amount > 0:
            increase_sim_nudity_skill(sim_info, influence_amount)
            story_progression_debug_data.append(
                (TurboSimUtil.Name.get_name(sim_info), nudity_skill_value,
                 influence_amount))
        story_progression_debug_sims_count += 1
    from wickedwhims.debug.debug_controller import is_main_debug_flag_enabled
    if is_main_debug_flag_enabled():
        debug_text = ''
        for ((sim_first_name, sim_last_name), current_skill_value,
             influence_amount) in story_progression_debug_data:
            debug_text += '\n' + str(sim_first_name) + ' ' + str(
                sim_last_name) + ': ' + str(
                    '%.2f' % current_skill_value) + ' -> ' + str(
                        '%.2f' %
                        (current_skill_value + influence_amount / 100))
        nudity_notification(text='Checked Sims: ' +
                            str(story_progression_debug_sims_count) +
                            '\nLeveled Sims:' + debug_text,
                            title='Nudity Story Progression')
Ejemplo n.º 5
0
def _has_chance_for_random_undressing(sim_info):
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE,
                              variable_type=bool):
        return False
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.DISABLED:
        return False
    if get_nudity_setting(
            NuditySetting.AUTONOMY_TYPE, variable_type=int
    ) == NudityAutonomyTypeSetting.DISABLED or get_nudity_setting(
            NuditySetting.AUTONOMY_TYPE, variable_type=int
    ) == NudityAutonomyTypeSetting.NPC_ONLY and TurboSimUtil.Sim.is_player(
            sim_info):
        return False
    if not has_sim_permission_for_nudity(sim_info)[0]:
        return False
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.ALWAYS:
        return True
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.RANDOM:
        base_chance = 0.0
        base_chance += 0.08 * get_sim_nudity_skill_level(sim_info)
        if is_sim_exhibitionist(sim_info):
            base_chance += 0.1
        if random.uniform(0, 1) <= base_chance:
            return True
    return False
Ejemplo n.º 6
0
def has_sim_permission_for_nudity(sim_identifier,
                                  nudity_setting_test=False,
                                  extra_skill_level=0,
                                  **kwargs):
    sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
    if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
        return (False, (NudityPermissionDenied.IS_UNDERAGED, ))
    if CNSimUtils.can_have_sex(sim):
        return (False, (NudityPermissionDenied.IS_UNDERAGED, ))
    if nudity_setting_test is True and not get_nudity_setting(
            NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool):
        return (True, tuple())
    if has_current_lot_trait(
            LotTrait.WW_LOTTRAIT_NUDIST
    ) and TurboWorldUtil.Lot.is_position_on_active_lot(
            TurboSimUtil.Location.get_position(sim)):
        return (True, tuple())
    if has_sim_buff(sim, SimBuff.WW_NUDITY_TEMPORARY_BRAVE):
        return (True, tuple())
    nudity_skill_level = min(
        5,
        get_sim_nudity_skill_level(sim) + extra_skill_level)
    if is_sim_exhibitionist(sim):
        score = nudity_skill_level * 120
    else:
        score = nudity_skill_level * 100
    denied_permissions = set()
    for permission_check in (_home_test, _outside_test, _sims_test):
        test_result = permission_check(sim, score, **kwargs)
        if test_result and test_result[0] != 0:
            score += test_result[0]
            denied_permissions.add(test_result[1])
            if score <= 0:
                return (False, denied_permissions)
    return (True, denied_permissions)
Ejemplo n.º 7
0
def _outside_test(sim, _, ignore_location_test=False, **__):
    if ignore_location_test is True:
        return
    if TurboWorldUtil.Lot.is_location_outside(
            TurboSimUtil.Location.get_location(sim)):
        return (-110 + 15 * (get_sim_nudity_skill_level(sim) - 1),
                NudityPermissionDenied.OUTSIDE)
Ejemplo n.º 8
0
def _wickedwhims_increase_sim_nudity_skill_on_related_interactions(interaction_instance):
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool):
        return
    interaction_guid = TurboResourceUtil.Resource.get_guid64(interaction_instance)
    sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
    for (interaction_id, direct_target, skill_points) in NUDE_REWARD_INTERACTION_IDS:
        if interaction_id != interaction_guid:
            continue
        if direct_target is True:
            target_sim = TurboInteractionUtil.get_interaction_target(interaction_instance) or sim
            if target_sim is None:
                target_sim = sim
        else:
            target_sim = sim
        if target_sim is None:
            return
        sim_info = TurboManagerUtil.Sim.get_sim_info(target_sim)
        if sim_info is None:
            return
        target_outfit_level = get_sim_outfit_level(target_sim)
        target_nudity_skill_level = get_sim_nudity_skill_level(target_sim)
        if target_outfit_level == OutfitLevel.NUDE or target_outfit_level == OutfitLevel.BATHING:
            increase_sim_nudity_skill(target_sim, skill_points, extra_fatigue=2.0)
        else:
            if target_outfit_level == OutfitLevel.REVEALING or target_outfit_level == OutfitLevel.UNDERWEAR:
                increase_sim_nudity_skill(target_sim, skill_points/target_nudity_skill_level, extra_fatigue=2.0)
Ejemplo n.º 9
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if CNSimUtils.can_have_sex(sim):
         return False
     nudity_skill_level = get_sim_nudity_skill_level(sim)
     if nudity_skill_level < 2:
         return False
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     return True
Ejemplo n.º 10
0
def update_sim_nudity_skill_on_active_nudity(sim_identifier):
    if TurboSimUtil.Age.is_younger_than(sim_identifier,
                                        TurboSimUtil.Age.CHILD):
        return
    if CNSimUtils.can_have_sex(sim_identifier):
        return
    if is_sim_in_sex(sim_identifier) or is_sim_going_to_sex(sim_identifier):
        return
    if not is_sim_available(sim_identifier):
        return
    sim_outfit_level = get_sim_outfit_level(sim_identifier)
    if sim_outfit_level == OutfitLevel.OUTFIT:
        return
    sims_around_value = _get_sims_around_value(sim_identifier, max_sims=6)
    if sim_outfit_level == OutfitLevel.NUDE:
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT),
            extra_fatigue=0.05,
            reason=NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT)
    elif sim_outfit_level == OutfitLevel.BATHING:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT) /
                                 sim_nudity_skill_level),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT)
    elif sim_outfit_level == OutfitLevel.REVEALING or sim_outfit_level == OutfitLevel.UNDERWEAR:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value *
            (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT) /
             (sim_nudity_skill_level * sim_nudity_skill_level)),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT)
Ejemplo n.º 11
0
def _update_nudity_buffs(sim_info, category_and_index):
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    if not is_sim_naturist(
            sim_info) or get_sim_nudity_skill_level(sim_info) < 2:
        return
    has_nudity_buff = has_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
    sim_outfit_level = get_sim_outfit_level(
        sim_info, outfit_category_and_index=category_and_index)
    is_sim_nude = sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING
    if has_nudity_buff is False and is_sim_nude is True:
        add_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
    if has_nudity_buff is True and is_sim_nude is False:
        remove_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
Ejemplo n.º 12
0
def _get_sim_value(sim, target):
    base_sim_value = 25
    sim_value_modifier = 0
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.
            ROMANTIC_ENGAGED) or has_relationship_bit_with_sim(
                sim, target, SimRelationshipBit.ROMANTIC_MARRIED
            ) or has_relationship_bit_with_sim(
                sim, target, SimRelationshipBit.ROMANTIC_SIGNIFICANT_OTHER):
        return base_sim_value / 4
    if has_relationship_bit_with_sim(sim, target,
                                     SimRelationshipBit.WW_JUST_HAD_SEX):
        return base_sim_value / 4
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.ROMANTIC_HAVEDONEWOOHOO_RECENTLY):
        return base_sim_value / 2
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF
    ) or has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF_EVIL
    ) or has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF_BROMANTICPARTNER):
        return base_sim_value / 2
    current_nudity_level = get_sim_nudity_skill_level(sim)
    if is_sim_naturist(sim) and TurboSimUtil.Relationship.is_family(
            sim, target):
        base_sim_value = 22.5
    elif current_nudity_level == 2:
        sim_value_modifier = 69.1
    if is_sim_exhibitionist(sim):
        sim_value_modifier += -5
    current_friendship_score = int(
        get_relationship_with_sim(sim, target,
                                  RelationshipTrackType.FRIENDSHIP))
    current_friendship_score *= 0.45 * current_nudity_level if current_friendship_score > 0 else 0.45 * (
        6 - current_nudity_level)
    current_romance_score = int(
        get_relationship_with_sim(sim, target, RelationshipTrackType.ROMANCE))
    current_romance_score *= 0.8 * current_nudity_level if current_romance_score > 0 else 0.8 * (
        6 - current_nudity_level)
    current_relationship_amount = (current_friendship_score +
                                   current_romance_score) / 2
    if current_relationship_amount > 0:
        return base_sim_value * (
            1 - current_relationship_amount / 100) + sim_value_modifier
    if current_relationship_amount < 0:
        return base_sim_value + base_sim_value * (
            abs(current_relationship_amount) / 100) + sim_value_modifier
    return base_sim_value + sim_value_modifier
Ejemplo n.º 13
0
def _wickedwhims_strip_clothing_while_admiring_your_body(interaction_instance):
    interaction_guid = TurboResourceUtil.Resource.get_guid64(interaction_instance)
    if interaction_guid in ADMIRE_YOUR_BODY_AFFORDANCES:
        sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
        skill_level = get_sim_nudity_skill_level(sim)
        strip_nude = skill_level >= 3 or skill_level == 2 and TurboWorldUtil.Lot.is_sim_on_home_lot(sim)
        if strip_nude is True:
            strip_result = strip_outfit(sim, strip_type_top=StripType.NUDE, strip_type_bottom=StripType.NUDE, save_original=False)
            set_sim_top_naked_state(sim, True)
            set_sim_bottom_naked_state(sim, True)
            set_sim_top_underwear_state(sim, False)
            set_sim_bottom_underwear_state(sim, False)
        else:
            if not TurboSimUtil.CAS.has_outfit(sim, (TurboCASUtil.OutfitCategory.SWIMWEAR, 0)):
                TurboSimUtil.CAS.generate_outfit(sim, (TurboCASUtil.OutfitCategory.SWIMWEAR, 0))
            TurboSimUtil.CAS.set_current_outfit(sim, (TurboCASUtil.OutfitCategory.SWIMWEAR, 0))
Ejemplo n.º 14
0
def _sims_test(sim, current_score, targets=(), **__):
    penalty_score = 0
    line_of_sight = TurboMathUtil.LineOfSight.create(
        TurboSimUtil.Location.get_routing_surface(sim),
        TurboSimUtil.Location.get_position(sim), 10.0)
    for target in targets or TurboManagerUtil.Sim.get_all_sim_instance_gen(
            humans=True, pets=False):
        if sim is target:
            continue
        if TurboSimUtil.Age.is_younger_than(target,
                                            TurboSimUtil.Age.TODDLER,
                                            or_equal=True):
            continue
        if not is_sim_available(target):
            continue
        if not TurboMathUtil.LineOfSight.test(
                line_of_sight, TurboSimUtil.Location.get_position(target)):
            continue
        penalty_score -= _get_sim_value(
            sim, target) * (6 - get_sim_nudity_skill_level(sim))
        if current_score + penalty_score <= 0:
            break
    return (penalty_score, NudityPermissionDenied.TOO_MANY_SIMS_AROUND)
Ejemplo n.º 15
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     target = cls.get_interaction_target(interaction_instance)
     sim_skill_level = get_sim_nudity_skill_level(sim)
     if TurboSimUtil.Sim.is_npc(target):
         apply_nudity_skill_influence(target,
                                      0.05 * sim_skill_level,
                                      overall_limit=7.1)
         if random.uniform(0, 1) <= 0.1:
             add_sim_trait(target, SimTrait.WW_EXHIBITIONIST)
     else:
         increase_sim_nudity_skill(
             target,
             get_nudity_skill_points_modifier(
                 NuditySkillIncreaseReason.SOCIAL_CONVINCE),
             extra_fatigue=3.1)
     if TurboSimUtil.Gender.get_gender(sim) in get_sim_preferenced_genders(
             target):
         change_sim_desire_level(target, 10)
         change_sim_desire_level(sim, 5)
     increase_sim_ww_statistic(sim, 'times_talked_exhibitionism')
     increase_sim_ww_statistic(target, 'times_talked_exhibitionism')
     return True
Ejemplo n.º 16
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if not CNSimUtils.teen_sex_is_enabled() and (
             CNSimUtils.is_child_or_teen(sim)
             or CNSimUtils.is_child_or_teen(interaction_target)):
         return False
     skill_level = get_sim_nudity_skill_level(sim)
     if skill_level <= 1:
         return False
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if not has_sim_permission_for_nudity(sim)[0]:
         return False
     if is_sim_outfit_fullbody(interaction_target):
         return True
     if get_sim_body_state(interaction_target, 6) == BodyState.OUTFIT:
         return True
     if get_sim_body_state(interaction_target, 7) == BodyState.OUTFIT:
         return True
     return False
Ejemplo n.º 17
0
def _home_test(sim, _, ignore_location_test=False, **__):
    if ignore_location_test is True:
        return
    if not is_sim_at_home_lot(sim, allow_renting=False):
        return (-100 + 12.5 * (get_sim_nudity_skill_level(sim) - 1),
                NudityPermissionDenied.NOT_AT_HOME)
Ejemplo n.º 18
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_target(interaction_instance)
     nudity_debug_info = ''
     nudity_debug_info += 'Body States:\n'
     nudity_debug_info += '  Top: ' + str(get_sim_body_state(sim, 6)) + '\n'
     nudity_debug_info += '  Bottom: ' + str(get_sim_body_state(sim,
                                                                7)) + '\n'
     nudity_debug_info += '\nBody Additional States:\n'
     nudity_debug_info += '  Top: ' + str(
         get_sim_additional_body_state(sim, 6, get_sim_body_state(
             sim, 6))) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         get_sim_additional_body_state(sim, 7, get_sim_body_state(
             sim, 7))) + '\n'
     nudity_debug_info += '\nBody Actual States:\n'
     nudity_debug_info += '  Top: ' + str(get_sim_actual_body_state(
         sim, 6)) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         get_sim_actual_body_state(sim, 7)) + '\n'
     nudity_debug_info += '\nOutfit Body Types:\n'
     nudity_debug_info += '  Has Top: ' + str(
         has_sim_outfit_top(sim)) + '\n'
     nudity_debug_info += '  Has Bottom: ' + str(
         has_sim_outfit_bottom(sim)) + '\n'
     nudity_debug_info += '  Has Full Body: ' + str(
         is_sim_outfit_fullbody(sim)) + '\n'
     nudity_debug_info += '\nNudity Outfit Parts:\n'
     nudity_debug_info += '  Top: ' + str(
         sim_ev(sim).nude_outfit_parts[6]) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         sim_ev(sim).nude_outfit_parts[7]) + '\n'
     nudity_debug_info += '  Feet: ' + str(
         sim_ev(sim).nude_outfit_parts[8]) + '\n'
     nudity_debug_info += '  Penis Texture: ' + str(
         sim_ev(sim).nude_outfit_parts[115]) + '\n'
     nudity_debug_info += '\nPenis Outfit Parts:\n'
     nudity_debug_info += '  Soft: ' + str(
         sim_ev(sim).penis_outfit_parts['soft']) + '\n'
     nudity_debug_info += '  Hard: ' + str(
         sim_ev(sim).penis_outfit_parts['hard']) + '\n'
     nudity_debug_info += '\nPenis Parts Authors:\n'
     nudity_debug_info += '  Soft: ' + str(
         sim_ev(sim).outfit_soft_penis_author) + '\n'
     nudity_debug_info += '  Hard: ' + str(
         sim_ev(sim).outfit_hard_penis_author) + '\n'
     nudity_debug_info += '\nPenis State:\n'
     nudity_debug_info += '  Is Hard: ' + str(
         sim_ev(sim).is_penis_hard) + '\n'
     nudity_debug_info += '  Penis Cooldown: ' + str(
         sim_ev(sim).penis_hard_cooldown) + '\n'
     nudity_debug_info += '\nOriginal Outfit Data:\n'
     nudity_debug_info += '  Has Modifications: ' + str(
         sim_ev(sim).has_original_outfit_modifications) + '\n'
     nudity_debug_info += '  Category: ' + str(
         sim_ev(sim).original_outfit_category) + '\n'
     nudity_debug_info += '  Index: ' + str(
         sim_ev(sim).original_outfit_index) + '\n'
     nudity_debug_info += '  Update Locked: ' + str(
         sim_ev(sim).is_outfit_update_locked) + '\n'
     nudity_debug_info += '\nNudity Skill:\n'
     nudity_debug_info += '  Is Naturist/Is Exhibitionist: ' + str(
         is_sim_naturist(sim)) + '/' + str(is_sim_exhibitionist(sim)) + '\n'
     nudity_debug_info += '  Level: ' + str(
         get_sim_nudity_skill_level(sim) +
         get_sim_nudity_skill_progress(sim)) + '\n'
     nudity_debug_info += '  Influence Score: ' + str(
         sim_ev(sim).nudity_skill_influence_score) + '\n'
     nudity_debug_info += '  Fatigue: ' + str(
         get_sim_statistic_value(
             sim, SimCommodity.WW_NUDITY_SKILL_FATIGUE)) + '\n'
     nudity_debug_info += '\nNudity Reaction:\n'
     nudity_debug_info += '  Full Reaction Cooldown: ' + str(
         sim_ev(sim).full_nudity_reaction_cooldown) + '\n'
     nudity_debug_info += '  Inner Reaction Cooldown: ' + str(
         sim_ev(sim).inner_nudity_reaction_cooldown) + '\n'
     nudity_debug_info += '\nSpecial:\n'
     nudity_debug_info += '  Is Flashing: ' + str(
         sim_ev(sim).is_flashing) + '\n'
     nudity_debug_info += '  Toilet Use Outfit State: ' + str(
         sim_ev(sim).on_toilet_outfit_state) + '\n'
     nudity_debug_info += '  Breast Feeding Outfit State: ' + str(
         sim_ev(sim).on_breast_feeding_outfit_state) + '\n'
     display_notification(text=nudity_debug_info,
                          title=str(TurboSimUtil.Name.get_name(sim)[0]) +
                          ' ' + str(TurboSimUtil.Name.get_name(sim)[1]) +
                          ' Nudity Debug',
                          secondary_icon=sim)